diff options
author | Richard Moe Gustavsen <richard.gustavsen@qt.io> | 2020-09-24 14:22:57 +0200 |
---|---|---|
committer | Richard Moe Gustavsen <richard.gustavsen@qt.io> | 2020-09-29 15:31:01 +0200 |
commit | fbc629892461662a20e12c38f182fddb1fcc3a81 (patch) | |
tree | 35acb8e52ee4bed5301b93e4ee30f4df2ee48b40 /src/imports/controls/macos | |
parent | 5b711c1cb719d1147791ce23c43133a29d10a807 (diff) |
NativeStyle: add focus frame to the macOS style
This patch will add a focus frame to the macOS style.
We use one focus frame item that we move around according
to changes to the focus object.
It's normally the background delegate's responsibility to
draw a focus frame, so we take care to only draw the
native focus frame for controls with default delegates.
(to be consistent with the other styles)
Change-Id: Iaa7202675c1aad2fc19682563ac1afb6e686c105
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/imports/controls/macos')
-rw-r--r-- | src/imports/controls/macos/Button.qml | 2 | ||||
-rw-r--r-- | src/imports/controls/macos/CheckBox.qml | 2 | ||||
-rw-r--r-- | src/imports/controls/macos/ComboBox.qml | 24 | ||||
-rw-r--r-- | src/imports/controls/macos/RadioButton.qml | 2 | ||||
-rw-r--r-- | src/imports/controls/macos/Slider.qml | 2 | ||||
-rw-r--r-- | src/imports/controls/macos/SpinBox.qml | 4 | ||||
-rw-r--r-- | src/imports/controls/macos/TextArea.qml | 17 | ||||
-rw-r--r-- | src/imports/controls/macos/TextField.qml | 2 |
8 files changed, 55 insertions, 0 deletions
diff --git a/src/imports/controls/macos/Button.qml b/src/imports/controls/macos/Button.qml index e3fe856d..58658c52 100644 --- a/src/imports/controls/macos/Button.qml +++ b/src/imports/controls/macos/Button.qml @@ -38,4 +38,6 @@ import QtQuick import QtQuick.NativeStyle as NativeStyle NativeStyle.DefaultButton { + id: control + readonly property Item __focusFrameTarget: control } diff --git a/src/imports/controls/macos/CheckBox.qml b/src/imports/controls/macos/CheckBox.qml index d1a56fee..23ad4426 100644 --- a/src/imports/controls/macos/CheckBox.qml +++ b/src/imports/controls/macos/CheckBox.qml @@ -38,4 +38,6 @@ import QtQuick import QtQuick.NativeStyle as NativeStyle NativeStyle.DefaultCheckBox { + readonly property Item __focusFrameTarget: indicator + readonly property Item __focusFrameStyleItem: indicator } diff --git a/src/imports/controls/macos/ComboBox.qml b/src/imports/controls/macos/ComboBox.qml index 3891594b..53baabf8 100644 --- a/src/imports/controls/macos/ComboBox.qml +++ b/src/imports/controls/macos/ComboBox.qml @@ -35,7 +35,31 @@ ****************************************************************************/ import QtQuick +import QtQuick.Templates as T import QtQuick.NativeStyle as NativeStyle NativeStyle.DefaultComboBox { + id: control + readonly property Item __focusFrameTarget: control + + contentItem: T.TextField { + implicitWidth: contentWidth + implicitHeight: contentHeight + text: control.editable ? control.editText : control.displayText + + enabled: control.editable + autoScroll: control.editable + readOnly: control.down + inputMethodHints: control.inputMethodHints + validator: control.validator + selectByMouse: control.selectTextByMouse + + font: control.font + color: control.editable ? control.palette.text : control.palette.buttonText + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + verticalAlignment: Text.AlignVCenter + + readonly property Item __focusFrameControl: control + } } diff --git a/src/imports/controls/macos/RadioButton.qml b/src/imports/controls/macos/RadioButton.qml index 82b85698..c9cdf985 100644 --- a/src/imports/controls/macos/RadioButton.qml +++ b/src/imports/controls/macos/RadioButton.qml @@ -38,4 +38,6 @@ import QtQuick import QtQuick.NativeStyle as NativeStyle NativeStyle.DefaultRadioButton { + readonly property Item __focusFrameTarget: indicator + readonly property Item __focusFrameStyleItem: indicator } diff --git a/src/imports/controls/macos/Slider.qml b/src/imports/controls/macos/Slider.qml index ab72fcaa..e8e0e036 100644 --- a/src/imports/controls/macos/Slider.qml +++ b/src/imports/controls/macos/Slider.qml @@ -38,4 +38,6 @@ import QtQuick import QtQuick.NativeStyle as NativeStyle NativeStyle.DefaultSlider { + readonly property Item __focusFrameTarget: handle + readonly property Item __focusFrameStyleItem: handle } diff --git a/src/imports/controls/macos/SpinBox.qml b/src/imports/controls/macos/SpinBox.qml index 1eb7fa05..5928d37e 100644 --- a/src/imports/controls/macos/SpinBox.qml +++ b/src/imports/controls/macos/SpinBox.qml @@ -62,6 +62,8 @@ T.SpinBox { rightPadding: (__nativeBackground ? background.contentPadding.right : 0) + rightInset bottomPadding: __nativeBackground ? background.contentPadding.bottom: 0 + readonly property Item __focusFrameTarget: contentItem + validator: IntValidator { locale: control.locale.name bottom: Math.min(control.from, control.to) @@ -85,6 +87,8 @@ T.SpinBox { readOnly: !control.editable validator: control.validator inputMethodHints: control.inputMethodHints + + readonly property Item __focusFrameControl: control } NativeStyle.SpinBox { diff --git a/src/imports/controls/macos/TextArea.qml b/src/imports/controls/macos/TextArea.qml index f6b88303..98884bda 100644 --- a/src/imports/controls/macos/TextArea.qml +++ b/src/imports/controls/macos/TextArea.qml @@ -38,4 +38,21 @@ import QtQuick import QtQuick.NativeStyle as NativeStyle NativeStyle.DefaultTextArea { + id: control + + // If you place a TextArea inside a Frame or Flickable (/ScrollView), and + // the TextArea is the only child of the content item, we place the focus + // frame around the Flickable/Frame instead. + readonly property Item __focusFrameTarget: + (parent.parent instanceof Frame || parent.parent instanceof Flickable) + && parent.children.length === 1 + ? parent.parent : control + + background: Rectangle { + color: control.palette.light + // Since this delegate is a plain Rectangle, we need to tag it to know + // that it's still the default one, and not some custom item set by the + // application. Only in the former case do we wan't to show a focus frame. + readonly property bool __isDefaultDelegate: true + } } diff --git a/src/imports/controls/macos/TextField.qml b/src/imports/controls/macos/TextField.qml index bc0e2cb7..f3a748f6 100644 --- a/src/imports/controls/macos/TextField.qml +++ b/src/imports/controls/macos/TextField.qml @@ -38,4 +38,6 @@ import QtQuick import QtQuick.NativeStyle as NativeStyle NativeStyle.DefaultTextField { + id: control + readonly property Item __focusFrameTarget: control } |