diff options
Diffstat (limited to 'src/quickcontrols/ios')
99 files changed, 589 insertions, 173 deletions
diff --git a/src/quickcontrols/ios/BusyIndicator.qml b/src/quickcontrols/ios/BusyIndicator.qml index e9c874d904..3fb08070df 100644 --- a/src/quickcontrols/ios/BusyIndicator.qml +++ b/src/quickcontrols/ios/BusyIndicator.qml @@ -27,10 +27,10 @@ T.BusyIndicator { contentItem: Image { property int currentImage: 8 source: IOS.url + "busyindicator-frame-0" + currentImage + - (Qt.styleHints.appearance === Qt.Light ? "-light.png" : "-dark.png") + (Qt.styleHints.colorScheme === Qt.Light ? "-light.png" : "-dark.png") fillMode: Image.PreserveAspectFit NumberAnimation on currentImage { - running: control.running + running: control.visible && control.running loops: -1 from: 8 to: 1 diff --git a/src/quickcontrols/ios/Button.qml b/src/quickcontrols/ios/Button.qml index 6d8a6f8e09..2156b3beda 100644 --- a/src/quickcontrols/ios/Button.qml +++ b/src/quickcontrols/ios/Button.qml @@ -20,8 +20,7 @@ T.Button { icon.width: 17 icon.height: 17 - icon.color: control.flat ? (control.enabled ? (control.down ? control.palette.highlight : control.palette.button) - : control.palette.mid) + icon.color: control.flat ? (control.down ? control.palette.highlight : control.palette.button) : control.palette.buttonText contentItem: IconLabel { @@ -32,8 +31,7 @@ T.Button { 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) + color: control.flat ? (control.down ? control.palette.highlight : control.palette.button) : control.palette.buttonText } diff --git a/src/quickcontrols/ios/CMakeLists.txt b/src/quickcontrols/ios/CMakeLists.txt index d20090b601..f3be4038a3 100644 --- a/src/quickcontrols/ios/CMakeLists.txt +++ b/src/quickcontrols/ios/CMakeLists.txt @@ -5,6 +5,8 @@ ## qtquickcontrols2iosstyleplugin Plugin: ##################################################################### +add_subdirectory(impl) + set(qml_files "Slider.qml" "RangeSlider.qml" @@ -45,6 +47,12 @@ set(qml_files "ComboBox.qml" "HorizontalHeaderView.qml" "VerticalHeaderView.qml" + "Dialog.qml" + "DialogButtonBox.qml" + "DelayButton.qml" + "SelectionRectangle.qml" + "ToolTip.qml" + "ToolSeparator.qml" ) set_source_files_properties(Slider.qml PROPERTIES @@ -73,10 +81,11 @@ qt_internal_add_qml_module(qtquickcontrols2iosstyleplugin Qt::CorePrivate Qt::GuiPrivate Qt::QmlPrivate + Qt::QuickControls2IOSStyleImpl + Qt::QuickControls2ImplPrivate Qt::QuickControls2Private Qt::QuickPrivate Qt::QuickTemplates2Private - Qt::QuickControls2ImplPrivate ) qt_internal_extend_target(qtquickcontrols2iosstyleplugin CONDITION APPLE AND IOS @@ -101,8 +110,6 @@ qt_internal_add_resource(qtquickcontrols2iosstyleplugin "qmake_qtquickcontrols2i ${qmake_qtquickcontrols2iosstyleplugin_resource_files} ) -add_subdirectory(impl) - _qt_internal_add_qml_static_plugin_dependency(qtquickcontrols2iosstyleplugin qtquickcontrols2iosstyleimplplugin) diff --git a/src/quickcontrols/ios/CheckBox.qml b/src/quickcontrols/ios/CheckBox.qml index 2ef8f83114..59f1c8bce4 100644 --- a/src/quickcontrols/ios/CheckBox.qml +++ b/src/quickcontrols/ios/CheckBox.qml @@ -27,8 +27,8 @@ T.CheckBox { states: [ {"checked": control.checkState === Qt.Checked}, {"partially-checked": control.checkState === Qt.PartiallyChecked}, - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark} + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark} ] } } @@ -39,7 +39,7 @@ T.CheckBox { text: control.text font: control.font - color: control.palette.windowText + color: control.palette.text elide: Text.ElideRight verticalAlignment: Text.AlignVCenter } diff --git a/src/quickcontrols/ios/CheckDelegate.qml b/src/quickcontrols/ios/CheckDelegate.qml index fbd2a4ce35..b421430311 100644 --- a/src/quickcontrols/ios/CheckDelegate.qml +++ b/src/quickcontrols/ios/CheckDelegate.qml @@ -20,7 +20,7 @@ T.CheckDelegate { icon.width: 29 icon.height: 29 - icon.color: control.enabled ? control.palette.text : control.palette.mid + icon.color: control.palette.text indicator: Image { x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding @@ -32,8 +32,8 @@ T.CheckDelegate { states: [ {"checked": control.checkState === Qt.Checked}, {"partially-checked": control.checkState === Qt.PartiallyChecked}, - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark} + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark} ] } } @@ -50,12 +50,12 @@ T.CheckDelegate { icon: control.icon text: control.text font: control.font - color: control.enabled ? control.palette.text : control.palette.mid + color: control.palette.text } background: Rectangle { implicitHeight: 44 - color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base + color: Qt.styleHints.colorScheme === 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 @@ -65,8 +65,8 @@ T.CheckDelegate { source: IOS.url + "itemdelegate-background" NinePatchImageSelector on source { states: [ - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark}, {"pressed": control.down} ] } diff --git a/src/quickcontrols/ios/ComboBox.qml b/src/quickcontrols/ios/ComboBox.qml index 491325258d..7c1299db74 100644 --- a/src/quickcontrols/ios/ComboBox.qml +++ b/src/quickcontrols/ios/ComboBox.qml @@ -1,6 +1,8 @@ // Copyright (C) 2023 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +pragma ComponentBehavior: Bound + import QtQuick import QtQuick.Templates as T import QtQuick.Controls.impl @@ -26,12 +28,15 @@ T.ComboBox { delegate: MenuItem { width: ListView.view.width - text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData + text: model[control.textRole] palette.text: control.palette.text palette.highlightedText: control.palette.highlightedText hoverEnabled: control.hoverEnabled checked: control.currentIndex === index + required property var model + required property int index + readonly property bool isSingleItem: control.count === 1 readonly property bool isFirstItem: !isSingleItem && index === 0 readonly property bool isLastItem: !isSingleItem && index === control.count - 1 @@ -49,8 +54,8 @@ T.ComboBox { states: [ {"edge": isFirstItem || isLastItem }, {"single": isSingleItem}, - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark}, {"pressed": down} ] } @@ -65,13 +70,12 @@ T.ComboBox { opacity: (control.enabled || control.popupButtonStyle) ? 1 : 0.5 source: IOS.url + (control.popupButtonStyle ? "arrow-updown-indicator" : "arrow-indicator") - color: control.popupButtonStyle ? (control.enabled ? (control.down ? control.palette.highlight : control.palette.button) - : control.palette.mid) - : defaultColor + color: control.popupButtonStyle ? (control.down ? control.palette.highlight : control.palette.button) + : defaultColor ImageSelector on source { states: [ - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark}, {"pressed": control.down} ] } @@ -91,9 +95,8 @@ T.ComboBox { validator: control.validator selectByMouse: control.selectTextByMouse - color: control.popupButtonStyle ? (control.enabled ? (control.down ? control.palette.highlight : control.palette.button) - : control.palette.mid) - : control.palette.text + color: control.popupButtonStyle ? (control.down ? control.palette.highlight : control.palette.button) + : control.palette.text selectionColor: control.palette.highlight selectedTextColor: control.palette.highlightedText verticalAlignment: Text.AlignVCenter diff --git a/src/quickcontrols/ios/DelayButton.qml b/src/quickcontrols/ios/DelayButton.qml new file mode 100644 index 0000000000..dddeefbedd --- /dev/null +++ b/src/quickcontrols/ios/DelayButton.qml @@ -0,0 +1,56 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR 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.DelayButton { + 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.down ? control.palette.highlight : control.palette.button + + transition: Transition { + NumberAnimation { + duration: control.delay * (control.pressed ? 1.0 - control.progress : 0.3 * control.progress) + } + } + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.palette.buttonText + } + + background: Rectangle { + implicitWidth: 17 + implicitHeight: 10 + radius: 4 + + color: control.down && control.progress === 1 ? "transparent" : control.palette.disabled.button + + Rectangle { + width: control.progress * parent.width + height: parent.height + radius: 4 + color: control.down ? control.palette.highlight : control.palette.button + } + } +} diff --git a/src/quickcontrols/ios/Dial.qml b/src/quickcontrols/ios/Dial.qml index 2a4c9666bc..3fc77035b8 100644 --- a/src/quickcontrols/ios/Dial.qml +++ b/src/quickcontrols/ios/Dial.qml @@ -64,8 +64,8 @@ T.Dial { centerY: control.background.children[0].height / 2 radiusX: control.background.children[0].width / 2 - 2 radiusY: radiusX - startAngle: -230 - sweepAngle: 140 + control.angle + startAngle: control.startAngle - 90 + sweepAngle: control.angle - control.startAngle } } } @@ -92,8 +92,8 @@ T.Dial { source: IOS.url + "slider-handle" NinePatchImageSelector on source { states: [ - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark}, {"disabled": !control.enabled} ] } diff --git a/src/quickcontrols/ios/Dialog.qml b/src/quickcontrols/ios/Dialog.qml new file mode 100644 index 0000000000..f8f400daf1 --- /dev/null +++ b/src/quickcontrols/ios/Dialog.qml @@ -0,0 +1,74 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR 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.Dialog { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitHeaderWidth, + implicitFooterWidth) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding + + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) + leftPadding: 16 + rightPadding: 16 + bottomPadding: 23 + + dim: true + + 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 { + NinePatchImage { + width: parent.width + height: parent.height + source: IOS.url + "popup-background" + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark} + ] + } + } + } + + header: Label { + text: control.title + visible: control.title + horizontalAlignment: Text.AlignHCenter + topPadding: 23 + bottomPadding: 7 + verticalAlignment: Text.AlignVCenter + elide: Label.ElideRight + font.weight: Font.Medium + font.pointSize: 17 + } + + footer: DialogButtonBox { + visible: count > 0 + } + + 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/DialogButtonBox.qml b/src/quickcontrols/ios/DialogButtonBox.qml new file mode 100644 index 0000000000..f04088a9d1 --- /dev/null +++ b/src/quickcontrols/ios/DialogButtonBox.qml @@ -0,0 +1,76 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR 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.DialogButtonBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + readonly property var orientation: (count === 2 || alignment !== 0) + ? ListView.Horizontal : ListView.Vertical + readonly property bool delegatePressed: count === 2 && (itemAt(0).down || itemAt(1).down) + + spacing: orientation === ListView.Horizontal + ? (background && background.separatorLine ? background.separatorLine.width : 0) + : 0 + + delegate: DialogButtonBoxDelegate { + width: control.orientation === ListView.Vertical + ? control.width : undefined + } + + contentItem: ListView { + clip: true + implicitWidth: contentWidth + implicitHeight: contentHeight + model: control.contentModel + spacing: control.spacing + orientation: control.orientation + boundsBehavior: Flickable.StopAtBounds + snapMode: ListView.SnapToItem + } + + background: Item { + implicitHeight: control.orientation === ListView.Horizontal ? 44 : Math.max(contentItem.implicitHeight, 44) + implicitWidth: 270 + + readonly property NinePatchImage backgroundImage : NinePatchImage { + parent: control.background + width: parent.width + height: parent.height + rotation: control.position === DialogButtonBox.Header ? 180 : 0 + source: IOS.url + "dialogbuttonbox-delegate-vertical-last" + NinePatchImageSelector on source { + states: [ + {"pressed": delegate.down}, + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark}, + ] + } + } + + readonly property NinePatchImage separatorLine : NinePatchImage { + parent: control.background.backgroundImage + x: control.itemAt(0) ? control.itemAt(0).width : 0 + height: parent.height + rotation: control.position === DialogButtonBox.Header ? 180 : 0 + visible: control.alignment === 0 && (control.count === 2 && !control.delegatePressed) + + source: IOS.url + "dialogbuttonbox-separator" + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark} + ] + } + } + } +} diff --git a/src/quickcontrols/ios/Drawer.qml b/src/quickcontrols/ios/Drawer.qml index 52cdb8b372..2ee955e7bc 100644 --- a/src/quickcontrols/ios/Drawer.qml +++ b/src/quickcontrols/ios/Drawer.qml @@ -32,8 +32,8 @@ T.Drawer { source: IOS.url + "drawer-background" NinePatchImageSelector on source { states: [ - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark}, {"modal": control.modal} ] } diff --git a/src/quickcontrols/ios/Frame.qml b/src/quickcontrols/ios/Frame.qml index 5c52269a3c..9179366808 100644 --- a/src/quickcontrols/ios/Frame.qml +++ b/src/quickcontrols/ios/Frame.qml @@ -19,6 +19,6 @@ T.Frame { background: Rectangle { radius: 9 - color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base + color: Qt.styleHints.colorScheme === Qt.Dark ? control.palette.light : control.palette.base } } diff --git a/src/quickcontrols/ios/GroupBox.qml b/src/quickcontrols/ios/GroupBox.qml index 3adc599ddf..d3d14e7df8 100644 --- a/src/quickcontrols/ios/GroupBox.qml +++ b/src/quickcontrols/ios/GroupBox.qml @@ -36,6 +36,6 @@ T.GroupBox { width: parent.width height: parent.height - control.topPadding + control.bottomPadding radius: 9 - color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base + color: Qt.styleHints.colorScheme === Qt.Dark ? control.palette.light : control.palette.base } } diff --git a/src/quickcontrols/ios/HorizontalHeaderView.qml b/src/quickcontrols/ios/HorizontalHeaderView.qml index b6abd9e1d9..1a02ff8f05 100644 --- a/src/quickcontrols/ios/HorizontalHeaderView.qml +++ b/src/quickcontrols/ios/HorizontalHeaderView.qml @@ -1,6 +1,8 @@ // Copyright (C) 2023 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +pragma ComponentBehavior: Bound + import QtQuick import QtQuick.Templates as T @@ -16,6 +18,10 @@ T.HorizontalHeaderView { implicitHeight: Math.max(1, contentHeight) delegate: Rectangle { + id: delegate + + required property var model + readonly property real cellPadding: 8 implicitWidth: text.implicitWidth + (cellPadding * 2) @@ -24,11 +30,9 @@ T.HorizontalHeaderView { Label { id: text - text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] - : model[control.textRole]) - : modelData - width: parent.width - height: parent.height + text: delegate.model[control.textRole] + width: delegate.width + height: delegate.height horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter } diff --git a/src/quickcontrols/ios/ItemDelegate.qml b/src/quickcontrols/ios/ItemDelegate.qml index 28146e51fd..2b27c86b26 100644 --- a/src/quickcontrols/ios/ItemDelegate.qml +++ b/src/quickcontrols/ios/ItemDelegate.qml @@ -21,7 +21,7 @@ T.ItemDelegate { icon.width: 29 icon.height: 29 - icon.color: control.enabled ? control.palette.text : control.palette.mid + icon.color: control.palette.text contentItem: IconLabel { spacing: control.spacing @@ -31,12 +31,12 @@ T.ItemDelegate { icon: control.icon text: control.text font: control.font - color: control.enabled ? control.palette.text : control.palette.mid + color: control.palette.text } background: Rectangle { implicitHeight: 44 - color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base + color: Qt.styleHints.colorScheme === 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 @@ -46,8 +46,8 @@ T.ItemDelegate { source: IOS.url + "itemdelegate-background" NinePatchImageSelector on source { states: [ - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark}, {"pressed": control.down} ] } diff --git a/src/quickcontrols/ios/Menu.qml b/src/quickcontrols/ios/Menu.qml index 437731c19e..752737f69b 100644 --- a/src/quickcontrols/ios/Menu.qml +++ b/src/quickcontrols/ios/Menu.qml @@ -35,8 +35,8 @@ T.Menu { implicitHeight: contentHeight model: control.contentModel interactive: Window.window - ? contentHeight + control.topPadding + control.bottomPadding > Window.window.height - : false + ? contentHeight + control.topPadding + control.bottomPadding > control.height + : false clip: true currentIndex: control.currentIndex @@ -52,8 +52,8 @@ T.Menu { source: IOS.url + "menu-background" NinePatchImageSelector on source { states: [ - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark} + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark} ] } } diff --git a/src/quickcontrols/ios/MenuBar.qml b/src/quickcontrols/ios/MenuBar.qml index 06f549e82a..b38fa12fcb 100644 --- a/src/quickcontrols/ios/MenuBar.qml +++ b/src/quickcontrols/ios/MenuBar.qml @@ -24,7 +24,7 @@ T.MenuBar { background: Rectangle { opacity: 0.98 - color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base + color: Qt.styleHints.colorScheme === Qt.Dark ? control.palette.light : control.palette.base Rectangle { height: 1 width: parent.width diff --git a/src/quickcontrols/ios/MenuBarItem.qml b/src/quickcontrols/ios/MenuBarItem.qml index 5fe36693e4..93febfa29e 100644 --- a/src/quickcontrols/ios/MenuBarItem.qml +++ b/src/quickcontrols/ios/MenuBarItem.qml @@ -19,8 +19,7 @@ T.MenuBarItem { icon.width: 25 icon.height: 25 - icon.color: control.enabled ? (control.down ? control.palette.highlight : control.palette.button) - : control.palette.mid + icon.color: control.down ? control.palette.highlight : control.palette.button contentItem: IconLabel { spacing: control.spacing @@ -31,8 +30,7 @@ T.MenuBarItem { icon: control.icon text: control.text font: control.font - color: control.enabled ? (control.down ? control.palette.highlight : control.palette.button) - : control.palette.mid + color: control.down ? control.palette.highlight : control.palette.button } background: Item { diff --git a/src/quickcontrols/ios/MenuItem.qml b/src/quickcontrols/ios/MenuItem.qml index 91fa865e06..29c2562ca0 100644 --- a/src/quickcontrols/ios/MenuItem.qml +++ b/src/quickcontrols/ios/MenuItem.qml @@ -23,7 +23,7 @@ T.MenuItem { icon.width: 19 icon.height: 19 - icon.color: control.palette.windowText + icon.color: control.palette.text readonly property bool isSingleItem: control.menu && control.menu.count === 1 readonly property bool isFirstItem: !isSingleItem && control.menu && control.menu.itemAt(0) === control ? true : false @@ -43,7 +43,7 @@ T.MenuItem { icon: control.icon text: control.text font: control.font - color: control.palette.windowText + color: control.palette.text } arrow: ColorImage { @@ -56,7 +56,7 @@ T.MenuItem { visible: control.subMenu opacity: control.enabled ? 1 : 0.5 mirror: control.mirrored - color: control.palette.windowText + color: control.palette.text source: control.subMenu ? IOS.url + "arrow-indicator-light.png" : "" Behavior on rotation { RotationAnimation { duration: 100 } } @@ -69,7 +69,7 @@ T.MenuItem { visible: control.checked source: control.checked ? IOS.url + "radiodelegate-indicator-light.png" : "" - color: control.palette.windowText + color: control.palette.text } background: Item { @@ -86,8 +86,8 @@ T.MenuItem { states: [ {"edge": control.isFirstItem || control.isLastItem}, {"single": control.isSingleItem}, - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark}, {"pressed": control.down} ] } diff --git a/src/quickcontrols/ios/MenuSeparator.qml b/src/quickcontrols/ios/MenuSeparator.qml index ba69005611..790d8f0302 100644 --- a/src/quickcontrols/ios/MenuSeparator.qml +++ b/src/quickcontrols/ios/MenuSeparator.qml @@ -18,8 +18,8 @@ T.MenuSeparator { source: IOS.url + "menuseparator-separator" NinePatchImageSelector on source { states: [ - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark} + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark} ] } } diff --git a/src/quickcontrols/ios/PageIndicator.qml b/src/quickcontrols/ios/PageIndicator.qml index 036f952ea8..9a059b5df2 100644 --- a/src/quickcontrols/ios/PageIndicator.qml +++ b/src/quickcontrols/ios/PageIndicator.qml @@ -18,8 +18,8 @@ T.PageIndicator { source: IOS.url + "pageindicator-delegate" ImageSelector on source { states: [ - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark}, {"current": index === control.currentIndex}, ] } diff --git a/src/quickcontrols/ios/Popup.qml b/src/quickcontrols/ios/Popup.qml index 47a6157f71..ec76a90267 100644 --- a/src/quickcontrols/ios/Popup.qml +++ b/src/quickcontrols/ios/Popup.qml @@ -35,8 +35,8 @@ T.Popup { source: IOS.url + "popup-background" NinePatchImageSelector on source { states: [ - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark} + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark} ] } } diff --git a/src/quickcontrols/ios/ProgressBar.qml b/src/quickcontrols/ios/ProgressBar.qml index c280d5f94f..20cf4dc265 100644 --- a/src/quickcontrols/ios/ProgressBar.qml +++ b/src/quickcontrols/ios/ProgressBar.qml @@ -18,21 +18,36 @@ T.ProgressBar { contentItem: Item { parent: control.background - implicitWidth: progress.width - implicitHeight: progress.implicitHeight + implicitWidth: control.indeterminate ? animatedProgress.implicitWidth : progress.implicitWidth + implicitHeight: control.indeterminate ? animatedProgress.implicitHeight : progress.implicitHeight scale: control.mirrored ? -1 : 1 readonly property NinePatchImage progress: NinePatchImage { parent: control.contentItem - visible: control.indeterminate || control.value + visible: !control.indeterminate && control.value y: (parent.height - height) / 2 - width: control.indeterminate ? control.width * 0.4 : control.position * parent.width + width: 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} + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark} + ] + } + } + + readonly property NinePatchImage animatedProgress: NinePatchImage { + parent: control.contentItem + visible: control.indeterminate + y: (parent.height - height) / 2 + width: control.width * 0.4 + + source: IOS.url + "slider-progress" + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark} ] } @@ -57,8 +72,8 @@ T.ProgressBar { width: control.background.width NinePatchImageSelector on source { states: [ - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark} + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark} ] } } diff --git a/src/quickcontrols/ios/RadioButton.qml b/src/quickcontrols/ios/RadioButton.qml index 37cf71e1f5..d107d9b490 100644 --- a/src/quickcontrols/ios/RadioButton.qml +++ b/src/quickcontrols/ios/RadioButton.qml @@ -26,8 +26,8 @@ T.RadioButton { ImageSelector on source { states: [ {"checked": control.checked}, - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark} + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark} ] } } @@ -38,7 +38,7 @@ T.RadioButton { text: control.text font: control.font - color: control.palette.windowText + color: control.palette.text elide: Text.ElideRight verticalAlignment: Text.AlignVCenter } diff --git a/src/quickcontrols/ios/RadioDelegate.qml b/src/quickcontrols/ios/RadioDelegate.qml index 6de6dbb622..91f74b9b4f 100644 --- a/src/quickcontrols/ios/RadioDelegate.qml +++ b/src/quickcontrols/ios/RadioDelegate.qml @@ -21,7 +21,7 @@ T.RadioDelegate { icon.width: 29 icon.height: 29 - icon.color: control.enabled ? control.palette.text : control.palette.mid + icon.color: control.palette.text indicator: Image { x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding @@ -32,8 +32,8 @@ T.RadioDelegate { source: IOS.url + "radiodelegate-indicator" ImageSelector on source { states: [ - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark} + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark} ] } } @@ -50,12 +50,12 @@ T.RadioDelegate { icon: control.icon text: control.text font: control.font - color: control.enabled ? control.palette.text : control.palette.mid + color: control.palette.text } background: Rectangle { implicitHeight: 44 - color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base + color: Qt.styleHints.colorScheme === 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 @@ -65,8 +65,8 @@ T.RadioDelegate { source: IOS.url + "itemdelegate-background" NinePatchImageSelector on source { states: [ - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark}, {"pressed": control.down} ] } diff --git a/src/quickcontrols/ios/RangeSlider.qml b/src/quickcontrols/ios/RangeSlider.qml index 966f612ba8..aab3b0a598 100644 --- a/src/quickcontrols/ios/RangeSlider.qml +++ b/src/quickcontrols/ios/RangeSlider.qml @@ -28,8 +28,8 @@ T.RangeSlider { source: IOS.url + "slider-handle" NinePatchImageSelector on source { states: [ - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark}, ] } } @@ -47,8 +47,8 @@ T.RangeSlider { source: IOS.url + "slider-handle" NinePatchImageSelector on source { states: [ - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark}, ] } } @@ -67,22 +67,24 @@ T.RangeSlider { 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}, + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark}, ] } NinePatchImage { - x: control.first.handle.width / 2 + control.first.position * (parent.width - control.first.handle.width) + readonly property real handleWidth: control.first.handle ? control.first.handle.width : 0 + + x: handleWidth / 2 + control.first.position * (parent.width - handleWidth) y: (parent.height - height) / 2 - width: control.second.position * (parent.width - control.first.handle.width) - control.first.position * (parent.width - control.first.handle.width) + width: control.second.position * (parent.width - handleWidth) - control.first.position * (parent.width - handleWidth) height: parent.height source: IOS.url + "slider-progress" NinePatchImageSelector on source { states: [ - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark}, ] } } diff --git a/src/quickcontrols/ios/ScrollBar.qml b/src/quickcontrols/ios/ScrollBar.qml index 3bdabe4f08..afd2e737b3 100644 --- a/src/quickcontrols/ios/ScrollBar.qml +++ b/src/quickcontrols/ios/ScrollBar.qml @@ -24,8 +24,8 @@ T.ScrollBar { source: IOS.url + "scrollindicator-handle" NinePatchImageSelector on source { states: [ - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark}, {"horizontal": control.horizontal}, {"vertical": control.vertical} ] diff --git a/src/quickcontrols/ios/ScrollIndicator.qml b/src/quickcontrols/ios/ScrollIndicator.qml index d6d842196a..5af880ca36 100644 --- a/src/quickcontrols/ios/ScrollIndicator.qml +++ b/src/quickcontrols/ios/ScrollIndicator.qml @@ -18,8 +18,8 @@ T.ScrollIndicator { source: IOS.url + "scrollindicator-handle" NinePatchImageSelector on source { states: [ - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark}, {"horizontal": control.horizontal}, {"vertical": control.vertical} ] diff --git a/src/quickcontrols/ios/SelectionRectangle.qml b/src/quickcontrols/ios/SelectionRectangle.qml new file mode 100644 index 0000000000..06e540b411 --- /dev/null +++ b/src/quickcontrols/ios/SelectionRectangle.qml @@ -0,0 +1,30 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR 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 +import QtQuick.Controls.iOS.impl + +T.SelectionRectangle { + id: control + + topLeftHandle: handle + bottomRightHandle: handle + + Component { + id: handle + Image { + id: image + source: IOS.url + "selectionrectangle-handle" + visible: SelectionRectangle.control.active + ImageSelector on source { + states: [ + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark} + ] + } + } + } +} diff --git a/src/quickcontrols/ios/Slider.qml b/src/quickcontrols/ios/Slider.qml index 1f6ca9f242..efa196bc72 100644 --- a/src/quickcontrols/ios/Slider.qml +++ b/src/quickcontrols/ios/Slider.qml @@ -26,8 +26,8 @@ T.Slider { source: IOS.url + "slider-handle" NinePatchImageSelector on source { states: [ - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark}, {"disabled": !control.enabled} ] } @@ -47,20 +47,22 @@ T.Slider { width: control.horizontal ? background.width : background.height NinePatchImageSelector on source { states: [ - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark}, ] } NinePatchImage { - width: control.handle.width / 2 + control.position * (parent.width - control.handle.width) + readonly property real handleWidth: control.handle ? control.handle.width : 0 + + width: handleWidth / 2 + control.position * (parent.width - handleWidth) height: parent.height source: IOS.url + "slider-progress" NinePatchImageSelector on source { states: [ - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark}, ] } } diff --git a/src/quickcontrols/ios/SpinBox.qml b/src/quickcontrols/ios/SpinBox.qml index 11131a0db1..4168f6b43e 100644 --- a/src/quickcontrols/ios/SpinBox.qml +++ b/src/quickcontrols/ios/SpinBox.qml @@ -53,8 +53,8 @@ T.SpinBox { states: [ {"up": true}, {"pressed": control.up.pressed}, - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark} + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark} ] } } @@ -69,8 +69,8 @@ T.SpinBox { states: [ {"down": true}, {"pressed": control.down.pressed}, - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark} + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark} ] } } @@ -87,8 +87,8 @@ T.SpinBox { y: (parent.height - height) / 2 NinePatchImageSelector on source { states: [ - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark} + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark} ] } } diff --git a/src/quickcontrols/ios/SwipeDelegate.qml b/src/quickcontrols/ios/SwipeDelegate.qml index ccabfc0cb4..9c6a4c3703 100644 --- a/src/quickcontrols/ios/SwipeDelegate.qml +++ b/src/quickcontrols/ios/SwipeDelegate.qml @@ -21,7 +21,7 @@ T.SwipeDelegate { icon.width: 29 icon.height: 29 - icon.color: control.enabled ? control.palette.text : control.palette.mid + icon.color: control.palette.text swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } } @@ -34,12 +34,12 @@ T.SwipeDelegate { icon: control.icon text: control.text font: control.font - color: control.enabled ? control.palette.text : control.palette.mid + color: control.palette.text } background: Rectangle { implicitHeight: 44 - color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base + color: Qt.styleHints.colorScheme === 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 @@ -49,8 +49,8 @@ T.SwipeDelegate { source: IOS.url + "itemdelegate-background" NinePatchImageSelector on source { states: [ - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark}, {"pressed": control.down} ] } diff --git a/src/quickcontrols/ios/Switch.qml b/src/quickcontrols/ios/Switch.qml index 7a600afc5f..1b219cddf4 100644 --- a/src/quickcontrols/ios/Switch.qml +++ b/src/quickcontrols/ios/Switch.qml @@ -32,8 +32,8 @@ T.Switch { source: IOS.url + "switch-indicator" ImageSelector on source { states: [ - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark}, {"checked": control.checked} ] } @@ -53,8 +53,8 @@ T.Switch { source: IOS.url + "switch-handle" NinePatchImageSelector on source { states: [ - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark}, {"disabled": !control.enabled} ] } @@ -72,7 +72,7 @@ T.Switch { text: control.text font: control.font - color: control.palette.windowText + color: control.palette.text elide: Text.ElideRight verticalAlignment: Text.AlignVCenter } diff --git a/src/quickcontrols/ios/SwitchDelegate.qml b/src/quickcontrols/ios/SwitchDelegate.qml index 4cba6dcabf..4b7d8bdccf 100644 --- a/src/quickcontrols/ios/SwitchDelegate.qml +++ b/src/quickcontrols/ios/SwitchDelegate.qml @@ -21,7 +21,7 @@ T.SwitchDelegate { icon.width: 29 icon.height: 29 - icon.color: control.enabled ? control.palette.text : control.palette.mid + icon.color: control.palette.text indicator: Image { x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 @@ -33,8 +33,8 @@ T.SwitchDelegate { source: IOS.url + "switch-indicator" ImageSelector on source { states: [ - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark}, {"checked": control.checked} ] } @@ -54,8 +54,8 @@ T.SwitchDelegate { source: IOS.url + "switch-handle" NinePatchImageSelector on source { states: [ - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark}, {"disabled": !control.enabled} ] } @@ -79,12 +79,12 @@ T.SwitchDelegate { icon: control.icon text: control.text font: control.font - color: control.enabled ? control.palette.text : control.palette.mid + color: control.palette.text } background: Rectangle { implicitHeight: 44 - color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base + color: Qt.styleHints.colorScheme === 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 @@ -93,8 +93,8 @@ T.SwitchDelegate { source: IOS.url + "itemdelegate-background" NinePatchImageSelector on source { states: [ - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark}, + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark}, ] } } diff --git a/src/quickcontrols/ios/TabBar.qml b/src/quickcontrols/ios/TabBar.qml index 1d289c71af..0f42ea14e5 100644 --- a/src/quickcontrols/ios/TabBar.qml +++ b/src/quickcontrols/ios/TabBar.qml @@ -32,7 +32,7 @@ T.TabBar { background: Rectangle { implicitHeight: 49 - color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base + color: Qt.styleHints.colorScheme === Qt.Dark ? control.palette.light : control.palette.base Rectangle { height: 1 width: parent.width diff --git a/src/quickcontrols/ios/ToolBar.qml b/src/quickcontrols/ios/ToolBar.qml index 77b3d8ac0b..28b0029018 100644 --- a/src/quickcontrols/ios/ToolBar.qml +++ b/src/quickcontrols/ios/ToolBar.qml @@ -15,7 +15,7 @@ T.ToolBar { background: Rectangle { implicitHeight: 49 - color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base + color: Qt.styleHints.colorScheme === Qt.Dark ? control.palette.light : control.palette.base Rectangle { height: 1 width: parent.width diff --git a/src/quickcontrols/ios/ToolButton.qml b/src/quickcontrols/ios/ToolButton.qml index b18073dc81..863226fdd2 100644 --- a/src/quickcontrols/ios/ToolButton.qml +++ b/src/quickcontrols/ios/ToolButton.qml @@ -18,8 +18,7 @@ T.ToolButton { icon.width: 25 icon.height: 25 - icon.color: control.enabled ? (control.down ? control.palette.highlight : control.palette.button) - : control.palette.mid + icon.color: control.down ? control.palette.highlight : control.palette.button contentItem: IconLabel { spacing: control.spacing @@ -29,8 +28,7 @@ T.ToolButton { icon: control.icon text: control.text font: control.font - color: control.enabled ? (control.down ? control.palette.highlight : control.palette.button) - : control.palette.mid + color: control.down ? control.palette.highlight : control.palette.button } background: Item { diff --git a/src/quickcontrols/ios/ToolSeparator.qml b/src/quickcontrols/ios/ToolSeparator.qml new file mode 100644 index 0000000000..10d94f204a --- /dev/null +++ b/src/quickcontrols/ios/ToolSeparator.qml @@ -0,0 +1,24 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR 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.ToolSeparator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + horizontalPadding: vertical ? 13 : 7 + verticalPadding: vertical ? 7 : 13 + + contentItem: Rectangle { + implicitHeight: control.vertical ? 23 : 1 + implicitWidth: control.vertical ? 1 : 23 + color: control.palette.mid + } +} diff --git a/src/quickcontrols/ios/ToolTip.qml b/src/quickcontrols/ios/ToolTip.qml new file mode 100644 index 0000000000..973e819503 --- /dev/null +++ b/src/quickcontrols/ios/ToolTip.qml @@ -0,0 +1,53 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR 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.ToolTip { + id: control + + x: parent ? (parent.width - implicitWidth) / 2 : 0 - (background ? background.leftInset : 0) + y: -implicitHeight - (background ? background.topInset : 0) + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topMargin: background ? background.topInset : 0 + leftMargin: background ? background.leftInset : 0 + rightMargin: background ? background.rightInset : 0 + bottomMargin: background ? background.bottomInset : 0 + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent + + contentItem: Text { + text: control.text + wrapMode: Text.Wrap + font: control.font + color: control.palette.toolTipText + } + + background: NinePatchImage { + source: IOS.url + "tooltip-background" + NinePatchImageSelector on source { + states: [ + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark} + ] + } + } +} diff --git a/src/quickcontrols/ios/TreeViewDelegate.qml b/src/quickcontrols/ios/TreeViewDelegate.qml index 89577e297b..5fc16bee07 100644 --- a/src/quickcontrols/ios/TreeViewDelegate.qml +++ b/src/quickcontrols/ios/TreeViewDelegate.qml @@ -46,8 +46,8 @@ T.TreeViewDelegate { source: IOS.url + "arrow-indicator" ImageSelector on source { states: [ - {"light": Qt.styleHints.appearance === Qt.Light}, - {"dark": Qt.styleHints.appearance === Qt.Dark} + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark} ] } } @@ -55,15 +55,15 @@ T.TreeViewDelegate { background: Rectangle { implicitHeight: 44 - color: Qt.styleHints.appearance === Qt.Dark ? control.palette.dark : control.palette.base + color: Qt.styleHints.colorScheme === 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} + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark} ] } } @@ -86,7 +86,7 @@ T.TreeViewDelegate { readonly property int __role: { let model = control.treeView.model - let index = control.treeView.modelIndex(column, row) + let index = control.treeView.index(row, column) let editText = model.data(index, Qt.EditRole) return editText !== undefined ? Qt.EditRole : Qt.DisplayRole } @@ -96,12 +96,12 @@ T.TreeViewDelegate { x: control.contentItem.x y: (parent.height - height) / 2 width: control.contentItem.width - text: control.treeView.model.data(control.treeView.modelIndex(column, row), __role) + text: control.treeView.model.data(control.treeView.index(row, column), __role) focus: true } TableView.onCommit: { - let index = TableView.view.modelIndex(column, row) + let index = TableView.view.index(row, column) TableView.view.model.setData(index, textField.text, __role) } diff --git a/src/quickcontrols/ios/VerticalHeaderView.qml b/src/quickcontrols/ios/VerticalHeaderView.qml index 6015a800b1..179bc35b23 100644 --- a/src/quickcontrols/ios/VerticalHeaderView.qml +++ b/src/quickcontrols/ios/VerticalHeaderView.qml @@ -1,6 +1,8 @@ // Copyright (C) 2023 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +pragma ComponentBehavior: Bound + import QtQuick import QtQuick.Templates as T @@ -16,6 +18,10 @@ T.VerticalHeaderView { implicitHeight: syncView ? syncView.height : 0 delegate: Rectangle { + id: delegate + + required property var model + readonly property real cellPadding: 8 implicitWidth: Math.max(control.width, text.implicitWidth + (cellPadding * 2)) @@ -24,11 +30,9 @@ T.VerticalHeaderView { Label { id: text - text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] - : model[control.textRole]) - : modelData - width: parent.width - height: parent.height + text: delegate.model[control.textRole] + width: delegate.width + height: delegate.height horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter } diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-dark.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-dark.9.png Binary files differnew file mode 100644 index 0000000000..4c752634f2 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-dark.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-dark@2x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..a0e7be1fb7 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-dark@3x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..01ca2e7b19 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-light.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-light.9.png Binary files differnew file mode 100644 index 0000000000..31f979f17a --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-light.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-light@2x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..ad45b8c100 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-light@2x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-light@3x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..c9414f36be --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-light@3x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-dark.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-dark.9.png Binary files differnew file mode 100644 index 0000000000..e08c253e2a --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-dark.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-dark@2x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..c203f8f6d7 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-dark@3x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..b651b14bf0 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-light.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-light.9.png Binary files differnew file mode 100644 index 0000000000..e86f90a095 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-light.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-light@2x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..a2553b828e --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-light@2x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-light@3x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..d832ded229 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-horizontal-pressed-light@3x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-dark.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-dark.9.png Binary files differnew file mode 100644 index 0000000000..8c966a7f87 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-dark.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-dark@2x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..2f65e40b76 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-dark@3x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..311e1c15bf --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-dark.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-dark.9.png Binary files differnew file mode 100644 index 0000000000..bfb6d3a6bf --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-dark.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-dark@2x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..50345d347c --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-dark@3x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..2afa7013bb --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-light.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-light.9.png Binary files differnew file mode 100644 index 0000000000..f80b82367e --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-light.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-light@2x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..dcba4c6220 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-light@2x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-light@3x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..5adde16f54 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-light@3x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-dark.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-dark.9.png Binary files differnew file mode 100644 index 0000000000..898cdf1173 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-dark.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-dark@2x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..492d319559 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-dark@3x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..d670e53d32 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-light.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-light.9.png Binary files differnew file mode 100644 index 0000000000..c3f9486440 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-light.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-light@2x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..fb63659ceb --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-light@2x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-light@3x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..4b2c1f8a21 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-last-pressed-light@3x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-light.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-light.9.png Binary files differnew file mode 100644 index 0000000000..67a28cead3 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-light.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-light@2x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..d4348cb61a --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-light@2x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-light@3x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..c00560ae56 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-light@3x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-dark.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-dark.9.png Binary files differnew file mode 100644 index 0000000000..0d99bbd993 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-dark.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-dark@2x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..7e7e00bfce --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-dark@3x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..64bd4860a0 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-light.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-light.9.png Binary files differnew file mode 100644 index 0000000000..094a28ef2f --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-light.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-light@2x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..bafcb6f623 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-light@2x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-light@3x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..8b17a33b57 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-delegate-vertical-pressed-light@3x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-separator-dark.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-separator-dark.9.png Binary files differnew file mode 100644 index 0000000000..5f00cd512d --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-separator-dark.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-separator-dark@2x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-separator-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..72365ea12b --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-separator-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-separator-dark@3x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-separator-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..3c6b87a691 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-separator-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-separator-light.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-separator-light.9.png Binary files differnew file mode 100644 index 0000000000..e701f3e7d5 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-separator-light.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-separator-light@2x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-separator-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..1e151c1bab --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-separator-light@2x.9.png diff --git a/src/quickcontrols/ios/images/dialogbuttonbox-separator-light@3x.9.png b/src/quickcontrols/ios/images/dialogbuttonbox-separator-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..f9391caa00 --- /dev/null +++ b/src/quickcontrols/ios/images/dialogbuttonbox-separator-light@3x.9.png diff --git a/src/quickcontrols/ios/images/selectionrectangle-handle-dark.png b/src/quickcontrols/ios/images/selectionrectangle-handle-dark.png Binary files differnew file mode 100644 index 0000000000..e6581ea767 --- /dev/null +++ b/src/quickcontrols/ios/images/selectionrectangle-handle-dark.png diff --git a/src/quickcontrols/ios/images/selectionrectangle-handle-dark@2x.png b/src/quickcontrols/ios/images/selectionrectangle-handle-dark@2x.png Binary files differnew file mode 100644 index 0000000000..42f2ef1a1a --- /dev/null +++ b/src/quickcontrols/ios/images/selectionrectangle-handle-dark@2x.png diff --git a/src/quickcontrols/ios/images/selectionrectangle-handle-dark@3x.png b/src/quickcontrols/ios/images/selectionrectangle-handle-dark@3x.png Binary files differnew file mode 100644 index 0000000000..01feffb4cf --- /dev/null +++ b/src/quickcontrols/ios/images/selectionrectangle-handle-dark@3x.png diff --git a/src/quickcontrols/ios/images/selectionrectangle-handle-light.png b/src/quickcontrols/ios/images/selectionrectangle-handle-light.png Binary files differnew file mode 100644 index 0000000000..f16b0ee6e8 --- /dev/null +++ b/src/quickcontrols/ios/images/selectionrectangle-handle-light.png diff --git a/src/quickcontrols/ios/images/selectionrectangle-handle-light@2x.png b/src/quickcontrols/ios/images/selectionrectangle-handle-light@2x.png Binary files differnew file mode 100644 index 0000000000..87907decba --- /dev/null +++ b/src/quickcontrols/ios/images/selectionrectangle-handle-light@2x.png diff --git a/src/quickcontrols/ios/images/selectionrectangle-handle-light@3x.png b/src/quickcontrols/ios/images/selectionrectangle-handle-light@3x.png Binary files differnew file mode 100644 index 0000000000..4379e4841a --- /dev/null +++ b/src/quickcontrols/ios/images/selectionrectangle-handle-light@3x.png diff --git a/src/quickcontrols/ios/images/tooltip-background-dark.9.png b/src/quickcontrols/ios/images/tooltip-background-dark.9.png Binary files differnew file mode 100644 index 0000000000..271a03eae6 --- /dev/null +++ b/src/quickcontrols/ios/images/tooltip-background-dark.9.png diff --git a/src/quickcontrols/ios/images/tooltip-background-dark@2x.9.png b/src/quickcontrols/ios/images/tooltip-background-dark@2x.9.png Binary files differnew file mode 100644 index 0000000000..a45eac9cd8 --- /dev/null +++ b/src/quickcontrols/ios/images/tooltip-background-dark@2x.9.png diff --git a/src/quickcontrols/ios/images/tooltip-background-dark@3x.9.png b/src/quickcontrols/ios/images/tooltip-background-dark@3x.9.png Binary files differnew file mode 100644 index 0000000000..4d0cd6a7f7 --- /dev/null +++ b/src/quickcontrols/ios/images/tooltip-background-dark@3x.9.png diff --git a/src/quickcontrols/ios/images/tooltip-background-light.9.png b/src/quickcontrols/ios/images/tooltip-background-light.9.png Binary files differnew file mode 100644 index 0000000000..76e2f9a4ea --- /dev/null +++ b/src/quickcontrols/ios/images/tooltip-background-light.9.png diff --git a/src/quickcontrols/ios/images/tooltip-background-light@2x.9.png b/src/quickcontrols/ios/images/tooltip-background-light@2x.9.png Binary files differnew file mode 100644 index 0000000000..2be7602f84 --- /dev/null +++ b/src/quickcontrols/ios/images/tooltip-background-light@2x.9.png diff --git a/src/quickcontrols/ios/images/tooltip-background-light@3x.9.png b/src/quickcontrols/ios/images/tooltip-background-light@3x.9.png Binary files differnew file mode 100644 index 0000000000..0563a85195 --- /dev/null +++ b/src/quickcontrols/ios/images/tooltip-background-light@3x.9.png diff --git a/src/quickcontrols/ios/impl/CMakeLists.txt b/src/quickcontrols/ios/impl/CMakeLists.txt index e298335bb1..a19704ad11 100644 --- a/src/quickcontrols/ios/impl/CMakeLists.txt +++ b/src/quickcontrols/ios/impl/CMakeLists.txt @@ -7,13 +7,13 @@ set(qml_files "CursorDelegate.qml" + "DialogButtonBoxDelegate.qml" ) -qt_internal_add_qml_module(qtquickcontrols2iosstyleimplplugin +qt_internal_add_qml_module(QuickControls2IOSStyleImpl 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 diff --git a/src/quickcontrols/ios/impl/DialogButtonBoxDelegate.qml b/src/quickcontrols/ios/impl/DialogButtonBoxDelegate.qml new file mode 100644 index 0000000000..2be1f9535e --- /dev/null +++ b/src/quickcontrols/ios/impl/DialogButtonBoxDelegate.qml @@ -0,0 +1,68 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-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 +import QtQuick.Controls.impl +import QtQuick.Controls.iOS.impl + +Button { + id: delegate + + implicitHeight: 44 + + readonly property var dialogButtonBox: DialogButtonBox.buttonBox + readonly property bool hasVerticalLayout: dialogButtonBox && (dialogButtonBox.count !== 2) + readonly property bool isLastItem: dialogButtonBox + && (dialogButtonBox.contentChildren) + && (dialogButtonBox.itemAt(count - 1) == delegate) + readonly property int count: dialogButtonBox ? dialogButtonBox.count : 0 + + flat: true + + contentItem: IconLabel { + readonly property var redColor: Qt.styleHints.colorScheme === Qt.Light ? "#ff3b30" : "#ff453a" + text: delegate.text + font: delegate.font + spacing: delegate.spacing + color: delegate.DialogButtonBox.buttonRole === DialogButtonBox.DestructiveRole + ? redColor + : (delegate.down ? delegate.palette.highlight : delegate.palette.button) + } + + background: Item { + // The assets below only support the typical iOS Dialog look with buttons + // positioned at the bottom and that fill the entire width of the parent. + // Don't draw a background if these conditions are not met + visible: delegate.dialogButtonBox + && delegate.dialogButtonBox.position === DialogButtonBox.Footer + && delegate.dialogButtonBox.alignment === 0 + implicitHeight: 44 + readonly property bool leftItem: !delegate.hasVerticalLayout && !delegate.isLastItem + readonly property bool rightItem: !delegate.hasVerticalLayout && !leftItem + readonly property bool flip: delegate.mirrored ? leftItem : rightItem + + NinePatchImage { + transform: [ + // flip + Translate { x: (!delegate.background.flip ? 0 : -width) }, + Scale { xScale: (!delegate.background.flip ? 1 : -1) } + ] + width: parent.width + height: parent.height + source: IOS.url + "dialogbuttonbox-delegate" + NinePatchImageSelector on source { + states: [ + {"horizontal": !delegate.hasVerticalLayout}, + {"vertical": delegate.hasVerticalLayout}, + {"last": delegate.hasVerticalLayout && delegate.isLastItem}, + {"pressed": delegate.down}, + {"light": Qt.styleHints.colorScheme === Qt.Light}, + {"dark": Qt.styleHints.colorScheme === Qt.Dark}, + ] + } + } + + + } +} diff --git a/src/quickcontrols/ios/impl/qquickiosstyle_p.h b/src/quickcontrols/ios/impl/qquickiosstyle_p.h index 03144751ad..4df7c2ac72 100644 --- a/src/quickcontrols/ios/impl/qquickiosstyle_p.h +++ b/src/quickcontrols/ios/impl/qquickiosstyle_p.h @@ -23,7 +23,7 @@ QT_BEGIN_NAMESPACE class QQuickIOSStyle : public QObject { Q_OBJECT - Q_PROPERTY(QUrl url READ url CONSTANT) + Q_PROPERTY(QUrl url READ url CONSTANT FINAL) QML_NAMED_ELEMENT(IOS) QML_SINGLETON QML_ADDED_IN_VERSION(6, 5) diff --git a/src/quickcontrols/ios/qquickiostheme.mm b/src/quickcontrols/ios/qquickiostheme.mm index 2ee9a63d3d..2f7c84ae7e 100644 --- a/src/quickcontrols/ios/qquickiostheme.mm +++ b/src/quickcontrols/ios/qquickiostheme.mm @@ -3,7 +3,9 @@ #include "qquickiostheme_p.h" +#if defined(Q_OS_APPLE) #include <QtGui/private/qcoregraphics_p.h> +#endif #ifdef Q_OS_IOS #include <UIKit/UIInterface.h> @@ -19,8 +21,9 @@ void QQuickIOSTheme::initialize(QQuickTheme *theme) QPalette systemPalette; QColor window; - QColor windowText; - QColor background; + QColor base; + QColor text; + QColor disabledText; QColor placeholderText; QColor button; QColor disabledButton; @@ -30,8 +33,9 @@ void QQuickIOSTheme::initialize(QQuickTheme *theme) 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.secondarySystemGroupedBackgroundColor.CGColor); + base = qt_mac_toQColor(UIColor.secondarySystemGroupedBackgroundColor.CGColor); + text = qt_mac_toQColor(UIColor.labelColor.CGColor); + disabledText = qt_mac_toQColor(UIColor.tertiaryLabelColor.CGColor); placeholderText = qt_mac_toQColor(UIColor.placeholderTextColor.CGColor); button = qt_mac_toQColor(UIColor.systemBlueColor.CGColor); disabledButton = qt_mac_toQColor(UIColor.tertiarySystemFillColor.CGColor); @@ -42,9 +46,10 @@ void QQuickIOSTheme::initialize(QQuickTheme *theme) #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(qRgba(28, 28, 30, 255)) : QColor(Qt::white); - placeholderText = isDarkSystemTheme ? QColor(qRgba(235, 235, 245, 77)) : QColor(qRgba(60, 60, 67, 77)); + base = isDarkSystemTheme ? QColor(qRgba(28, 28, 30, 255)) : QColor(Qt::white); + text = isDarkSystemTheme ? QColor(Qt::white) : QColor(Qt::black); + disabledText = isDarkSystemTheme ? QColor(qRgba(60, 60, 67, 76)) : QColor(qRgba(235, 235, 245, 76)); + placeholderText = isDarkSystemTheme ? QColor(qRgba(235, 235, 245, 76)) : 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); @@ -53,23 +58,23 @@ void QQuickIOSTheme::initialize(QQuickTheme *theme) darkGray = QColor(qRgba(142, 142, 147, 255)); #endif systemPalette.setColor(QPalette::Window, window); + systemPalette.setColor(QPalette::Base, base); - systemPalette.setColor(QPalette::Active, QPalette::WindowText, windowText); - systemPalette.setColor(QPalette::Disabled, QPalette::WindowText, darkGray); - - systemPalette.setColor(QPalette::Base, background); - + systemPalette.setColor(QPalette::WindowText, text); + systemPalette.setColor(QPalette::Disabled, QPalette::WindowText, disabledText); + systemPalette.setColor(QPalette::Text, text); + systemPalette.setColor(QPalette::Disabled, QPalette::Text, disabledText); 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); + systemPalette.setColor(QPalette::Disabled, QPalette::ButtonText, disabledText); + + systemPalette.setColor(QPalette::ToolTipText, text); + systemPalette.setColor(QPalette::Disabled, QPalette::ToolTipText, disabledText); - button.setAlphaF(0.8); - systemPalette.setColor(QPalette::Highlight, button); + systemPalette.setColor(QPalette::Highlight, button.lighter(115)); systemPalette.setColor(QPalette::Light, lightGray); systemPalette.setColor(QPalette::Mid, gray); @@ -79,4 +84,3 @@ void QQuickIOSTheme::initialize(QQuickTheme *theme) } QT_END_NAMESPACE - |