diff options
Diffstat (limited to 'src/quickcontrols/ios')
249 files changed, 2516 insertions, 0 deletions
diff --git a/src/quickcontrols/ios/Button.qml b/src/quickcontrols/ios/Button.qml new file mode 100644 index 0000000000..6d8a6f8e09 --- /dev/null +++ b/src/quickcontrols/ios/Button.qml @@ -0,0 +1,48 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl + +T.Button { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + bottomPadding: 4 + topPadding: 4 + rightPadding: 4 + leftPadding: 4 + + icon.width: 17 + icon.height: 17 + icon.color: control.flat ? (control.enabled ? (control.down ? control.palette.highlight : control.palette.button) + : control.palette.mid) + : control.palette.buttonText + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.flat ? (control.enabled ? (control.down ? control.palette.highlight : control.palette.button) + : control.palette.mid) + : control.palette.buttonText + } + + background: Rectangle { + implicitHeight: 17 + implicitWidth: 10 + radius: 4 + + visible: !control.flat + color: !control.down ? control.palette.button : control.palette.highlight + } +} diff --git a/src/quickcontrols/ios/CMakeLists.txt b/src/quickcontrols/ios/CMakeLists.txt new file mode 100644 index 0000000000..83faad5315 --- /dev/null +++ b/src/quickcontrols/ios/CMakeLists.txt @@ -0,0 +1,107 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## qtquickcontrols2iosstyleplugin Plugin: +##################################################################### + +set(qml_files + "Slider.qml" + "RangeSlider.qml" + "Switch.qml" + "Button.qml" + "CheckBox.qml" + "RadioButton.qml" + "SpinBox.qml" + "ProgressBar.qml" + "Dial.qml" + "PageIndicator.qml" + "TextArea.qml" + "TextField.qml" + "ScrollIndicator.qml" + "ItemDelegate.qml" + "SwitchDelegate.qml" + "RadioDelegate.qml" + "CheckDelegate.qml" + "SwipeDelegate.qml" + "StackView.qml" + "TreeViewDelegate.qml" + "ScrollBar.qml" + "TabButton.qml" + "ToolButton.qml" + "MenuBarItem.qml" + "Frame.qml" + "GroupBox.qml" + "SplitView.qml" + "TabBar.qml" + "ToolBar.qml" + "MenuBar.qml" + "Drawer.qml" + "Popup.qml" + "Menu.qml" + "MenuItem.qml" + "MenuSeparator.qml" +) + +set_source_files_properties(Slider.qml PROPERTIES + QT_QML_SOURCE_VERSIONS "2.2;6.0" +) + +qt_internal_add_qml_module(qtquickcontrols2iosstyleplugin + URI "QtQuick.Controls.iOS" + VERSION "${PROJECT_VERSION}" + CLASS_NAME QtQuickControls2IOSStylePlugin + IMPORTS + QtQuick.Controls.Basic/auto + PAST_MAJOR_VERSIONS 2 + PLUGIN_TARGET qtquickcontrols2iosstyleplugin + NO_PLUGIN_OPTIONAL + NO_GENERATE_PLUGIN_SOURCE + SOURCES + qtquickcontrols2iosstyleplugin.cpp + qquickiostheme_p.h qquickiostheme.mm + QML_FILES + ${qml_files} + DEFINES + QT_NO_CAST_FROM_ASCII + QT_NO_CAST_TO_ASCII + LIBRARIES + Qt::CorePrivate + Qt::GuiPrivate + Qt::QmlPrivate + Qt::QuickControls2Private + Qt::QuickPrivate + Qt::QuickTemplates2Private + Qt::QuickControls2ImplPrivate +) + +qt_internal_extend_target(qtquickcontrols2iosstyleplugin CONDITION APPLE AND IOS + LIBRARIES + ${FWUIKit} +) + +file(GLOB resource_glob RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "images/*.png") +foreach(file IN LISTS resource_glob_0) + set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/${file}" PROPERTIES QT_RESOURCE_ALIAS "${file}") +endforeach() + +# Resources: +set(qmake_qtquickcontrols2iosstyleplugin_resource_files + ${resource_glob} +) + +qt_internal_add_resource(qtquickcontrols2iosstyleplugin "qmake_qtquickcontrols2iosstyleplugin" + PREFIX + "/qt-project.org/imports/QtQuick/Controls/iOS" + FILES + ${qmake_qtquickcontrols2iosstyleplugin_resource_files} +) + +add_subdirectory(impl) + +_qt_internal_add_qml_static_plugin_dependency(qtquickcontrols2iosstyleplugin + qtquickcontrols2iosstyleimplplugin) + +# Basic style is the required fallback style. +_qt_internal_add_qml_static_plugin_dependency(qtquickcontrols2iosstyleplugin + qtquickcontrols2basicstyleplugin) diff --git a/src/quickcontrols/ios/CheckBox.qml b/src/quickcontrols/ios/CheckBox.qml new file mode 100644 index 0000000000..2ef8f83114 --- /dev/null +++ b/src/quickcontrols/ios/CheckBox.qml @@ -0,0 +1,46 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.iOS.impl +import QtQuick.Controls.impl + +T.CheckBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 6 + + indicator: Image { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + opacity: control.enabled ? 1 : 0.5 + + source: IOS.url + (control.checkState === Qt.Unchecked ? "radiobutton-indicator" : "checkbox-indicator") + ImageSelector on source { + states: [ + {"checked": control.checkState === Qt.Checked}, + {"partially-checked": control.checkState === Qt.PartiallyChecked}, + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark} + ] + } + } + + contentItem: Text { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + color: control.palette.windowText + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } +} diff --git a/src/quickcontrols/ios/CheckDelegate.qml b/src/quickcontrols/ios/CheckDelegate.qml new file mode 100644 index 0000000000..fbd2a4ce35 --- /dev/null +++ b/src/quickcontrols/ios/CheckDelegate.qml @@ -0,0 +1,75 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.iOS.impl +import QtQuick.Controls.impl + +T.CheckDelegate { + id: control + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + padding: 7 + leftPadding: 16 + rightPadding: 16 + spacing: 14 + + icon.width: 29 + icon.height: 29 + icon.color: control.enabled ? control.palette.text : control.palette.mid + + indicator: Image { + x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding + y: control.topPadding + (control.availableHeight - height) / 2 + opacity: control.enabled ? 1 : 0.5 + + source: IOS.url + (control.checkState === Qt.Unchecked ? "radiobutton-indicator" : "checkbox-indicator") + ImageSelector on source { + states: [ + {"checked": control.checkState === Qt.Checked}, + {"partially-checked": control.checkState === Qt.PartiallyChecked}, + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark} + ] + } + } + + contentItem: IconLabel { + leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.enabled ? control.palette.text : control.palette.mid + } + + background: Rectangle { + implicitHeight: 44 + color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base + NinePatchImage { + property real offset: control.icon.source.toString() !== "" ? control.icon.width + control.spacing : 0 + x: control.down ? 0 : control.leftPadding + offset + y: control.down ? -1 : 0 + height: control.height + (control.down ? 1 : 0) + width: control.down ? control.width : control.availableWidth + control.rightPadding - offset + source: IOS.url + "itemdelegate-background" + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"pressed": control.down} + ] + } + } + } +} diff --git a/src/quickcontrols/ios/Dial.qml b/src/quickcontrols/ios/Dial.qml new file mode 100644 index 0000000000..2a4c9666bc --- /dev/null +++ b/src/quickcontrols/ios/Dial.qml @@ -0,0 +1,102 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.iOS.impl +import QtQuick.Shapes + +T.Dial { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + leftInset: handle ? handle.width / 2 : 0 + rightInset: handle ? handle.width / 2 : 0 + topInset: handle ? handle.height / 2 : 0 + bottomInset: handle ? handle.height / 2 : 0 + + background: Item { + implicitWidth: 104 + implicitHeight: 104 + x: control.leftInset + (control.availableWidth - width) / 2 + y: control.topInset + (control.availableHeight - height) / 2 + + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + implicitWidth: parent.implicitWidth + implicitHeight: parent.implicitHeight + width: Math.max(50, Math.min(control.background.width, control.background.height)) + height: width + color: "transparent" + border.color: control.palette.mid + border.width: 4 + radius: width * 0.5 + z: -1 + + opacity: control.enabled? 1 : 0.5 + } + + Shape { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + implicitWidth: parent.implicitWidth + implicitHeight: parent.implicitHeight + width: Math.max(50, Math.min(control.background.width, control.background.height)) + height: width + layer.enabled: true + layer.samples: 4 + + ShapePath { + fillColor: "transparent" + strokeColor: control.palette.button + strokeWidth: 4 + + capStyle: ShapePath.RoundCap + + PathAngleArc { + centerX: control.background.children[0].width / 2 + centerY: control.background.children[0].height / 2 + radiusX: control.background.children[0].width / 2 - 2 + radiusY: radiusX + startAngle: -230 + sweepAngle: 140 + control.angle + } + } + } + } + + handle: Item { + height: dialHandle.height - dialHandle.topInset - dialHandle.bottomInset + width: dialHandle.width - dialHandle.rightInset - dialHandle.leftInset + x: control.background.x + control.background.width / 2 - width / 2 + y: control.background.y + control.background.height / 2 - height / 2 + + transform: [ + Translate { + x: Math.cos((angle - 90) * Math.PI / 180) * Math.min(control.background.width, control.background.height) * 0.5; + y: Math.sin((angle - 90) * Math.PI / 180) * Math.min(control.background.width, control.background.height) * 0.5; + } + ] + + readonly property NinePatchImage dialHandle: NinePatchImage { + parent: control.handle + x: -leftInset + y: -topInset + + source: IOS.url + "slider-handle" + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"disabled": !control.enabled} + ] + } + } + } +} diff --git a/src/quickcontrols/ios/Drawer.qml b/src/quickcontrols/ios/Drawer.qml new file mode 100644 index 0000000000..52cdb8b372 --- /dev/null +++ b/src/quickcontrols/ios/Drawer.qml @@ -0,0 +1,61 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.iOS.impl + +T.Drawer { + id: control + + parent: T.Overlay.overlay + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + property real inset: control.dim ? 8 : 0 + property bool vertical: control.edge === Qt.LeftEdge || control.edge === Qt.RightEdge + + rightInset: background && control.edge === Qt.LeftEdge ? -inset : 0 + leftInset: background && control.edge === Qt.RightEdge ? -inset : 0 + bottomInset: background && control.edge === Qt.TopEdge ? -inset : 0 + topInset: background && control.edge === Qt.BottomEdge ? -inset : 0 + + enter: Transition { SmoothedAnimation { velocity: 5 } } + exit: Transition { SmoothedAnimation { velocity: 5 } } + + background: Item { + NinePatchImage { + source: IOS.url + "drawer-background" + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"modal": control.modal} + ] + } + y: (parent.height - height) / 2 + x: (parent.width - width) / 2 + rotation: control.edge === Qt.TopEdge ? 90 : (control.edge === Qt.BottomEdge ? -90 + : (control.edge === Qt.RightEdge ? 180 : 0)) + width: vertical ? parent.width : parent.height + height: vertical ? parent.height : parent.width + } + Rectangle { + width: vertical ? 1 : parent.width + height: vertical ? parent.height : 1 + color: control.palette.mid + x: control.edge === Qt.LeftEdge ? parent.width - 1 - inset : (control.edge === Qt.RightEdge ? inset : 0) + y: control.edge === Qt.BottomEdge ? inset : (control.edge === Qt.TopEdge ? parent.height - 1 - inset : 0) + z: 10 + } + } + + T.Overlay.modal: Rectangle { + color: Color.transparent(control.palette.mid, 0.5) + Behavior on opacity { NumberAnimation { duration: 150 } } + } +} diff --git a/src/quickcontrols/ios/Frame.qml b/src/quickcontrols/ios/Frame.qml new file mode 100644 index 0000000000..5c52269a3c --- /dev/null +++ b/src/quickcontrols/ios/Frame.qml @@ -0,0 +1,24 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T + +T.Frame { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + padding: 16 + leftPadding: 20 + rightPadding: 20 + spacing: 10 + + background: Rectangle { + radius: 9 + color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base + } +} diff --git a/src/quickcontrols/ios/GroupBox.qml b/src/quickcontrols/ios/GroupBox.qml new file mode 100644 index 0000000000..3adc599ddf --- /dev/null +++ b/src/quickcontrols/ios/GroupBox.qml @@ -0,0 +1,41 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T + +T.GroupBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitLabelWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + padding: 16 + leftPadding: 20 + rightPadding: 20 + topPadding: padding + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0) + spacing: 10 + + label: Text { + x: control.leftPadding + width: control.availableWidth + + text: control.title + font.pointSize: control.font.pointSize - 2.0 + font.capitalization: Font.AllUppercase + color: control.palette.placeholderText + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } + + background: Rectangle { + y: control.topPadding - control.bottomPadding + width: parent.width + height: parent.height - control.topPadding + control.bottomPadding + radius: 9 + color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base + } +} diff --git a/src/quickcontrols/ios/ItemDelegate.qml b/src/quickcontrols/ios/ItemDelegate.qml new file mode 100644 index 0000000000..28146e51fd --- /dev/null +++ b/src/quickcontrols/ios/ItemDelegate.qml @@ -0,0 +1,56 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.iOS.impl + +T.ItemDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + padding: 7 + leftPadding: 16 + rightPadding: 16 + spacing: 14 + + icon.width: 29 + icon.height: 29 + icon.color: control.enabled ? control.palette.text : control.palette.mid + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + icon: control.icon + text: control.text + font: control.font + color: control.enabled ? control.palette.text : control.palette.mid + } + + background: Rectangle { + implicitHeight: 44 + color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base + NinePatchImage { + property real offset: control.icon.source.toString() !== "" ? control.icon.width + control.spacing : 0 + x: control.down ? 0 : control.leftPadding + offset + y: control.down ? -1 : 0 + height: control.height + (control.down ? 1 : 0) + width: control.down ? control.width : control.availableWidth + control.rightPadding - offset + source: IOS.url + "itemdelegate-background" + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"pressed": control.down} + ] + } + } + } +} diff --git a/src/quickcontrols/ios/Menu.qml b/src/quickcontrols/ios/Menu.qml new file mode 100644 index 0000000000..437731c19e --- /dev/null +++ b/src/quickcontrols/ios/Menu.qml @@ -0,0 +1,71 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.iOS.impl + +T.Menu { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + delegate: MenuItem {} + + margins: 0 + cascade: true + dim: modal || control.parent && control.parent.menu + overlap: control.width + + enter: Transition { + NumberAnimation { property: "scale"; from: 0.2; to: 1.0; easing.type: Easing.OutQuint; duration: 220 } + NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.OutCubic; duration: 150 } + } + + exit: Transition { + NumberAnimation { property: "scale"; from: 1.0; to: 0.0; easing.type: Easing.OutQuint; duration: 220 } + NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.OutCubic; duration: 150 } + } + + contentItem: ListView { + implicitHeight: contentHeight + model: control.contentModel + interactive: Window.window + ? contentHeight + control.topPadding + control.bottomPadding > Window.window.height + : false + clip: true + currentIndex: control.currentIndex + + T.ScrollIndicator.vertical: ScrollIndicator { } + } + + background: Item { + implicitHeight: 44 + implicitWidth: 250 + NinePatchImage { + width: parent.width + height: parent.height + source: IOS.url + "menu-background" + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark} + ] + } + } + } + + T.Overlay.modal: Rectangle { + color: Color.transparent("black", 0.5) + Behavior on opacity { NumberAnimation { duration: 150 } } + } + + T.Overlay.modeless: Rectangle { + color: Color.transparent("black", 0.5) + Behavior on opacity { NumberAnimation { duration: 150 } } + } +} diff --git a/src/quickcontrols/ios/MenuBar.qml b/src/quickcontrols/ios/MenuBar.qml new file mode 100644 index 0000000000..06f549e82a --- /dev/null +++ b/src/quickcontrols/ios/MenuBar.qml @@ -0,0 +1,35 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl + +T.MenuBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + delegate: MenuBarItem { } + + contentItem: Row { + spacing: control.spacing + Repeater { + model: control.contentModel + } + } + + background: Rectangle { + opacity: 0.98 + color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base + Rectangle { + height: 1 + width: parent.width + color: control.palette.mid + y: control.position === T.TabBar.Footer ? 0 : parent.height - 1 + } + } +} diff --git a/src/quickcontrols/ios/MenuBarItem.qml b/src/quickcontrols/ios/MenuBarItem.qml new file mode 100644 index 0000000000..5fe36693e4 --- /dev/null +++ b/src/quickcontrols/ios/MenuBarItem.qml @@ -0,0 +1,41 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl + +T.MenuBarItem { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 6 + padding: 6 + + icon.width: 25 + icon.height: 25 + icon.color: control.enabled ? (control.down ? control.palette.highlight : control.palette.button) + : control.palette.mid + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.enabled ? (control.down ? control.palette.highlight : control.palette.button) + : control.palette.mid + } + + background: Item { + implicitHeight: 49 + } +} diff --git a/src/quickcontrols/ios/MenuItem.qml b/src/quickcontrols/ios/MenuItem.qml new file mode 100644 index 0000000000..85137f5a21 --- /dev/null +++ b/src/quickcontrols/ios/MenuItem.qml @@ -0,0 +1,104 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.iOS.impl + +T.MenuItem { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + leftPadding: 12 + rightPadding: 18 + spacing: 9 + + icon.width: 19 + icon.height: 19 + icon.color: control.palette.windowText + + property bool isSingleItem: control.menu && control.menu.count === 1 + property bool isFirstItem: !isSingleItem && control.menu && control.menu.itemAt(0) === control ? true : false + property bool isLastItem: !isSingleItem && control.menu && control.menu.itemAt(control.menu.count - 1) === control ? true : false + property real indicatorWidth: 12 + + contentItem: IconLabel { + readonly property real padding: control.indicatorWidth + control.spacing + leftPadding: !control.mirrored ? padding : 0 + rightPadding: control.mirrored ? padding : 0 + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.palette.windowText + } + + arrow: ColorImage { + x: control.mirrored ? control.width - width - control.rightPadding : control.leftPadding + y: control.topPadding + (control.availableHeight - height) / 2 + width: 7 + height: 12 + rotation: control.subMenu && (control.down || control.subMenu.visible) ? 90 : 0 + + visible: control.subMenu + opacity: control.enabled ? 1 : 0.5 + mirror: control.mirrored + color: control.palette.windowText + source: control.subMenu ? "qrc:/qt-project.org/imports/QtQuick/Controls/iOS/images/arrow-indicator-light.png" : "" + + Behavior on rotation { RotationAnimation { duration: 100 } } + } + + indicator: ColorImage { + x: control.mirrored ? control.width - width - control.rightPadding : control.leftPadding + y: control.topPadding + (control.availableHeight - height) / 2 + width: control.indicatorWidth + height: control.indicatorWidth + + visible: control.checked + source: control.checkable ? "qrc:/qt-project.org/imports/QtQuick/Controls/iOS/images/radiodelegate-indicator-light.png" : "" + color: control.palette.windowText + } + + background: Item { + implicitHeight: 44 + implicitWidth: 250 + NinePatchImage { + y: control.isLastItem ? -1 : 0 + width: parent.width + height: control.isLastItem ? parent.height + 1 : parent.height + rotation: control.isLastItem ? 180 : 0 + visible: !(isSingleItem && !control.down) + source: IOS.url + "menuitem-background" + NinePatchImageSelector on source { + states: [ + {"edge": control.isFirstItem || control.isLastItem}, + {"single": control.isSingleItem}, + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"pressed": control.down} + ] + } + } + } + + states: [ + State { + name: "submenu-opened" + when: control.subMenu && control.subMenu.visible + PropertyChanges { target: control.menu; scale: 0.9 } + } + ] +} + diff --git a/src/quickcontrols/ios/MenuSeparator.qml b/src/quickcontrols/ios/MenuSeparator.qml new file mode 100644 index 0000000000..ba69005611 --- /dev/null +++ b/src/quickcontrols/ios/MenuSeparator.qml @@ -0,0 +1,26 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.iOS.impl + +T.MenuSeparator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + contentItem: NinePatchImage { + source: IOS.url + "menuseparator-separator" + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark} + ] + } + } +} diff --git a/src/quickcontrols/ios/PageIndicator.qml b/src/quickcontrols/ios/PageIndicator.qml new file mode 100644 index 0000000000..036f952ea8 --- /dev/null +++ b/src/quickcontrols/ios/PageIndicator.qml @@ -0,0 +1,37 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.iOS.impl + +T.PageIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + delegate: Image { + source: IOS.url + "pageindicator-delegate" + ImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"current": index === control.currentIndex}, + ] + } + opacity: control.enabled ? 1 : 0.5 + } + + contentItem: Row { + spacing: 10 + + Repeater { + model: control.count + delegate: control.delegate + } + } +} diff --git a/src/quickcontrols/ios/Popup.qml b/src/quickcontrols/ios/Popup.qml new file mode 100644 index 0000000000..47a6157f71 --- /dev/null +++ b/src/quickcontrols/ios/Popup.qml @@ -0,0 +1,54 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.iOS.impl + +T.Popup { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topPadding: 23 + padding: 16 + + enter: Transition { + NumberAnimation { property: "scale"; from: 1.5; to: 1.0; easing.type: Easing.OutQuint; duration: 220 } + NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.OutCubic; duration: 150 } + } + + exit: Transition { + NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.OutCubic; duration: 150 } + } + + background: Item { + implicitWidth: 270 + implicitHeight: 140 + NinePatchImage { + width: parent.width + height: parent.height + source: IOS.url + "popup-background" + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark} + ] + } + } + } + + T.Overlay.modal: Rectangle { + color: Color.transparent("black", 0.5) + Behavior on opacity { NumberAnimation { duration: 150 } } + } + + T.Overlay.modeless: Rectangle { + color: Color.transparent("black", 0.5) + Behavior on opacity { NumberAnimation { duration: 150 } } + } +} diff --git a/src/quickcontrols/ios/ProgressBar.qml b/src/quickcontrols/ios/ProgressBar.qml new file mode 100644 index 0000000000..c280d5f94f --- /dev/null +++ b/src/quickcontrols/ios/ProgressBar.qml @@ -0,0 +1,66 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.iOS.impl + +T.ProgressBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + opacity: control.enabled ? 1 : 0.5 + + contentItem: Item { + parent: control.background + implicitWidth: progress.width + implicitHeight: progress.implicitHeight + scale: control.mirrored ? -1 : 1 + + readonly property NinePatchImage progress: NinePatchImage { + parent: control.contentItem + visible: control.indeterminate || control.value + y: (parent.height - height) / 2 + width: control.indeterminate ? control.width * 0.4 : control.position * parent.width + + source: IOS.url + "slider-progress" + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark} + ] + } + + NumberAnimation on x { + running: control.indeterminate && control.visible + from: -control.contentItem.progress.width + to: control.width + duration: 900 + easing.type: Easing.Linear + loops: Animation.Infinite + } + } + } + + background: Item { + implicitWidth: 150 + implicitHeight: children[0].implicitHeight + clip: control.indeterminate + NinePatchImage { + source: IOS.url + "slider-background" + y: (parent.height - height) / 2 + width: control.background.width + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark} + ] + } + } + } +} diff --git a/src/quickcontrols/ios/RadioButton.qml b/src/quickcontrols/ios/RadioButton.qml new file mode 100644 index 0000000000..37cf71e1f5 --- /dev/null +++ b/src/quickcontrols/ios/RadioButton.qml @@ -0,0 +1,45 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.iOS.impl +import QtQuick.Controls.impl + +T.RadioButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 6 + + indicator: Image { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + opacity: control.enabled ? 1 : 0.5 + + source: IOS.url + "radiobutton-indicator" + ImageSelector on source { + states: [ + {"checked": control.checked}, + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark} + ] + } + } + + contentItem: Text { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + color: control.palette.windowText + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } +} diff --git a/src/quickcontrols/ios/RadioDelegate.qml b/src/quickcontrols/ios/RadioDelegate.qml new file mode 100644 index 0000000000..6de6dbb622 --- /dev/null +++ b/src/quickcontrols/ios/RadioDelegate.qml @@ -0,0 +1,75 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.iOS.impl + +T.RadioDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + padding: 7 + leftPadding: 16 + rightPadding: 16 + spacing: 14 + + icon.width: 29 + icon.height: 29 + icon.color: control.enabled ? control.palette.text : control.palette.mid + + indicator: Image { + x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding + y: control.topPadding + (control.availableHeight - height) / 2 + opacity: control.enabled ? 1 : 0.5 + visible: control.checked + + source: IOS.url + "radiodelegate-indicator" + ImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark} + ] + } + } + + contentItem: IconLabel { + leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.enabled ? control.palette.text : control.palette.mid + } + + background: Rectangle { + implicitHeight: 44 + color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base + NinePatchImage { + property real offset: control.icon.source.toString() !== "" ? control.icon.width + control.spacing : 0 + x: control.down ? 0 : control.leftPadding + offset + y: control.down ? -1 : 0 + height: control.height + (control.down ? 1 : 0) + width: control.down ? control.width : control.availableWidth + control.rightPadding - offset + source: IOS.url + "itemdelegate-background" + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"pressed": control.down} + ] + } + } + } +} diff --git a/src/quickcontrols/ios/RangeSlider.qml b/src/quickcontrols/ios/RangeSlider.qml new file mode 100644 index 0000000000..966f612ba8 --- /dev/null +++ b/src/quickcontrols/ios/RangeSlider.qml @@ -0,0 +1,91 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.iOS.impl +import QtQuick.Controls.impl + +T.RangeSlider { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + first.implicitHandleWidth + leftPadding + rightPadding, + second.implicitHandleWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + first.implicitHandleHeight + topPadding + bottomPadding, + second.implicitHandleWidth + leftPadding + rightPadding) + + first.handle: Item { + implicitWidth: children[0].implicitWidth - children[0].leftInset - children[0].rightInset + implicitHeight: children[0].implicitWidth - children[0].topInset - children[0].bottomInset + x: Math.round(control.leftPadding + (control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2)) + y: Math.round(control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height))) + + NinePatchImage { + x: -leftInset + y: -topInset + source: IOS.url + "slider-handle" + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark}, + ] + } + } + } + + second.handle: Item { + implicitWidth: children[0].implicitWidth - children[0].leftInset - children[0].rightInset + implicitHeight: children[0].implicitWidth - children[0].topInset - children[0].bottomInset + x: Math.round(control.leftPadding + (control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2)) + y: Math.round(control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height))) + + NinePatchImage { + x: -leftInset + y: -topInset + source: IOS.url + "slider-handle" + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark}, + ] + } + } + } + + background: Item { + implicitWidth: control.horizontal ? 114 : children[0].implicitHeight + implicitHeight: control.horizontal ? children[0].implicitHeight : 114 + opacity: control.enabled ? 1 : 0.5 + + NinePatchImage { + source: IOS.url + "slider-background" + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + rotation: control.horizontal ? 0 : -90 + width: control.horizontal ? control.background.width : control.background.height + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark}, + ] + } + + NinePatchImage { + x: control.first.handle.width / 2 + control.first.position * (parent.width - control.first.handle.width) + y: (parent.height - height) / 2 + width: control.second.position * (parent.width - control.first.handle.width) - control.first.position * (parent.width - control.first.handle.width) + height: parent.height + + source: IOS.url + "slider-progress" + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark}, + ] + } + } + } + } +} diff --git a/src/quickcontrols/ios/ScrollBar.qml b/src/quickcontrols/ios/ScrollBar.qml new file mode 100644 index 0000000000..3bdabe4f08 --- /dev/null +++ b/src/quickcontrols/ios/ScrollBar.qml @@ -0,0 +1,49 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.iOS.impl +import QtQuick.Controls.impl + +T.ScrollBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + visible: control.policy !== T.ScrollBar.AlwaysOff + minimumSize: orientation === Qt.Horizontal ? height / width : width / height + + contentItem: NinePatchImage { + width: control.availableWidth + height: control.availableHeight + + source: IOS.url + "scrollindicator-handle" + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"horizontal": control.horizontal}, + {"vertical": control.vertical} + ] + } + opacity: 0.0 + } + + states: State { + name: "active" + when: control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0) + PropertyChanges { control.contentItem.opacity: 0.75 } + } + + transitions: Transition { + from: "active" + SequentialAnimation { + PauseAnimation { duration: 450 } + NumberAnimation { target: control.contentItem; duration: 200; property: "opacity"; to: 0.0 } + } + } +} diff --git a/src/quickcontrols/ios/ScrollIndicator.qml b/src/quickcontrols/ios/ScrollIndicator.qml new file mode 100644 index 0000000000..d6d842196a --- /dev/null +++ b/src/quickcontrols/ios/ScrollIndicator.qml @@ -0,0 +1,48 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.iOS.impl +import QtQuick.Controls.impl + +T.ScrollIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + contentItem: NinePatchImage { + source: IOS.url + "scrollindicator-handle" + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"horizontal": control.horizontal}, + {"vertical": control.vertical} + ] + } + width: control.availableWidth + height: control.availableHeight + visible: control.size < 1.0 + opacity: 0.0 + + states: State { + name: "active" + when: control.active + PropertyChanges { control.contentItem.opacity: 0.75 } + } + + transitions: [ + Transition { + from: "active" + SequentialAnimation { + PauseAnimation { duration: 450 } + NumberAnimation { target: control.contentItem; duration: 200; property: "opacity"; to: 0.0 } + } + } + ] + } +} diff --git a/src/quickcontrols/ios/Slider.qml b/src/quickcontrols/ios/Slider.qml new file mode 100644 index 0000000000..1f6ca9f242 --- /dev/null +++ b/src/quickcontrols/ios/Slider.qml @@ -0,0 +1,69 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.iOS.impl +import QtQuick.Controls.impl + +T.Slider { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitHandleWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitHandleHeight + topPadding + bottomPadding) + + handle: Item { + implicitWidth: children[0].implicitWidth - children[0].leftInset - children[0].rightInset + implicitHeight: children[0].implicitWidth - children[0].topInset - children[0].bottomInset + x: Math.round(control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2)) + y: Math.round(control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height))) + + NinePatchImage { + x: -leftInset + y: -topInset + source: IOS.url + "slider-handle" + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"disabled": !control.enabled} + ] + } + } + } + + background: Item { + implicitWidth: control.horizontal ? 114 : children[0].implicitHeight + implicitHeight: control.horizontal ? children[0].implicitHeight : 114 + opacity: control.enabled ? 1 : 0.5 + + NinePatchImage { + source: IOS.url + "slider-background" + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + rotation: control.horizontal ? 0 : -90 + width: control.horizontal ? background.width : background.height + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark}, + ] + } + + NinePatchImage { + width: control.handle.width / 2 + control.position * (parent.width - control.handle.width) + height: parent.height + + source: IOS.url + "slider-progress" + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark}, + ] + } + } + } + } +} diff --git a/src/quickcontrols/ios/SpinBox.qml b/src/quickcontrols/ios/SpinBox.qml new file mode 100644 index 0000000000..ed4e4c1bc7 --- /dev/null +++ b/src/quickcontrols/ios/SpinBox.qml @@ -0,0 +1,97 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.iOS.impl +import QtQuick.Controls.impl + +T.SpinBox { + id: control + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentItem.implicitWidth + 2 * padding + + up.implicitIndicatorWidth + + down.implicitIndicatorWidth) + implicitHeight: Math.max(implicitContentHeight + topPadding + bottomPadding, + implicitBackgroundHeight, + up.implicitIndicatorHeight, + down.implicitIndicatorHeight) + + padding: 0 + leftPadding: control.mirrored ? (up.indicator ? up.indicator.width : 0) : (down.indicator ? down.indicator.width : 0) + rightPadding: control.mirrored ? (down.indicator ? down.indicator.width : 0) : (up.indicator ? up.indicator.width : 0) + + validator: IntValidator { + locale: control.locale.name + bottom: Math.min(control.from, control.to) + top: Math.max(control.from, control.to) + } + + contentItem: TextInput { + z: 2 + text: control.displayText + padding: 6 + + font: control.font + color: control.palette.text + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + horizontalAlignment: Qt.AlignHCenter + verticalAlignment: Qt.AlignVCenter + + readOnly: !control.editable + validator: control.validator + inputMethodHints: control.inputMethodHints + } + + up.indicator: NinePatchImage { + x: control.mirrored ? 0 : control.width - width + height: control.height + opacity: control.up.indicator.enabled ? 1 : 0.5 + + source: IOS.url + "spinbox-indicator" + NinePatchImageSelector on source { + states: [ + {"up": true}, + {"pressed": control.up.pressed}, + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark} + ] + } + } + + down.indicator: NinePatchImage { + x: control.mirrored ? control.width - width : 0 + height: control.height + opacity: control.down.indicator.enabled ? 1 : 0.5 + + source: IOS.url + "spinbox-indicator" + NinePatchImageSelector on source { + states: [ + {"down": true}, + {"pressed": control.down.pressed}, + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark} + ] + } + } + + background: Item { + implicitWidth: 150 + implicitHeight: children[0].implicitHeight + + NinePatchImage { + source: IOS.url + "spinbox-background" + width: control.background.width + height: control.background.height + opacity: control.enabled ? 1 : 0.5 + y: (parent.height - height) / 2 + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark} + ] + } + } + } +} diff --git a/src/quickcontrols/ios/SplitView.qml b/src/quickcontrols/ios/SplitView.qml new file mode 100644 index 0000000000..ab912b86b2 --- /dev/null +++ b/src/quickcontrols/ios/SplitView.qml @@ -0,0 +1,25 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T + +T.SplitView { + id: control + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + handle: Rectangle { + implicitWidth: control.orientation === Qt.Horizontal ? 1 : control.width + implicitHeight: control.orientation === Qt.Horizontal ? control.height : 1 + color: control.palette.mid + // Increase the hit area + containmentMask: Item { + width: control.orientation === Qt.Horizontal ? 8 : control.width + height: control.orientation === Qt.Horizontal ? control.height : 8 + } + } +} + diff --git a/src/quickcontrols/ios/StackView.qml b/src/quickcontrols/ios/StackView.qml new file mode 100644 index 0000000000..c116ad5227 --- /dev/null +++ b/src/quickcontrols/ios/StackView.qml @@ -0,0 +1,34 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl + +T.StackView { + id: control + + popEnter: Transition { + XAnimator { from: (control.mirrored ? -1 : 1) * -control.width; to: 0; duration: 200; easing.type: Easing.OutCubic } + } + + popExit: Transition { + XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * control.width; duration: 200; easing.type: Easing.OutCubic } + } + + pushEnter: Transition { + XAnimator { from: (control.mirrored ? -1 : 1) * control.width; to: 0; duration: 200; easing.type: Easing.OutCubic } + } + + pushExit: Transition { + XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * -control.width; duration: 200; easing.type: Easing.OutCubic } + } + + replaceEnter: Transition { + XAnimator { from: (control.mirrored ? -1 : 1) * control.width; to: 0; duration: 200; easing.type: Easing.OutCubic } + } + + replaceExit: Transition { + XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * -control.width; duration: 200; easing.type: Easing.OutCubic } + } +} diff --git a/src/quickcontrols/ios/SwipeDelegate.qml b/src/quickcontrols/ios/SwipeDelegate.qml new file mode 100644 index 0000000000..ccabfc0cb4 --- /dev/null +++ b/src/quickcontrols/ios/SwipeDelegate.qml @@ -0,0 +1,59 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.iOS.impl + +T.SwipeDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + padding: 7 + leftPadding: 16 + rightPadding: 16 + spacing: 14 + + icon.width: 29 + icon.height: 29 + icon.color: control.enabled ? control.palette.text : control.palette.mid + + swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } } + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.enabled ? control.palette.text : control.palette.mid + } + + background: Rectangle { + implicitHeight: 44 + color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base + NinePatchImage { + property real offset: control.icon.source.toString() !== "" ? control.icon.width + control.spacing : 0 + x: control.down ? 0 : control.leftPadding + offset + y: control.down ? -1 : 0 + height: control.height + (control.down ? 1 : 0) + width: control.down ? control.width : control.availableWidth + control.rightPadding - offset + source: IOS.url + "itemdelegate-background" + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"pressed": control.down} + ] + } + } + } +} diff --git a/src/quickcontrols/ios/Switch.qml b/src/quickcontrols/ios/Switch.qml new file mode 100644 index 0000000000..7a600afc5f --- /dev/null +++ b/src/quickcontrols/ios/Switch.qml @@ -0,0 +1,79 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.iOS.impl + +T.Switch { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 0 + topInset: 0 + leftInset: 0 + rightInset: 0 + bottomInset: 0 + spacing: 6 + + indicator: Image { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + width: implicitWidth + height: Math.max(implicitHeight, handle.implicitHeight) + opacity: control.enabled ? 1 : 0.5 + + source: IOS.url + "switch-indicator" + ImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"checked": control.checked} + ] + } + + property NinePatchImage handle: NinePatchImage { + property real margin: 2 + readonly property real minPos: leftPadding - leftInset + margin + readonly property real maxPos: parent.width - width + rightPadding + rightInset - margin + readonly property real dragPos: control.visualPosition * parent.width - (width / 2) + + parent: control.indicator + + x: Math.max(minPos, Math.min(maxPos, dragPos)) + y: (parent.height - height) / 2 - topInset + margin + width: control.pressed ? implicitWidth + 4 : implicitWidth + + source: IOS.url + "switch-handle" + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"disabled": !control.enabled} + ] + } + + Behavior on x { + enabled: !control.down + SmoothedAnimation { velocity: 150 } + } + } + } + + contentItem: Text { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + color: control.palette.windowText + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } +} diff --git a/src/quickcontrols/ios/SwitchDelegate.qml b/src/quickcontrols/ios/SwitchDelegate.qml new file mode 100644 index 0000000000..4cba6dcabf --- /dev/null +++ b/src/quickcontrols/ios/SwitchDelegate.qml @@ -0,0 +1,102 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.iOS.impl + +T.SwitchDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + padding: 7 + leftPadding: 16 + rightPadding: 16 + spacing: 14 + + icon.width: 29 + icon.height: 29 + icon.color: control.enabled ? control.palette.text : control.palette.mid + + indicator: Image { + x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + width: implicitWidth + height: Math.max(implicitHeight, handle.implicitHeight) + opacity: control.enabled ? 1 : 0.5 + + source: IOS.url + "switch-indicator" + ImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"checked": control.checked} + ] + } + + property NinePatchImage handle: NinePatchImage { + property real margin: 2 + readonly property real minPos: leftPadding - leftInset + margin + readonly property real maxPos: parent.width - width + rightPadding + rightInset - margin + readonly property real dragPos: control.visualPosition * parent.width - (width / 2) + + parent: control.indicator + + x: Math.max(minPos, Math.min(maxPos, dragPos)) + y: (parent.height - height) / 2 - topInset + margin + width: control.pressed ? implicitWidth + 4 : implicitWidth + + source: IOS.url + "switch-handle" + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"disabled": !control.enabled} + ] + } + + Behavior on x { + enabled: !control.down + SmoothedAnimation { velocity: 150 } + } + } + } + + contentItem: IconLabel { + leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.enabled ? control.palette.text : control.palette.mid + } + + background: Rectangle { + implicitHeight: 44 + color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base + NinePatchImage { + property real offset: control.icon.source.toString() !== "" ? control.icon.width + control.spacing : 0 + x: control.leftPadding + offset + height: control.height + width: control.availableWidth + control.rightPadding - offset + source: IOS.url + "itemdelegate-background" + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark}, + ] + } + } + } +} diff --git a/src/quickcontrols/ios/TabBar.qml b/src/quickcontrols/ios/TabBar.qml new file mode 100644 index 0000000000..1d289c71af --- /dev/null +++ b/src/quickcontrols/ios/TabBar.qml @@ -0,0 +1,43 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T + +T.TabBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + spacing: 1 + + contentItem: ListView { + model: control.contentModel + currentIndex: control.currentIndex + + spacing: control.spacing + orientation: ListView.Horizontal + boundsBehavior: Flickable.StopAtBounds + flickableDirection: Flickable.AutoFlickIfNeeded + snapMode: ListView.SnapToItem + + highlightMoveDuration: 0 + highlightRangeMode: ListView.ApplyRange + preferredHighlightBegin: 40 + preferredHighlightEnd: width - 40 + } + + background: Rectangle { + implicitHeight: 49 + color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base + Rectangle { + height: 1 + width: parent.width + color: control.palette.mid + y: control.position === T.TabBar.Footer ? 0 : parent.height - 1 + } + } +} diff --git a/src/quickcontrols/ios/TabButton.qml b/src/quickcontrols/ios/TabButton.qml new file mode 100644 index 0000000000..0dc84e4f1d --- /dev/null +++ b/src/quickcontrols/ios/TabButton.qml @@ -0,0 +1,42 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.iOS.impl + +T.TabButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + padding: 6 + spacing: 6 + + icon.width: 25 + icon.height: 25 + icon.color: checked ? control.palette.button : control.palette.dark + + display: TabButton.TextUnderIcon + font.pointSize: 12 + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: Qt.AlignCenter + + icon: control.icon + text: control.text + font: control.font + color: checked ? control.palette.button : control.palette.dark + opacity: control.enabled ? 1 : 0.5 + } + + background: Item { + implicitHeight: 49 + } +} diff --git a/src/quickcontrols/ios/TextArea.qml b/src/quickcontrols/ios/TextArea.qml new file mode 100644 index 0000000000..582af1bb64 --- /dev/null +++ b/src/quickcontrols/ios/TextArea.qml @@ -0,0 +1,49 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.iOS.impl + +T.TextArea { + id: control + + implicitWidth: Math.max(contentWidth + leftPadding + rightPadding, + implicitBackgroundWidth + leftInset + rightInset, + placeholder.implicitWidth + leftPadding + rightPadding) + implicitHeight: Math.max(contentHeight + topPadding + bottomPadding, + implicitBackgroundHeight + topInset + bottomInset, + placeholder.implicitHeight + topPadding + bottomPadding) + + leftPadding: 6 + rightPadding: 6 + + color: control.palette.text + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + placeholderTextColor: control.palette.placeholderText + cursorDelegate: CursorDelegate {} + + PlaceholderText { + id: placeholder + x: control.leftPadding + y: control.topPadding + width: control.width - (control.leftPadding + control.rightPadding) + height: control.height - (control.topPadding + control.bottomPadding) + + text: control.placeholderText + font: control.font + color: control.placeholderTextColor + verticalAlignment: control.verticalAlignment + visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) + elide: Text.ElideRight + renderType: control.renderType + } + + background: Rectangle { + implicitWidth: 240 + implicitHeight: 128 + color: control.palette.base + } +} diff --git a/src/quickcontrols/ios/TextField.qml b/src/quickcontrols/ios/TextField.qml new file mode 100644 index 0000000000..4b5a1fb48e --- /dev/null +++ b/src/quickcontrols/ios/TextField.qml @@ -0,0 +1,55 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.iOS.impl + + +T.TextField { + id: control + + implicitWidth: implicitBackgroundWidth + leftInset + rightInset + || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding, + placeholder.implicitHeight + topPadding + bottomPadding) + + padding: 6 + topPadding: 7 + bottomPadding: 7 + + color: control.palette.text + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + placeholderTextColor: control.palette.placeholderText + verticalAlignment: Qt.AlignVCenter + cursorDelegate: CursorDelegate {} + + PlaceholderText { + id: placeholder + x: control.leftPadding + y: control.topPadding + width: control.width - (control.leftPadding + control.rightPadding) + height: control.height - (control.topPadding + control.bottomPadding) + + text: control.placeholderText + font: control.font + color: control.placeholderTextColor + verticalAlignment: control.verticalAlignment + visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) + elide: Text.ElideRight + renderType: control.renderType + } + + background: Rectangle { + implicitHeight: 34 + implicitWidth: 97 + radius: 4 + + border.width: 0.5 + border.color: control.palette.mid + color: control.palette.base + } +} diff --git a/src/quickcontrols/ios/ToolBar.qml b/src/quickcontrols/ios/ToolBar.qml new file mode 100644 index 0000000000..77b3d8ac0b --- /dev/null +++ b/src/quickcontrols/ios/ToolBar.qml @@ -0,0 +1,26 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.ToolBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + background: Rectangle { + implicitHeight: 49 + color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base + Rectangle { + height: 1 + width: parent.width + y: control.position === T.TabBar.Footer ? 0 : parent.height - 1 + color: control.palette.mid + } + } +} diff --git a/src/quickcontrols/ios/ToolButton.qml b/src/quickcontrols/ios/ToolButton.qml new file mode 100644 index 0000000000..b18073dc81 --- /dev/null +++ b/src/quickcontrols/ios/ToolButton.qml @@ -0,0 +1,39 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl + +T.ToolButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 25 + icon.height: 25 + icon.color: control.enabled ? (control.down ? control.palette.highlight : control.palette.button) + : control.palette.mid + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.enabled ? (control.down ? control.palette.highlight : control.palette.button) + : control.palette.mid + } + + background: Item { + implicitHeight: 49 + } +} diff --git a/src/quickcontrols/ios/TreeViewDelegate.qml b/src/quickcontrols/ios/TreeViewDelegate.qml new file mode 100644 index 0000000000..4dcfcbf39d --- /dev/null +++ b/src/quickcontrols/ios/TreeViewDelegate.qml @@ -0,0 +1,77 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.iOS.impl + +T.TreeViewDelegate { + id: control + + implicitWidth: leftMargin + __contentIndent + implicitContentWidth + rightPadding + rightMargin + implicitHeight: Math.max(implicitBackgroundHeight, implicitContentHeight, implicitIndicatorHeight) + + indentation: indicator ? indicator.width : 12 + leftMargin: 16 + rightMargin: 16 + spacing: 14 + + topPadding: contentItem ? (height - contentItem.implicitHeight) / 2 : 0 + leftPadding: !mirrored ? leftMargin + __contentIndent : width - leftMargin - __contentIndent - implicitContentWidth + + highlighted: control.selected || control.current + || ((control.treeView.selectionBehavior === TableView.SelectRows + || control.treeView.selectionBehavior === TableView.SelectionDisabled) + && control.row === control.treeView.currentRow) + + required property int row + required property var model + readonly property real __contentIndent: !isTreeNode ? 0 : (depth * indentation) + (indicator ? indicator.width + spacing : 0) + + indicator: Item { + readonly property real __indicatorIndent: control.leftMargin + (control.depth * control.indentation) + x: !control.mirrored ? __indicatorIndent : control.width - __indicatorIndent - width + y: (control.height - height) / 2 + implicitWidth: Math.max(arrow.implicitWidth, 20) + implicitHeight: background.height + + property Image arrow : Image { + parent: control.indicator + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + rotation: control.expanded ? 90 : (control.mirrored ? 180 : 0) + opacity: control.enabled ? 1 : 0.5 + + source: IOS.url + "arrow-indicator" + ImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark} + ] + } + } + } + + background: Rectangle { + implicitHeight: 44 + color: Qt.styleHints.appearance === Qt.Dark ? control.palette.dark : control.palette.base + NinePatchImage { + height: parent.height + width: parent.width + source: IOS.url + (control.highlighted ? "itemdelegate-background-pressed" : "itemdelegate-background") + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.appearance === Qt.Light}, + {"dark": Qt.styleHints.appearance === Qt.Dark} + ] + } + } + } + + contentItem: Label { + clip: false + text: control.model.display + elide: Text.ElideRight + } +} diff --git a/src/quickcontrols/ios/images/arrow-indicator-dark.png b/src/quickcontrols/ios/images/arrow-indicator-dark.png Binary files differnew file mode 100644 index 0000000000..031ba049b7 --- /dev/null +++ b/src/quickcontrols/ios/images/arrow-indicator-dark.png diff --git a/src/quickcontrols/ios/images/arrow-indicator-dark@2x.png b/src/quickcontrols/ios/images/arrow-indicator-dark@2x.png Binary files differnew file mode 100644 index 0000000000..9987384025 --- /dev/null +++ b/src/quickcontrols/ios/images/arrow-indicator-dark@2x.png diff --git a/src/quickcontrols/ios/images/arrow-indicator-dark@3x.png b/src/quickcontrols/ios/images/arrow-indicator-dark@3x.png Binary files differnew file mode 100644 index 0000000000..d470ec6887 --- /dev/null +++ b/src/quickcontrols/ios/images/arrow-indicator-dark@3x.png diff --git a/src/quickcontrols/ios/images/arrow-indicator-light.png b/src/quickcontrols/ios/images/arrow-indicator-light.png Binary files differnew file mode 100644 index 0000000000..2d95d8d07a --- /dev/null +++ b/src/quickcontrols/ios/images/arrow-indicator-light.png diff --git a/src/quickcontrols/ios/images/arrow-indicator-light@2x.png b/src/quickcontrols/ios/images/arrow-indicator-light@2x.png Binary files differnew file mode 100644 index 0000000000..cbc4b9e54f --- /dev/null +++ b/src/quickcontrols/ios/images/arrow-indicator-light@2x.png diff --git a/src/quickcontrols/ios/images/arrow-indicator-light@3x.png b/src/quickcontrols/ios/images/arrow-indicator-light@3x.png Binary files differnew file mode 100644 index 0000000000..be7d45d153 --- /dev/null +++ b/src/quickcontrols/ios/images/arrow-indicator-light@3x.png diff --git a/src/quickcontrols/ios/images/checkbox-indicator-checked-dark.png b/src/quickcontrols/ios/images/checkbox-indicator-checked-dark.png Binary files differnew file mode 100644 index 0000000000..4e0749fded --- /dev/null +++ b/src/quickcontrols/ios/images/checkbox-indicator-checked-dark.png diff --git a/src/quickcontrols/ios/images/checkbox-indicator-checked-dark@2x.png b/src/quickcontrols/ios/images/checkbox-indicator-checked-dark@2x.png Binary files differnew file mode 100644 index 0000000000..b58cdc18b5 --- /dev/null +++ b/src/quickcontrols/ios/images/checkbox-indicator-checked-dark@2x.png diff --git a/src/quickcontrols/ios/images/checkbox-indicator-checked-dark@3x.png b/src/quickcontrols/ios/images/checkbox-indicator-checked-dark@3x.png Binary files differnew file mode 100644 index 0000000000..331dbcab14 --- /dev/null +++ b/src/quickcontrols/ios/images/checkbox-indicator-checked-dark@3x.png diff --git a/src/quickcontrols/ios/images/checkbox-indicator-checked-light.png b/src/quickcontrols/ios/images/checkbox-indicator-checked-light.png Binary files differnew file mode 100644 index 0000000000..a2e0cda8f5 --- /dev/null +++ b/src/quickcontrols/ios/images/checkbox-indicator-checked-light.png diff --git a/src/quickcontrols/ios/images/checkbox-indicator-checked-light@2x.png b/src/quickcontrols/ios/images/checkbox-indicator-checked-light@2x.png Binary files differnew file mode 100644 index 0000000000..d90b64b6b8 --- /dev/null +++ b/src/quickcontrols/ios/images/checkbox-indicator-checked-light@2x.png diff --git a/src/quickcontrols/ios/images/checkbox-indicator-checked-light@3x.png b/src/quickcontrols/ios/images/checkbox-indicator-checked-light@3x.png Binary files differnew file mode 100644 index 0000000000..d1b02f2004 --- /dev/null +++ b/src/quickcontrols/ios/images/checkbox-indicator-checked-light@3x.png diff --git a/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-dark.png b/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-dark.png Binary files differnew file mode 100644 index 0000000000..39f8f71d06 --- /dev/null +++ b/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-dark.png diff --git a/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-dark@2x.png b/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-dark@2x.png Binary files differnew file mode 100644 index 0000000000..5ce5545ee0 --- /dev/null +++ b/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-dark@2x.png diff --git a/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-dark@3x.png b/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-dark@3x.png Binary files differnew file mode 100644 index 0000000000..0c6da9715a --- /dev/null +++ b/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-dark@3x.png diff --git a/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-light.png b/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-light.png Binary files differnew file mode 100644 index 0000000000..a6dc7d5d81 --- /dev/null +++ b/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-light.png diff --git a/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-light@2x.png b/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-light@2x.png Binary files differnew file mode 100644 index 0000000000..1cc0559163 --- /dev/null +++ b/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-light@2x.png diff --git a/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-light@3x.png b/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-light@3x.png Binary files differnew file mode 100644 index 0000000000..36f007efea --- /dev/null +++ b/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-light@3x.png diff --git a/src/quickcontrols/ios/images/drawer-background-dark.9.png b/src/quickcontrols/ios/images/drawer-background-dark.9.png Binary files differnew file mode 100644 index 0000000000..2e0526198e --- /dev/null +++ b/src/quickcontrols/ios/images/drawer-background-dark.9.png diff --git a/src/quickcontrols/ios/images/drawer-background-dark.9@2x.png b/src/quickcontrols/ios/images/drawer-background-dark.9@2x.png Binary files differnew file mode 100644 index 0000000000..2a8b3b60e3 --- /dev/null +++ b/src/quickcontrols/ios/images/drawer-background-dark.9@2x.png diff --git a/src/quickcontrols/ios/images/drawer-background-dark.9@3x.png b/src/quickcontrols/ios/images/drawer-background-dark.9@3x.png Binary files differnew file mode 100644 index 0000000000..19805fbd19 --- /dev/null +++ b/src/quickcontrols/ios/images/drawer-background-dark.9@3x.png diff --git a/src/quickcontrols/ios/images/drawer-background-light.9.png b/src/quickcontrols/ios/images/drawer-background-light.9.png Binary files differnew file mode 100644 index 0000000000..9c8a42bcc4 --- /dev/null +++ b/src/quickcontrols/ios/images/drawer-background-light.9.png diff --git a/src/quickcontrols/ios/images/drawer-background-light.9@2x.png b/src/quickcontrols/ios/images/drawer-background-light.9@2x.png Binary files differnew file mode 100644 index 0000000000..9975339c29 --- /dev/null +++ b/src/quickcontrols/ios/images/drawer-background-light.9@2x.png diff --git a/src/quickcontrols/ios/images/drawer-background-light.9@3x.png b/src/quickcontrols/ios/images/drawer-background-light.9@3x.png Binary files differnew file mode 100644 index 0000000000..83d723b573 --- /dev/null +++ b/src/quickcontrols/ios/images/drawer-background-light.9@3x.png diff --git a/src/quickcontrols/ios/images/drawer-background-modal-dark.9.png b/src/quickcontrols/ios/images/drawer-background-modal-dark.9.png Binary files differnew file mode 100644 index 0000000000..3ff175251b --- /dev/null +++ b/src/quickcontrols/ios/images/drawer-background-modal-dark.9.png diff --git a/src/quickcontrols/ios/images/drawer-background-modal-dark.9@2x.png b/src/quickcontrols/ios/images/drawer-background-modal-dark.9@2x.png Binary files differnew file mode 100644 index 0000000000..54770858f1 --- /dev/null +++ b/src/quickcontrols/ios/images/drawer-background-modal-dark.9@2x.png diff --git a/src/quickcontrols/ios/images/drawer-background-modal-dark.9@3x.png b/src/quickcontrols/ios/images/drawer-background-modal-dark.9@3x.png Binary files differnew file mode 100644 index 0000000000..f5747ebdfe --- /dev/null +++ b/src/quickcontrols/ios/images/drawer-background-modal-dark.9@3x.png diff --git a/src/quickcontrols/ios/images/drawer-background-modal-light.9.png b/src/quickcontrols/ios/images/drawer-background-modal-light.9.png Binary files differnew file mode 100644 index 0000000000..ea4e753269 --- /dev/null +++ b/src/quickcontrols/ios/images/drawer-background-modal-light.9.png diff --git a/src/quickcontrols/ios/images/drawer-background-modal-light.9@2x.png b/src/quickcontrols/ios/images/drawer-background-modal-light.9@2x.png Binary files differnew file mode 100644 index 0000000000..109fda953c --- /dev/null +++ b/src/quickcontrols/ios/images/drawer-background-modal-light.9@2x.png diff --git a/src/quickcontrols/ios/images/drawer-background-modal-light.9@3x.png b/src/quickcontrols/ios/images/drawer-background-modal-light.9@3x.png Binary files differnew file mode 100644 index 0000000000..02a52acf5f --- /dev/null +++ b/src/quickcontrols/ios/images/drawer-background-modal-light.9@3x.png diff --git a/src/quickcontrols/ios/images/itemdelegate-background-dark.9.png b/src/quickcontrols/ios/images/itemdelegate-background-dark.9.png Binary files differnew file mode 100644 index 0000000000..73f3ad8825 --- /dev/null +++ b/src/quickcontrols/ios/images/itemdelegate-background-dark.9.png diff --git a/src/quickcontrols/ios/images/itemdelegate-background-dark@2x.9.png b/src/quickcontrols/ios/images/itemdelegate-background-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..5a4f22b3f9 --- /dev/null +++ b/src/quickcontrols/ios/images/itemdelegate-background-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/itemdelegate-background-dark@3x.9.png b/src/quickcontrols/ios/images/itemdelegate-background-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..92f36a96d1 --- /dev/null +++ b/src/quickcontrols/ios/images/itemdelegate-background-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/itemdelegate-background-light.9.png b/src/quickcontrols/ios/images/itemdelegate-background-light.9.png Binary files differnew file mode 100644 index 0000000000..162821415e --- /dev/null +++ b/src/quickcontrols/ios/images/itemdelegate-background-light.9.png diff --git a/src/quickcontrols/ios/images/itemdelegate-background-light@2x.9.png b/src/quickcontrols/ios/images/itemdelegate-background-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..b14617e04f --- /dev/null +++ b/src/quickcontrols/ios/images/itemdelegate-background-light@2x.9.png diff --git a/src/quickcontrols/ios/images/itemdelegate-background-light@3x.9.png b/src/quickcontrols/ios/images/itemdelegate-background-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..6f2df3a583 --- /dev/null +++ b/src/quickcontrols/ios/images/itemdelegate-background-light@3x.9.png diff --git a/src/quickcontrols/ios/images/itemdelegate-background-pressed-dark.9.png b/src/quickcontrols/ios/images/itemdelegate-background-pressed-dark.9.png Binary files differnew file mode 100644 index 0000000000..4ca285bbbe --- /dev/null +++ b/src/quickcontrols/ios/images/itemdelegate-background-pressed-dark.9.png diff --git a/src/quickcontrols/ios/images/itemdelegate-background-pressed-dark@2x.9.png b/src/quickcontrols/ios/images/itemdelegate-background-pressed-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..6ddb779bca --- /dev/null +++ b/src/quickcontrols/ios/images/itemdelegate-background-pressed-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/itemdelegate-background-pressed-dark@3x.9.png b/src/quickcontrols/ios/images/itemdelegate-background-pressed-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..6e9c02e288 --- /dev/null +++ b/src/quickcontrols/ios/images/itemdelegate-background-pressed-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/itemdelegate-background-pressed-light.9.png b/src/quickcontrols/ios/images/itemdelegate-background-pressed-light.9.png Binary files differnew file mode 100644 index 0000000000..b9b2ea03bb --- /dev/null +++ b/src/quickcontrols/ios/images/itemdelegate-background-pressed-light.9.png diff --git a/src/quickcontrols/ios/images/itemdelegate-background-pressed-light@2x.9.png b/src/quickcontrols/ios/images/itemdelegate-background-pressed-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..141272953d --- /dev/null +++ b/src/quickcontrols/ios/images/itemdelegate-background-pressed-light@2x.9.png diff --git a/src/quickcontrols/ios/images/itemdelegate-background-pressed-light@3x.9.png b/src/quickcontrols/ios/images/itemdelegate-background-pressed-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..7201fb9e62 --- /dev/null +++ b/src/quickcontrols/ios/images/itemdelegate-background-pressed-light@3x.9.png diff --git a/src/quickcontrols/ios/images/menu-background-dark.9.png b/src/quickcontrols/ios/images/menu-background-dark.9.png Binary files differnew file mode 100644 index 0000000000..863a3c1759 --- /dev/null +++ b/src/quickcontrols/ios/images/menu-background-dark.9.png diff --git a/src/quickcontrols/ios/images/menu-background-dark@2x.9.png b/src/quickcontrols/ios/images/menu-background-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..ddddaa3532 --- /dev/null +++ b/src/quickcontrols/ios/images/menu-background-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/menu-background-dark@3x.9.png b/src/quickcontrols/ios/images/menu-background-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..a640f6fe06 --- /dev/null +++ b/src/quickcontrols/ios/images/menu-background-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/menu-background-light.9.png b/src/quickcontrols/ios/images/menu-background-light.9.png Binary files differnew file mode 100644 index 0000000000..410abed278 --- /dev/null +++ b/src/quickcontrols/ios/images/menu-background-light.9.png diff --git a/src/quickcontrols/ios/images/menu-background-light@2x.9.png b/src/quickcontrols/ios/images/menu-background-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..82d99af518 --- /dev/null +++ b/src/quickcontrols/ios/images/menu-background-light@2x.9.png diff --git a/src/quickcontrols/ios/images/menu-background-light@3x.9.png b/src/quickcontrols/ios/images/menu-background-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..48f3f7ed4e --- /dev/null +++ b/src/quickcontrols/ios/images/menu-background-light@3x.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-dark.9.png b/src/quickcontrols/ios/images/menuitem-background-dark.9.png Binary files differnew file mode 100644 index 0000000000..463def221b --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-dark.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-dark@2x.9.png b/src/quickcontrols/ios/images/menuitem-background-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..53fdaa7c35 --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-dark@3x.9.png b/src/quickcontrols/ios/images/menuitem-background-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..a514f80071 --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-edge-dark.9.png b/src/quickcontrols/ios/images/menuitem-background-edge-dark.9.png Binary files differnew file mode 100644 index 0000000000..514c0901e6 --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-edge-dark.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-edge-dark@2x.9.png b/src/quickcontrols/ios/images/menuitem-background-edge-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..1ca1ee8d9e --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-edge-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-edge-dark@3x.9.png b/src/quickcontrols/ios/images/menuitem-background-edge-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..6a4277a7c3 --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-edge-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-edge-light.9.png b/src/quickcontrols/ios/images/menuitem-background-edge-light.9.png Binary files differnew file mode 100644 index 0000000000..262c12d7b7 --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-edge-light.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-edge-light@2x.9.png b/src/quickcontrols/ios/images/menuitem-background-edge-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..4838abb511 --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-edge-light@2x.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-edge-light@3x.9.png b/src/quickcontrols/ios/images/menuitem-background-edge-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..0e17b608da --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-edge-light@3x.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-edge-pressed-dark.9.png b/src/quickcontrols/ios/images/menuitem-background-edge-pressed-dark.9.png Binary files differnew file mode 100644 index 0000000000..290101b99b --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-edge-pressed-dark.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-edge-pressed-dark@2x.9.png b/src/quickcontrols/ios/images/menuitem-background-edge-pressed-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..a738f20650 --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-edge-pressed-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-edge-pressed-dark@3x.9.png b/src/quickcontrols/ios/images/menuitem-background-edge-pressed-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..ef05342d0b --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-edge-pressed-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-edge-pressed-light.9.png b/src/quickcontrols/ios/images/menuitem-background-edge-pressed-light.9.png Binary files differnew file mode 100644 index 0000000000..706f642552 --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-edge-pressed-light.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-edge-pressed-light@2x.9.png b/src/quickcontrols/ios/images/menuitem-background-edge-pressed-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..e196a71bbe --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-edge-pressed-light@2x.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-edge-pressed-light@3x.9.png b/src/quickcontrols/ios/images/menuitem-background-edge-pressed-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..4f5a71ff86 --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-edge-pressed-light@3x.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-light.9.png b/src/quickcontrols/ios/images/menuitem-background-light.9.png Binary files differnew file mode 100644 index 0000000000..644f207a26 --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-light.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-light@2x.9.png b/src/quickcontrols/ios/images/menuitem-background-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..d7c78cb5dc --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-light@2x.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-light@3x.9.png b/src/quickcontrols/ios/images/menuitem-background-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..70ce76a961 --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-light@3x.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-pressed-dark.9.png b/src/quickcontrols/ios/images/menuitem-background-pressed-dark.9.png Binary files differnew file mode 100644 index 0000000000..4f1fdfc82c --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-pressed-dark.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-pressed-dark@2x.9.png b/src/quickcontrols/ios/images/menuitem-background-pressed-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..f72729f45d --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-pressed-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-pressed-dark@3x.9.png b/src/quickcontrols/ios/images/menuitem-background-pressed-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..eaa574174b --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-pressed-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-pressed-light.9.png b/src/quickcontrols/ios/images/menuitem-background-pressed-light.9.png Binary files differnew file mode 100644 index 0000000000..5141095a95 --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-pressed-light.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-pressed-light@2x.9.png b/src/quickcontrols/ios/images/menuitem-background-pressed-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..b8fb91997f --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-pressed-light@2x.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-pressed-light@3x.9.png b/src/quickcontrols/ios/images/menuitem-background-pressed-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..250247d322 --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-pressed-light@3x.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-single-pressed-dark.9.png b/src/quickcontrols/ios/images/menuitem-background-single-pressed-dark.9.png Binary files differnew file mode 100644 index 0000000000..708285fe39 --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-single-pressed-dark.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-single-pressed-dark@2x.9.png b/src/quickcontrols/ios/images/menuitem-background-single-pressed-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..0cb6f175ff --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-single-pressed-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-single-pressed-dark@3x.9.png b/src/quickcontrols/ios/images/menuitem-background-single-pressed-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..cb7c1f210c --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-single-pressed-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-single-pressed-light.9.png b/src/quickcontrols/ios/images/menuitem-background-single-pressed-light.9.png Binary files differnew file mode 100644 index 0000000000..5a71309c91 --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-single-pressed-light.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-single-pressed-light@2x.9.png b/src/quickcontrols/ios/images/menuitem-background-single-pressed-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..7798409aa3 --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-single-pressed-light@2x.9.png diff --git a/src/quickcontrols/ios/images/menuitem-background-single-pressed-light@3x.9.png b/src/quickcontrols/ios/images/menuitem-background-single-pressed-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..77a69bd247 --- /dev/null +++ b/src/quickcontrols/ios/images/menuitem-background-single-pressed-light@3x.9.png diff --git a/src/quickcontrols/ios/images/menuseparator-separator-dark.9.png b/src/quickcontrols/ios/images/menuseparator-separator-dark.9.png Binary files differnew file mode 100644 index 0000000000..819e465354 --- /dev/null +++ b/src/quickcontrols/ios/images/menuseparator-separator-dark.9.png diff --git a/src/quickcontrols/ios/images/menuseparator-separator-dark@2x.9.png b/src/quickcontrols/ios/images/menuseparator-separator-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..81e3cdd391 --- /dev/null +++ b/src/quickcontrols/ios/images/menuseparator-separator-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/menuseparator-separator-dark@3x.9.png b/src/quickcontrols/ios/images/menuseparator-separator-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..95d88ee659 --- /dev/null +++ b/src/quickcontrols/ios/images/menuseparator-separator-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/menuseparator-separator-light.9.png b/src/quickcontrols/ios/images/menuseparator-separator-light.9.png Binary files differnew file mode 100644 index 0000000000..46276666e2 --- /dev/null +++ b/src/quickcontrols/ios/images/menuseparator-separator-light.9.png diff --git a/src/quickcontrols/ios/images/menuseparator-separator-light@2x.9.png b/src/quickcontrols/ios/images/menuseparator-separator-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..0e2b9986a9 --- /dev/null +++ b/src/quickcontrols/ios/images/menuseparator-separator-light@2x.9.png diff --git a/src/quickcontrols/ios/images/menuseparator-separator-light@3x.9.png b/src/quickcontrols/ios/images/menuseparator-separator-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..d3eb183bf3 --- /dev/null +++ b/src/quickcontrols/ios/images/menuseparator-separator-light@3x.9.png diff --git a/src/quickcontrols/ios/images/pageindicator-delegate-current-dark.png b/src/quickcontrols/ios/images/pageindicator-delegate-current-dark.png Binary files differnew file mode 100644 index 0000000000..8f51025a25 --- /dev/null +++ b/src/quickcontrols/ios/images/pageindicator-delegate-current-dark.png diff --git a/src/quickcontrols/ios/images/pageindicator-delegate-current-dark@2x.png b/src/quickcontrols/ios/images/pageindicator-delegate-current-dark@2x.png Binary files differnew file mode 100644 index 0000000000..434b0e295c --- /dev/null +++ b/src/quickcontrols/ios/images/pageindicator-delegate-current-dark@2x.png diff --git a/src/quickcontrols/ios/images/pageindicator-delegate-current-dark@3x.png b/src/quickcontrols/ios/images/pageindicator-delegate-current-dark@3x.png Binary files differnew file mode 100644 index 0000000000..3d89f00f1a --- /dev/null +++ b/src/quickcontrols/ios/images/pageindicator-delegate-current-dark@3x.png diff --git a/src/quickcontrols/ios/images/pageindicator-delegate-current-light.png b/src/quickcontrols/ios/images/pageindicator-delegate-current-light.png Binary files differnew file mode 100644 index 0000000000..ab9a27a6c5 --- /dev/null +++ b/src/quickcontrols/ios/images/pageindicator-delegate-current-light.png diff --git a/src/quickcontrols/ios/images/pageindicator-delegate-current-light@2x.png b/src/quickcontrols/ios/images/pageindicator-delegate-current-light@2x.png Binary files differnew file mode 100644 index 0000000000..94b23004e9 --- /dev/null +++ b/src/quickcontrols/ios/images/pageindicator-delegate-current-light@2x.png diff --git a/src/quickcontrols/ios/images/pageindicator-delegate-current-light@3x.png b/src/quickcontrols/ios/images/pageindicator-delegate-current-light@3x.png Binary files differnew file mode 100644 index 0000000000..24229b4cbf --- /dev/null +++ b/src/quickcontrols/ios/images/pageindicator-delegate-current-light@3x.png diff --git a/src/quickcontrols/ios/images/pageindicator-delegate-dark.png b/src/quickcontrols/ios/images/pageindicator-delegate-dark.png Binary files differnew file mode 100644 index 0000000000..560c3be532 --- /dev/null +++ b/src/quickcontrols/ios/images/pageindicator-delegate-dark.png diff --git a/src/quickcontrols/ios/images/pageindicator-delegate-dark@2x.png b/src/quickcontrols/ios/images/pageindicator-delegate-dark@2x.png Binary files differnew file mode 100644 index 0000000000..5159b47d56 --- /dev/null +++ b/src/quickcontrols/ios/images/pageindicator-delegate-dark@2x.png diff --git a/src/quickcontrols/ios/images/pageindicator-delegate-dark@3x.png b/src/quickcontrols/ios/images/pageindicator-delegate-dark@3x.png Binary files differnew file mode 100644 index 0000000000..979badf935 --- /dev/null +++ b/src/quickcontrols/ios/images/pageindicator-delegate-dark@3x.png diff --git a/src/quickcontrols/ios/images/pageindicator-delegate-light.png b/src/quickcontrols/ios/images/pageindicator-delegate-light.png Binary files differnew file mode 100644 index 0000000000..65bd5ad63c --- /dev/null +++ b/src/quickcontrols/ios/images/pageindicator-delegate-light.png diff --git a/src/quickcontrols/ios/images/pageindicator-delegate-light@2x.png b/src/quickcontrols/ios/images/pageindicator-delegate-light@2x.png Binary files differnew file mode 100644 index 0000000000..7bd65b8105 --- /dev/null +++ b/src/quickcontrols/ios/images/pageindicator-delegate-light@2x.png diff --git a/src/quickcontrols/ios/images/pageindicator-delegate-light@3x.png b/src/quickcontrols/ios/images/pageindicator-delegate-light@3x.png Binary files differnew file mode 100644 index 0000000000..a46d8668dc --- /dev/null +++ b/src/quickcontrols/ios/images/pageindicator-delegate-light@3x.png diff --git a/src/quickcontrols/ios/images/popup-background-dark.9.png b/src/quickcontrols/ios/images/popup-background-dark.9.png Binary files differnew file mode 100644 index 0000000000..9afd3ab0ce --- /dev/null +++ b/src/quickcontrols/ios/images/popup-background-dark.9.png diff --git a/src/quickcontrols/ios/images/popup-background-dark@2x.9.png b/src/quickcontrols/ios/images/popup-background-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..115908f4e0 --- /dev/null +++ b/src/quickcontrols/ios/images/popup-background-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/popup-background-dark@3x.9.png b/src/quickcontrols/ios/images/popup-background-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..2377c6f5d7 --- /dev/null +++ b/src/quickcontrols/ios/images/popup-background-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/popup-background-light.9.png b/src/quickcontrols/ios/images/popup-background-light.9.png Binary files differnew file mode 100644 index 0000000000..c06ec445cc --- /dev/null +++ b/src/quickcontrols/ios/images/popup-background-light.9.png diff --git a/src/quickcontrols/ios/images/popup-background-light@2x.9.png b/src/quickcontrols/ios/images/popup-background-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..0de7471cf0 --- /dev/null +++ b/src/quickcontrols/ios/images/popup-background-light@2x.9.png diff --git a/src/quickcontrols/ios/images/popup-background-light@3x.9.png b/src/quickcontrols/ios/images/popup-background-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..04fa3cc354 --- /dev/null +++ b/src/quickcontrols/ios/images/popup-background-light@3x.9.png diff --git a/src/quickcontrols/ios/images/radiobutton-indicator-checked-dark.png b/src/quickcontrols/ios/images/radiobutton-indicator-checked-dark.png Binary files differnew file mode 100644 index 0000000000..f8ac628b14 --- /dev/null +++ b/src/quickcontrols/ios/images/radiobutton-indicator-checked-dark.png diff --git a/src/quickcontrols/ios/images/radiobutton-indicator-checked-dark@2x.png b/src/quickcontrols/ios/images/radiobutton-indicator-checked-dark@2x.png Binary files differnew file mode 100644 index 0000000000..6cdbb278a6 --- /dev/null +++ b/src/quickcontrols/ios/images/radiobutton-indicator-checked-dark@2x.png diff --git a/src/quickcontrols/ios/images/radiobutton-indicator-checked-dark@3x.png b/src/quickcontrols/ios/images/radiobutton-indicator-checked-dark@3x.png Binary files differnew file mode 100644 index 0000000000..9375a40623 --- /dev/null +++ b/src/quickcontrols/ios/images/radiobutton-indicator-checked-dark@3x.png diff --git a/src/quickcontrols/ios/images/radiobutton-indicator-checked-light.png b/src/quickcontrols/ios/images/radiobutton-indicator-checked-light.png Binary files differnew file mode 100644 index 0000000000..b17f80c522 --- /dev/null +++ b/src/quickcontrols/ios/images/radiobutton-indicator-checked-light.png diff --git a/src/quickcontrols/ios/images/radiobutton-indicator-checked-light@2x.png b/src/quickcontrols/ios/images/radiobutton-indicator-checked-light@2x.png Binary files differnew file mode 100644 index 0000000000..7cbaa12bfb --- /dev/null +++ b/src/quickcontrols/ios/images/radiobutton-indicator-checked-light@2x.png diff --git a/src/quickcontrols/ios/images/radiobutton-indicator-checked-light@3x.png b/src/quickcontrols/ios/images/radiobutton-indicator-checked-light@3x.png Binary files differnew file mode 100644 index 0000000000..e10579c6e8 --- /dev/null +++ b/src/quickcontrols/ios/images/radiobutton-indicator-checked-light@3x.png diff --git a/src/quickcontrols/ios/images/radiobutton-indicator-dark.png b/src/quickcontrols/ios/images/radiobutton-indicator-dark.png Binary files differnew file mode 100644 index 0000000000..bede4a1bce --- /dev/null +++ b/src/quickcontrols/ios/images/radiobutton-indicator-dark.png diff --git a/src/quickcontrols/ios/images/radiobutton-indicator-dark@2x.png b/src/quickcontrols/ios/images/radiobutton-indicator-dark@2x.png Binary files differnew file mode 100644 index 0000000000..3eacdfd0b5 --- /dev/null +++ b/src/quickcontrols/ios/images/radiobutton-indicator-dark@2x.png diff --git a/src/quickcontrols/ios/images/radiobutton-indicator-dark@3x.png b/src/quickcontrols/ios/images/radiobutton-indicator-dark@3x.png Binary files differnew file mode 100644 index 0000000000..0098efdc9d --- /dev/null +++ b/src/quickcontrols/ios/images/radiobutton-indicator-dark@3x.png diff --git a/src/quickcontrols/ios/images/radiobutton-indicator-light.png b/src/quickcontrols/ios/images/radiobutton-indicator-light.png Binary files differnew file mode 100644 index 0000000000..44b999c4f0 --- /dev/null +++ b/src/quickcontrols/ios/images/radiobutton-indicator-light.png diff --git a/src/quickcontrols/ios/images/radiobutton-indicator-light@2x.png b/src/quickcontrols/ios/images/radiobutton-indicator-light@2x.png Binary files differnew file mode 100644 index 0000000000..1dda163af5 --- /dev/null +++ b/src/quickcontrols/ios/images/radiobutton-indicator-light@2x.png diff --git a/src/quickcontrols/ios/images/radiobutton-indicator-light@3x.png b/src/quickcontrols/ios/images/radiobutton-indicator-light@3x.png Binary files differnew file mode 100644 index 0000000000..e303d37fd0 --- /dev/null +++ b/src/quickcontrols/ios/images/radiobutton-indicator-light@3x.png diff --git a/src/quickcontrols/ios/images/radiodelegate-indicator-dark.png b/src/quickcontrols/ios/images/radiodelegate-indicator-dark.png Binary files differnew file mode 100644 index 0000000000..8a658b26d6 --- /dev/null +++ b/src/quickcontrols/ios/images/radiodelegate-indicator-dark.png diff --git a/src/quickcontrols/ios/images/radiodelegate-indicator-dark@2x.png b/src/quickcontrols/ios/images/radiodelegate-indicator-dark@2x.png Binary files differnew file mode 100644 index 0000000000..2477fa99a5 --- /dev/null +++ b/src/quickcontrols/ios/images/radiodelegate-indicator-dark@2x.png diff --git a/src/quickcontrols/ios/images/radiodelegate-indicator-dark@3x.png b/src/quickcontrols/ios/images/radiodelegate-indicator-dark@3x.png Binary files differnew file mode 100644 index 0000000000..4bf7b4c7cd --- /dev/null +++ b/src/quickcontrols/ios/images/radiodelegate-indicator-dark@3x.png diff --git a/src/quickcontrols/ios/images/radiodelegate-indicator-light.png b/src/quickcontrols/ios/images/radiodelegate-indicator-light.png Binary files differnew file mode 100644 index 0000000000..f826b9e766 --- /dev/null +++ b/src/quickcontrols/ios/images/radiodelegate-indicator-light.png diff --git a/src/quickcontrols/ios/images/radiodelegate-indicator-light@2x.png b/src/quickcontrols/ios/images/radiodelegate-indicator-light@2x.png Binary files differnew file mode 100644 index 0000000000..9b5d5dbed2 --- /dev/null +++ b/src/quickcontrols/ios/images/radiodelegate-indicator-light@2x.png diff --git a/src/quickcontrols/ios/images/radiodelegate-indicator-light@3x.png b/src/quickcontrols/ios/images/radiodelegate-indicator-light@3x.png Binary files differnew file mode 100644 index 0000000000..0470240580 --- /dev/null +++ b/src/quickcontrols/ios/images/radiodelegate-indicator-light@3x.png diff --git a/src/quickcontrols/ios/images/scrollindicator-handle-dark-horizontal.9.png b/src/quickcontrols/ios/images/scrollindicator-handle-dark-horizontal.9.png Binary files differnew file mode 100644 index 0000000000..8a77ce365c --- /dev/null +++ b/src/quickcontrols/ios/images/scrollindicator-handle-dark-horizontal.9.png diff --git a/src/quickcontrols/ios/images/scrollindicator-handle-dark-horizontal@2x.9.png b/src/quickcontrols/ios/images/scrollindicator-handle-dark-horizontal@2x.9.png Binary files differnew file mode 100644 index 0000000000..b7c68e90df --- /dev/null +++ b/src/quickcontrols/ios/images/scrollindicator-handle-dark-horizontal@2x.9.png diff --git a/src/quickcontrols/ios/images/scrollindicator-handle-dark-horizontal@3x.9.png b/src/quickcontrols/ios/images/scrollindicator-handle-dark-horizontal@3x.9.png Binary files differnew file mode 100644 index 0000000000..6c913d0edb --- /dev/null +++ b/src/quickcontrols/ios/images/scrollindicator-handle-dark-horizontal@3x.9.png diff --git a/src/quickcontrols/ios/images/scrollindicator-handle-dark-vertical.9.png b/src/quickcontrols/ios/images/scrollindicator-handle-dark-vertical.9.png Binary files differnew file mode 100644 index 0000000000..3172c935cc --- /dev/null +++ b/src/quickcontrols/ios/images/scrollindicator-handle-dark-vertical.9.png diff --git a/src/quickcontrols/ios/images/scrollindicator-handle-dark-vertical@2x.9.png b/src/quickcontrols/ios/images/scrollindicator-handle-dark-vertical@2x.9.png Binary files differnew file mode 100644 index 0000000000..e61822c035 --- /dev/null +++ b/src/quickcontrols/ios/images/scrollindicator-handle-dark-vertical@2x.9.png diff --git a/src/quickcontrols/ios/images/scrollindicator-handle-dark-vertical@3x.9.png b/src/quickcontrols/ios/images/scrollindicator-handle-dark-vertical@3x.9.png Binary files differnew file mode 100644 index 0000000000..4f2b6734ea --- /dev/null +++ b/src/quickcontrols/ios/images/scrollindicator-handle-dark-vertical@3x.9.png diff --git a/src/quickcontrols/ios/images/scrollindicator-handle-light-horizontal.9.png b/src/quickcontrols/ios/images/scrollindicator-handle-light-horizontal.9.png Binary files differnew file mode 100644 index 0000000000..8a77ce365c --- /dev/null +++ b/src/quickcontrols/ios/images/scrollindicator-handle-light-horizontal.9.png diff --git a/src/quickcontrols/ios/images/scrollindicator-handle-light-horizontal@2x.9.png b/src/quickcontrols/ios/images/scrollindicator-handle-light-horizontal@2x.9.png Binary files differnew file mode 100644 index 0000000000..b7c68e90df --- /dev/null +++ b/src/quickcontrols/ios/images/scrollindicator-handle-light-horizontal@2x.9.png diff --git a/src/quickcontrols/ios/images/scrollindicator-handle-light-horizontal@3x.9.png b/src/quickcontrols/ios/images/scrollindicator-handle-light-horizontal@3x.9.png Binary files differnew file mode 100644 index 0000000000..6c913d0edb --- /dev/null +++ b/src/quickcontrols/ios/images/scrollindicator-handle-light-horizontal@3x.9.png diff --git a/src/quickcontrols/ios/images/scrollindicator-handle-light-vertical.9.png b/src/quickcontrols/ios/images/scrollindicator-handle-light-vertical.9.png Binary files differnew file mode 100644 index 0000000000..3172c935cc --- /dev/null +++ b/src/quickcontrols/ios/images/scrollindicator-handle-light-vertical.9.png diff --git a/src/quickcontrols/ios/images/scrollindicator-handle-light-vertical@2x.9.png b/src/quickcontrols/ios/images/scrollindicator-handle-light-vertical@2x.9.png Binary files differnew file mode 100644 index 0000000000..e61822c035 --- /dev/null +++ b/src/quickcontrols/ios/images/scrollindicator-handle-light-vertical@2x.9.png diff --git a/src/quickcontrols/ios/images/scrollindicator-handle-light-vertical@3x.9.png b/src/quickcontrols/ios/images/scrollindicator-handle-light-vertical@3x.9.png Binary files differnew file mode 100644 index 0000000000..4f2b6734ea --- /dev/null +++ b/src/quickcontrols/ios/images/scrollindicator-handle-light-vertical@3x.9.png diff --git a/src/quickcontrols/ios/images/slider-background-dark.9.png b/src/quickcontrols/ios/images/slider-background-dark.9.png Binary files differnew file mode 100644 index 0000000000..fd53274888 --- /dev/null +++ b/src/quickcontrols/ios/images/slider-background-dark.9.png diff --git a/src/quickcontrols/ios/images/slider-background-dark@2x.9.png b/src/quickcontrols/ios/images/slider-background-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..ff91196972 --- /dev/null +++ b/src/quickcontrols/ios/images/slider-background-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/slider-background-dark@3x.9.png b/src/quickcontrols/ios/images/slider-background-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..98b2e63cfb --- /dev/null +++ b/src/quickcontrols/ios/images/slider-background-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/slider-background-light.9.png b/src/quickcontrols/ios/images/slider-background-light.9.png Binary files differnew file mode 100644 index 0000000000..5970f421ea --- /dev/null +++ b/src/quickcontrols/ios/images/slider-background-light.9.png diff --git a/src/quickcontrols/ios/images/slider-background-light@2x.9.png b/src/quickcontrols/ios/images/slider-background-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..5a03521004 --- /dev/null +++ b/src/quickcontrols/ios/images/slider-background-light@2x.9.png diff --git a/src/quickcontrols/ios/images/slider-background-light@3x.9.png b/src/quickcontrols/ios/images/slider-background-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..39b2fe1968 --- /dev/null +++ b/src/quickcontrols/ios/images/slider-background-light@3x.9.png diff --git a/src/quickcontrols/ios/images/slider-handle-disabled-dark.9.png b/src/quickcontrols/ios/images/slider-handle-disabled-dark.9.png Binary files differnew file mode 100644 index 0000000000..5c2666a2b7 --- /dev/null +++ b/src/quickcontrols/ios/images/slider-handle-disabled-dark.9.png diff --git a/src/quickcontrols/ios/images/slider-handle-disabled-dark@2x.9.png b/src/quickcontrols/ios/images/slider-handle-disabled-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..a33d6625b4 --- /dev/null +++ b/src/quickcontrols/ios/images/slider-handle-disabled-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/slider-handle-disabled-dark@3x.9.png b/src/quickcontrols/ios/images/slider-handle-disabled-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..47dcc3183e --- /dev/null +++ b/src/quickcontrols/ios/images/slider-handle-disabled-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/slider-handle-disabled-light.9.png b/src/quickcontrols/ios/images/slider-handle-disabled-light.9.png Binary files differnew file mode 100644 index 0000000000..be3f21dcb1 --- /dev/null +++ b/src/quickcontrols/ios/images/slider-handle-disabled-light.9.png diff --git a/src/quickcontrols/ios/images/slider-handle-disabled-light@2x.9.png b/src/quickcontrols/ios/images/slider-handle-disabled-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..9e73aec4fd --- /dev/null +++ b/src/quickcontrols/ios/images/slider-handle-disabled-light@2x.9.png diff --git a/src/quickcontrols/ios/images/slider-handle-disabled-light@3x.9.png b/src/quickcontrols/ios/images/slider-handle-disabled-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..35ad327fbe --- /dev/null +++ b/src/quickcontrols/ios/images/slider-handle-disabled-light@3x.9.png diff --git a/src/quickcontrols/ios/images/slider-handle.9.png b/src/quickcontrols/ios/images/slider-handle.9.png Binary files differnew file mode 100644 index 0000000000..ed9894b60f --- /dev/null +++ b/src/quickcontrols/ios/images/slider-handle.9.png diff --git a/src/quickcontrols/ios/images/slider-handle@2x.9.png b/src/quickcontrols/ios/images/slider-handle@2x.9.png Binary files differnew file mode 100644 index 0000000000..f76e4fe945 --- /dev/null +++ b/src/quickcontrols/ios/images/slider-handle@2x.9.png diff --git a/src/quickcontrols/ios/images/slider-handle@3x.9.png b/src/quickcontrols/ios/images/slider-handle@3x.9.png Binary files differnew file mode 100644 index 0000000000..a6a9fe33f9 --- /dev/null +++ b/src/quickcontrols/ios/images/slider-handle@3x.9.png diff --git a/src/quickcontrols/ios/images/slider-progress-dark.9.png b/src/quickcontrols/ios/images/slider-progress-dark.9.png Binary files differnew file mode 100644 index 0000000000..e41ced1a0e --- /dev/null +++ b/src/quickcontrols/ios/images/slider-progress-dark.9.png diff --git a/src/quickcontrols/ios/images/slider-progress-dark@2x.9.png b/src/quickcontrols/ios/images/slider-progress-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..3be5c17f0d --- /dev/null +++ b/src/quickcontrols/ios/images/slider-progress-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/slider-progress-dark@3x.9.png b/src/quickcontrols/ios/images/slider-progress-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..58a21bce2e --- /dev/null +++ b/src/quickcontrols/ios/images/slider-progress-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/slider-progress-light.9.png b/src/quickcontrols/ios/images/slider-progress-light.9.png Binary files differnew file mode 100644 index 0000000000..764b273756 --- /dev/null +++ b/src/quickcontrols/ios/images/slider-progress-light.9.png diff --git a/src/quickcontrols/ios/images/slider-progress-light@2x.9.png b/src/quickcontrols/ios/images/slider-progress-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..59fd8395e1 --- /dev/null +++ b/src/quickcontrols/ios/images/slider-progress-light@2x.9.png diff --git a/src/quickcontrols/ios/images/slider-progress-light@3x.9.png b/src/quickcontrols/ios/images/slider-progress-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..0294770364 --- /dev/null +++ b/src/quickcontrols/ios/images/slider-progress-light@3x.9.png diff --git a/src/quickcontrols/ios/images/spinbox-background-dark.9.png b/src/quickcontrols/ios/images/spinbox-background-dark.9.png Binary files differnew file mode 100644 index 0000000000..429d5dda7f --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-background-dark.9.png diff --git a/src/quickcontrols/ios/images/spinbox-background-dark@2x.9.png b/src/quickcontrols/ios/images/spinbox-background-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..acb8f3df35 --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-background-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/spinbox-background-dark@3x.9.png b/src/quickcontrols/ios/images/spinbox-background-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..ea798e64aa --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-background-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/spinbox-background-light.9.png b/src/quickcontrols/ios/images/spinbox-background-light.9.png Binary files differnew file mode 100644 index 0000000000..a831906778 --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-background-light.9.png diff --git a/src/quickcontrols/ios/images/spinbox-background-light@2x.9.png b/src/quickcontrols/ios/images/spinbox-background-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..467cef5b94 --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-background-light@2x.9.png diff --git a/src/quickcontrols/ios/images/spinbox-background-light@3x.9.png b/src/quickcontrols/ios/images/spinbox-background-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..5afa6c9232 --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-background-light@3x.9.png diff --git a/src/quickcontrols/ios/images/spinbox-indicator-down-dark.9.png b/src/quickcontrols/ios/images/spinbox-indicator-down-dark.9.png Binary files differnew file mode 100644 index 0000000000..989eb661cb --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-indicator-down-dark.9.png diff --git a/src/quickcontrols/ios/images/spinbox-indicator-down-dark@2x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-down-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..a22f19bf3d --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-indicator-down-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/spinbox-indicator-down-dark@3x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-down-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..1e0d12afbc --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-indicator-down-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/spinbox-indicator-down-light.9.png b/src/quickcontrols/ios/images/spinbox-indicator-down-light.9.png Binary files differnew file mode 100644 index 0000000000..10b614e8e5 --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-indicator-down-light.9.png diff --git a/src/quickcontrols/ios/images/spinbox-indicator-down-light@2x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-down-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..48fedbe21d --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-indicator-down-light@2x.9.png diff --git a/src/quickcontrols/ios/images/spinbox-indicator-down-light@3x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-down-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..1254e56ddf --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-indicator-down-light@3x.9.png diff --git a/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-dark.9.png b/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-dark.9.png Binary files differnew file mode 100644 index 0000000000..1f279f6eef --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-dark.9.png diff --git a/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-dark@2x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..dbbb584f10 --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-dark@3x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..78ced50148 --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-light.9.png b/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-light.9.png Binary files differnew file mode 100644 index 0000000000..46f9ddbcf5 --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-light.9.png diff --git a/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-light@2x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..ad6573bbfa --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-light@2x.9.png diff --git a/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-light@3x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..0fec10338b --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-light@3x.9.png diff --git a/src/quickcontrols/ios/images/spinbox-indicator-up-dark.9.png b/src/quickcontrols/ios/images/spinbox-indicator-up-dark.9.png Binary files differnew file mode 100644 index 0000000000..ca688ef523 --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-indicator-up-dark.9.png diff --git a/src/quickcontrols/ios/images/spinbox-indicator-up-dark@2x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-up-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..970ea1e89e --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-indicator-up-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/spinbox-indicator-up-dark@3x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-up-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..2ae2dddf45 --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-indicator-up-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/spinbox-indicator-up-light.9.png b/src/quickcontrols/ios/images/spinbox-indicator-up-light.9.png Binary files differnew file mode 100644 index 0000000000..ca8afb87ae --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-indicator-up-light.9.png diff --git a/src/quickcontrols/ios/images/spinbox-indicator-up-light@2x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-up-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..4c434039e7 --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-indicator-up-light@2x.9.png diff --git a/src/quickcontrols/ios/images/spinbox-indicator-up-light@3x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-up-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..3302d3f6d6 --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-indicator-up-light@3x.9.png diff --git a/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-dark.9.png b/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-dark.9.png Binary files differnew file mode 100644 index 0000000000..15426b4ce6 --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-dark.9.png diff --git a/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-dark@2x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..6295a5ed2c --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-dark@3x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..bdaa739803 --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-light.9.png b/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-light.9.png Binary files differnew file mode 100644 index 0000000000..09b8ad162c --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-light.9.png diff --git a/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-light@2x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..2ec793c747 --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-light@2x.9.png diff --git a/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-light@3x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..95e19eb2af --- /dev/null +++ b/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-light@3x.9.png diff --git a/src/quickcontrols/ios/images/switch-handle-disabled-dark.9.png b/src/quickcontrols/ios/images/switch-handle-disabled-dark.9.png Binary files differnew file mode 100644 index 0000000000..11f229c8ef --- /dev/null +++ b/src/quickcontrols/ios/images/switch-handle-disabled-dark.9.png diff --git a/src/quickcontrols/ios/images/switch-handle-disabled-dark@2x.9.png b/src/quickcontrols/ios/images/switch-handle-disabled-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..7a030a4232 --- /dev/null +++ b/src/quickcontrols/ios/images/switch-handle-disabled-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/switch-handle-disabled-dark@3x.9.png b/src/quickcontrols/ios/images/switch-handle-disabled-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..59b2b0a3e1 --- /dev/null +++ b/src/quickcontrols/ios/images/switch-handle-disabled-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/switch-handle-disabled-light.9.png b/src/quickcontrols/ios/images/switch-handle-disabled-light.9.png Binary files differnew file mode 100644 index 0000000000..12a3b4ef6a --- /dev/null +++ b/src/quickcontrols/ios/images/switch-handle-disabled-light.9.png diff --git a/src/quickcontrols/ios/images/switch-handle-disabled-light@2x.9.png b/src/quickcontrols/ios/images/switch-handle-disabled-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..dedcb7f4eb --- /dev/null +++ b/src/quickcontrols/ios/images/switch-handle-disabled-light@2x.9.png diff --git a/src/quickcontrols/ios/images/switch-handle-disabled-light@3x.9.png b/src/quickcontrols/ios/images/switch-handle-disabled-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..8daf9e7a96 --- /dev/null +++ b/src/quickcontrols/ios/images/switch-handle-disabled-light@3x.9.png diff --git a/src/quickcontrols/ios/images/switch-handle.9.png b/src/quickcontrols/ios/images/switch-handle.9.png Binary files differnew file mode 100644 index 0000000000..8112808a81 --- /dev/null +++ b/src/quickcontrols/ios/images/switch-handle.9.png diff --git a/src/quickcontrols/ios/images/switch-handle@2x.9.png b/src/quickcontrols/ios/images/switch-handle@2x.9.png Binary files differnew file mode 100644 index 0000000000..4767588b3b --- /dev/null +++ b/src/quickcontrols/ios/images/switch-handle@2x.9.png diff --git a/src/quickcontrols/ios/images/switch-handle@3x.9.png b/src/quickcontrols/ios/images/switch-handle@3x.9.png Binary files differnew file mode 100644 index 0000000000..af4bcd06f8 --- /dev/null +++ b/src/quickcontrols/ios/images/switch-handle@3x.9.png diff --git a/src/quickcontrols/ios/images/switch-indicator-checked-dark.png b/src/quickcontrols/ios/images/switch-indicator-checked-dark.png Binary files differnew file mode 100644 index 0000000000..c72622096d --- /dev/null +++ b/src/quickcontrols/ios/images/switch-indicator-checked-dark.png diff --git a/src/quickcontrols/ios/images/switch-indicator-checked-dark@2x.png b/src/quickcontrols/ios/images/switch-indicator-checked-dark@2x.png Binary files differnew file mode 100644 index 0000000000..0275dc140e --- /dev/null +++ b/src/quickcontrols/ios/images/switch-indicator-checked-dark@2x.png diff --git a/src/quickcontrols/ios/images/switch-indicator-checked-dark@3x.png b/src/quickcontrols/ios/images/switch-indicator-checked-dark@3x.png Binary files differnew file mode 100644 index 0000000000..9b8684219e --- /dev/null +++ b/src/quickcontrols/ios/images/switch-indicator-checked-dark@3x.png diff --git a/src/quickcontrols/ios/images/switch-indicator-checked-light.png b/src/quickcontrols/ios/images/switch-indicator-checked-light.png Binary files differnew file mode 100644 index 0000000000..5633ce2816 --- /dev/null +++ b/src/quickcontrols/ios/images/switch-indicator-checked-light.png diff --git a/src/quickcontrols/ios/images/switch-indicator-checked-light@2x.png b/src/quickcontrols/ios/images/switch-indicator-checked-light@2x.png Binary files differnew file mode 100644 index 0000000000..6859b04326 --- /dev/null +++ b/src/quickcontrols/ios/images/switch-indicator-checked-light@2x.png diff --git a/src/quickcontrols/ios/images/switch-indicator-checked-light@3x.png b/src/quickcontrols/ios/images/switch-indicator-checked-light@3x.png Binary files differnew file mode 100644 index 0000000000..3181f82f80 --- /dev/null +++ b/src/quickcontrols/ios/images/switch-indicator-checked-light@3x.png diff --git a/src/quickcontrols/ios/images/switch-indicator-dark.png b/src/quickcontrols/ios/images/switch-indicator-dark.png Binary files differnew file mode 100644 index 0000000000..939cd4e780 --- /dev/null +++ b/src/quickcontrols/ios/images/switch-indicator-dark.png diff --git a/src/quickcontrols/ios/images/switch-indicator-dark@2x.png b/src/quickcontrols/ios/images/switch-indicator-dark@2x.png Binary files differnew file mode 100644 index 0000000000..294e4e6621 --- /dev/null +++ b/src/quickcontrols/ios/images/switch-indicator-dark@2x.png diff --git a/src/quickcontrols/ios/images/switch-indicator-dark@3x.png b/src/quickcontrols/ios/images/switch-indicator-dark@3x.png Binary files differnew file mode 100644 index 0000000000..500c2891cb --- /dev/null +++ b/src/quickcontrols/ios/images/switch-indicator-dark@3x.png diff --git a/src/quickcontrols/ios/images/switch-indicator-light.png b/src/quickcontrols/ios/images/switch-indicator-light.png Binary files differnew file mode 100644 index 0000000000..250cf0d99c --- /dev/null +++ b/src/quickcontrols/ios/images/switch-indicator-light.png diff --git a/src/quickcontrols/ios/images/switch-indicator-light@2x.png b/src/quickcontrols/ios/images/switch-indicator-light@2x.png Binary files differnew file mode 100644 index 0000000000..08886b2004 --- /dev/null +++ b/src/quickcontrols/ios/images/switch-indicator-light@2x.png diff --git a/src/quickcontrols/ios/images/switch-indicator-light@3x.png b/src/quickcontrols/ios/images/switch-indicator-light@3x.png Binary files differnew file mode 100644 index 0000000000..ec2c8dfadc --- /dev/null +++ b/src/quickcontrols/ios/images/switch-indicator-light@3x.png diff --git a/src/quickcontrols/ios/impl/CMakeLists.txt b/src/quickcontrols/ios/impl/CMakeLists.txt new file mode 100644 index 0000000000..e298335bb1 --- /dev/null +++ b/src/quickcontrols/ios/impl/CMakeLists.txt @@ -0,0 +1,27 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## qtquickcontrols2iosstyleimplplugin Plugin: +##################################################################### + +set(qml_files + "CursorDelegate.qml" +) + +qt_internal_add_qml_module(qtquickcontrols2iosstyleimplplugin + URI "QtQuick.Controls.iOS.impl" + VERSION "${PROJECT_VERSION}" + PLUGIN_TARGET qtquickcontrols2iosstyleimplplugin + NO_PLUGIN_OPTIONAL + SOURCES + qquickiosstyle.cpp qquickiosstyle_p.h + qquickioscursorflashtimer_p.h qquickioscursorflashtimer.cpp + QML_FILES + ${qml_files} + LIBRARIES + Qt::CorePrivate + Qt::Gui + Qt::QmlPrivate + Qt::QuickPrivate +) diff --git a/src/quickcontrols/ios/impl/CursorDelegate.qml b/src/quickcontrols/ios/impl/CursorDelegate.qml new file mode 100644 index 0000000000..9b675afeb2 --- /dev/null +++ b/src/quickcontrols/ios/impl/CursorDelegate.qml @@ -0,0 +1,22 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick +import QtQuick.Controls.iOS.impl + +Rectangle { + id: cursor + + color: "#426bf2" + width: 2 + radius: 1 + visible: parent.activeFocus && !parent.readOnly && parent.selectionStart === parent.selectionEnd + + opacity: timer.visible ? 1 : 0 + + CursorFlashTimer { + id: timer + cursorPosition: cursor.parent.cursorPosition + running: cursor.parent.activeFocus && !cursor.parent.readOnly + } +} diff --git a/src/quickcontrols/ios/impl/qquickioscursorflashtimer.cpp b/src/quickcontrols/ios/impl/qquickioscursorflashtimer.cpp new file mode 100644 index 0000000000..8ae88b2a90 --- /dev/null +++ b/src/quickcontrols/ios/impl/qquickioscursorflashtimer.cpp @@ -0,0 +1,79 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +#include "qquickioscursorflashtimer_p.h" +#include <QtGui/qguiapplication.h> +#include <QtGui/qstylehints.h> + +QT_BEGIN_NAMESPACE + +QQuickIOSCursorFlashTimer::QQuickIOSCursorFlashTimer(QObject *parent) + : QObject(parent) +{ +} + +bool QQuickIOSCursorFlashTimer::visible() const +{ + return m_visible; +} + +void QQuickIOSCursorFlashTimer::setVisible(bool visible) +{ + if (m_visible == visible) + return; + m_visible = visible; + emit visibleChanged(); +} + +int QQuickIOSCursorFlashTimer::cursorPosition() const +{ + return m_cursorPosition; +} + +void QQuickIOSCursorFlashTimer::setCursorPosition(int cursorPosition) +{ + if (m_cursorPosition == cursorPosition) + return; + m_cursorPosition = cursorPosition; + emit cursorPositionChanged(); + start(); +} + +bool QQuickIOSCursorFlashTimer::running() const +{ + return m_running; +} + +void QQuickIOSCursorFlashTimer::setRunning(bool running) +{ + if (running == m_running) + return; + m_running = running; + emit runningChanged(m_running); + if (!running) { + stop(); + setVisible(false); + } else { + start(); + } +} + +void QQuickIOSCursorFlashTimer::start() +{ + stop(); + m_timer = startTimer(QGuiApplication::styleHints()->cursorFlashTime() / 2); +} + +void QQuickIOSCursorFlashTimer::stop() +{ + killTimer(m_timer); + m_timer = 0; +} + +void QQuickIOSCursorFlashTimer::timerEvent(QTimerEvent *event) +{ + if (event->timerId() == m_timer) + setVisible(!visible()); +} + +QT_END_NAMESPACE diff --git a/src/quickcontrols/ios/impl/qquickioscursorflashtimer_p.h b/src/quickcontrols/ios/impl/qquickioscursorflashtimer_p.h new file mode 100644 index 0000000000..46e73ecb64 --- /dev/null +++ b/src/quickcontrols/ios/impl/qquickioscursorflashtimer_p.h @@ -0,0 +1,62 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +#ifndef QQUICKIOSCURSORFLASHTIMER_P_H +#define QQUICKIOSCURSORFLASHTIMER_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include <QtQml/qqml.h> +#include <QtCore/qobject.h> + +QT_BEGIN_NAMESPACE + +class QQuickIOSCursorFlashTimer : public QObject +{ + Q_OBJECT + Q_PROPERTY(bool visible READ visible WRITE setVisible NOTIFY visibleChanged FINAL) + Q_PROPERTY(int cursorPosition READ cursorPosition WRITE setCursorPosition NOTIFY cursorPositionChanged FINAL) + Q_PROPERTY(bool running READ running WRITE setRunning NOTIFY runningChanged FINAL) + QML_NAMED_ELEMENT(CursorFlashTimer) + +public: + explicit QQuickIOSCursorFlashTimer(QObject *parent = nullptr); + + bool visible() const; + void setVisible(bool visible); + + int cursorPosition() const; + void setCursorPosition(int cursorPosition); + + bool running() const; + void setRunning(bool running); + + void start(); + void stop(); + + void timerEvent(QTimerEvent *event) override; + +Q_SIGNALS: + void visibleChanged(); + void cursorPositionChanged(); + void runningChanged(bool running); + +private: + bool m_visible = false; + int m_cursorPosition = 0; + int m_timer = 0; + bool m_running = false; +}; + +QT_END_NAMESPACE + +#endif // QQUICKIOSCURSORFLASHTIMER_P_H diff --git a/src/quickcontrols/ios/impl/qquickiosstyle.cpp b/src/quickcontrols/ios/impl/qquickiosstyle.cpp new file mode 100644 index 0000000000..cfbbfd69f5 --- /dev/null +++ b/src/quickcontrols/ios/impl/qquickiosstyle.cpp @@ -0,0 +1,20 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +#include "qquickiosstyle_p.h" + +QT_BEGIN_NAMESPACE + +Q_GLOBAL_STATIC_WITH_ARGS(QString, GlobalPath, (QLatin1String("qrc:/qt-project.org/imports/QtQuick/Controls/iOS/images/"))) + +QQuickIOSStyle::QQuickIOSStyle(QObject *parent) + : QObject(parent) +{ +} + +QUrl QQuickIOSStyle::url() +{ + return *GlobalPath(); +} + +QT_END_NAMESPACE diff --git a/src/quickcontrols/ios/impl/qquickiosstyle_p.h b/src/quickcontrols/ios/impl/qquickiosstyle_p.h new file mode 100644 index 0000000000..03144751ad --- /dev/null +++ b/src/quickcontrols/ios/impl/qquickiosstyle_p.h @@ -0,0 +1,39 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +#ifndef QQUICKIOSSTYLE_P_H +#define QQUICKIOSSTYLE_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include <QtCore/qobject.h> +#include <QtQml/qqml.h> + +QT_BEGIN_NAMESPACE + +class QQuickIOSStyle : public QObject +{ + Q_OBJECT + Q_PROPERTY(QUrl url READ url CONSTANT) + QML_NAMED_ELEMENT(IOS) + QML_SINGLETON + QML_ADDED_IN_VERSION(6, 5) + +public: + explicit QQuickIOSStyle(QObject *parent = nullptr); + + static QUrl url(); +}; + +QT_END_NAMESPACE + +#endif // QQUICKIOSSTYLE_P_H diff --git a/src/quickcontrols/ios/qquickiostheme.mm b/src/quickcontrols/ios/qquickiostheme.mm new file mode 100644 index 0000000000..9c58e68d9d --- /dev/null +++ b/src/quickcontrols/ios/qquickiostheme.mm @@ -0,0 +1,82 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +#include "qquickiostheme_p.h" + +#include <QtGui/private/qcoregraphics_p.h> + +#ifdef Q_OS_IOS +#include <UIKit/UIInterface.h> +#endif + +#include <QtQuickTemplates2/private/qquicktheme_p.h> +#include <QtQuickControls2/private/qquickstyle_p.h> + +QT_BEGIN_NAMESPACE + +void QQuickIOSTheme::initialize(QQuickTheme *theme) +{ + QPalette systemPalette; + + QColor window; + QColor windowText; + QColor background; + QColor placeholderText; + QColor button; + QColor disabledButton; + QColor white; + QColor lightGray; + QColor gray; + QColor darkGray; +#ifdef Q_OS_IOS + window = qt_mac_toQColor(UIColor.systemGroupedBackgroundColor.CGColor); + windowText = qt_mac_toQColor(UIColor.labelColor.CGColor); + background = qt_mac_toQColor(UIColor.systemBackgroundColor.CGColor); + placeholderText = qt_mac_toQColor(UIColor.placeholderTextColor.CGColor); + button = qt_mac_toQColor(UIColor.systemBlueColor.CGColor); + disabledButton = qt_mac_toQColor(UIColor.tertiarySystemFillColor.CGColor); + white = qt_mac_toQColor(UIColor.whiteColor.CGColor); + lightGray = qt_mac_toQColor(UIColor.systemGray6Color.CGColor); + gray = qt_mac_toQColor(UIColor.opaqueSeparatorColor.CGColor); + darkGray = qt_mac_toQColor(UIColor.systemGrayColor.CGColor); +#else + bool isDarkSystemTheme = QQuickStylePrivate::isDarkSystemTheme(); + window = isDarkSystemTheme ? QColor(qRgba(0, 0, 0, 255)) : QColor(qRgba(242, 242, 247, 255)); + windowText = isDarkSystemTheme ? QColor(Qt::white) : QColor(Qt::black); + background = isDarkSystemTheme ? QColor(Qt::black) : QColor(Qt::white); + placeholderText = isDarkSystemTheme ? QColor(qRgba(235, 235, 245, 77)) : QColor(qRgba(60, 60, 67, 77)); + button = isDarkSystemTheme ? QColor(qRgba(10, 132, 255, 255)) : QColor(qRgba(0, 122, 255, 255)); + disabledButton = isDarkSystemTheme ? QColor(qRgba(118, 118, 128, 61)) : QColor(qRgba(118, 118, 128, 31)); + white = QColor(Qt::white); + lightGray = isDarkSystemTheme ? QColor(qRgba(28, 28, 30, 255)) : QColor(qRgba(242, 242, 247, 255)); + gray = isDarkSystemTheme ? QColor(qRgba(56, 56, 58, 255)) : QColor(qRgba(198, 198, 200, 2555)); + darkGray = QColor(qRgba(142, 142, 147, 255)); +#endif + systemPalette.setColor(QPalette::Window, window); + + systemPalette.setColor(QPalette::Active, QPalette::WindowText, windowText); + systemPalette.setColor(QPalette::Disabled, QPalette::WindowText, darkGray); + + systemPalette.setColor(QPalette::Base, background); + + systemPalette.setColor(QPalette::PlaceholderText, placeholderText); + + systemPalette.setColor(QPalette::Button, button); + systemPalette.setColor(QPalette::Disabled, QPalette::Button, disabledButton); + + systemPalette.setColor(QPalette::ButtonText, white); + white.setAlphaF(0.5); + systemPalette.setColor(QPalette::Disabled, QPalette::ButtonText, white); + + button.setAlphaF(0.8); + systemPalette.setColor(QPalette::Highlight, button); + + systemPalette.setColor(QPalette::Light, lightGray); + systemPalette.setColor(QPalette::Mid, gray); + systemPalette.setColor(QPalette::Dark, darkGray); + + theme->setPalette(QQuickTheme::System, systemPalette); +} + +QT_END_NAMESPACE + diff --git a/src/quickcontrols/ios/qquickiostheme_p.h b/src/quickcontrols/ios/qquickiostheme_p.h new file mode 100644 index 0000000000..e85de7e439 --- /dev/null +++ b/src/quickcontrols/ios/qquickiostheme_p.h @@ -0,0 +1,32 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +#ifndef QQUICKIOSTHEME_P_H +#define QQUICKIOSTHEME_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include <QtCore/qglobal.h> + +QT_BEGIN_NAMESPACE + +class QQuickTheme; + +class QQuickIOSTheme +{ +public: + static void initialize(QQuickTheme *theme); +}; + +QT_END_NAMESPACE + +#endif // QQUICKIOSTHEME_P_H diff --git a/src/quickcontrols/ios/qtquickcontrols2iosstyleplugin.cpp b/src/quickcontrols/ios/qtquickcontrols2iosstyleplugin.cpp new file mode 100644 index 0000000000..87110a9936 --- /dev/null +++ b/src/quickcontrols/ios/qtquickcontrols2iosstyleplugin.cpp @@ -0,0 +1,55 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +#include "qquickiostheme_p.h" + +#include <QtCore/qloggingcategory.h> +#include <QtQml/qqml.h> +#include <QtQuickControls2/private/qquickstyleplugin_p.h> +#include <QtQuickTemplates2/private/qquicktheme_p.h> + +QT_BEGIN_NAMESPACE + +extern void qml_register_types_QtQuick_Controls_iOS(); +Q_GHS_KEEP_REFERENCE(qml_register_types_QtQuick_Controls_iOS); + +class QtQuickControls2IOSStylePlugin : public QQuickStylePlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) + +public: + QtQuickControls2IOSStylePlugin(QObject *parent = nullptr); + + QString name() const override; + void initializeTheme(QQuickTheme *theme) override; + void updateTheme() override; + + QQuickIOSTheme m_theme; +}; + +QtQuickControls2IOSStylePlugin::QtQuickControls2IOSStylePlugin(QObject *parent) : QQuickStylePlugin(parent) +{ + volatile auto registration = &qml_register_types_QtQuick_Controls_iOS; + Q_UNUSED(registration); +} + +QString QtQuickControls2IOSStylePlugin::name() const +{ + return QStringLiteral("iOS"); +} + +void QtQuickControls2IOSStylePlugin::initializeTheme(QQuickTheme *theme) +{ + m_theme.initialize(theme); +} + +void QtQuickControls2IOSStylePlugin::updateTheme() +{ + QQuickTheme *theme = QQuickTheme::instance(); + m_theme.initialize(theme); +} + +QT_END_NAMESPACE + +#include "qtquickcontrols2iosstyleplugin.moc" |