Commit b0bdc570 authored by Gabriel de Dietrich's avatar Gabriel de Dietrich Committed by J-P Nurmi
Browse files

SwitchStyle: Make it work with pre-Holo Android


The Switch control was introduced in Android 4.0 together with
the Holo UI. Therefore, there's no way we can extract assets
on devices running earlier versions. In that case, we fall back
to the Base style Switch visuals.

Change-Id: I48d8a5cd94999cd5687fab62c8d16beb4fc53b5c
Reviewed-by: default avatarJ-P Nurmi <jpnurmi@digia.com>
parent ba0febc4
No related merge requests found
Showing with 68 additions and 61 deletions
...@@ -41,88 +41,95 @@ import QtQuick 2.4 ...@@ -41,88 +41,95 @@ import QtQuick 2.4
import QtQuick.Window 2.2 import QtQuick.Window 2.2
import QtQuick.Controls 1.2 import QtQuick.Controls 1.2
import QtQuick.Controls.Private 1.0 import QtQuick.Controls.Private 1.0
import QtQuick.Controls.Styles 1.2
import QtQuick.Controls.Styles.Android 1.0 import QtQuick.Controls.Styles.Android 1.0
import "drawables" import "drawables"
Style { SwitchStyle {
property Switch control: __control property Switch control: __control
readonly property bool hasHoloSwitch: !!AndroidStyle.styleDef.switchStyle
property Component panel: Item { Component.onCompleted: if (hasHoloSwitch) panel = holoPanel
id: panel
// TODO: API level < 14 Component {
readonly property var styleDef: AndroidStyle.styleDef.switchStyle id: holoPanel
implicitWidth: Math.max(styleDef.Switch_switchMinWidth, Math.max(track.implicitWidth, 2 * thumb.implicitWidth))
implicitHeight: Math.max(track.implicitHeight, thumb.implicitHeight)
property real min: track.padding.left
property real max: track.width - thumb.width - track.padding.left
property var __handle: thumb
DrawableLoader {
id: track
anchors.fill: parent
pressed: control.pressed
checked: control.checked
focused: control.activeFocus
window_focused: control.window && control.window.active
styleDef: panel.styleDef.Switch_track
}
Item { Item {
id: thumb id: panel
x: control.checked ? max : min
FontMetrics {
id: metrics
font: label.font
}
readonly property real maxTextWidth: Math.max(metrics.boundingRect(panel.styleDef.Switch_textOn).width, readonly property var styleDef: AndroidStyle.styleDef.switchStyle
metrics.boundingRect(panel.styleDef.Switch_textOff).width)
implicitWidth: Math.max(loader.implicitWidth, maxTextWidth + 2 * panel.styleDef.Switch_thumbTextPadding) implicitWidth: Math.max(styleDef.Switch_switchMinWidth, Math.max(track.implicitWidth, 2 * thumb.implicitWidth))
implicitHeight: Math.max(loader.implicitHeight, metrics.height) implicitHeight: Math.max(track.implicitHeight, thumb.implicitHeight)
anchors.top: parent.top property real min: track.padding.left
anchors.bottom: parent.bottom property real max: track.width - thumb.width - track.padding.left
property var __handle: thumb
Behavior on x {
id: behavior
enabled: thumb.status === Loader.Ready
NumberAnimation {
duration: 150
easing.type: Easing.OutCubic
}
}
DrawableLoader { DrawableLoader {
id: loader id: track
anchors.left: parent.left anchors.fill: parent
anchors.right: parent.right
anchors.leftMargin: -padding.left
anchors.rightMargin: -padding.right
anchors.verticalCenter: parent.verticalCenter
pressed: control.pressed pressed: control.pressed
checked: control.checked checked: control.checked
focused: control.activeFocus focused: control.activeFocus
window_focused: control.window && control.window.active window_focused: control.window && control.window.active
styleDef: panel.styleDef.Switch_thumb styleDef: panel.styleDef.Switch_track
} }
LabelStyle { Item {
id: label id: thumb
text: control.checked ? panel.styleDef.Switch_textOn : panel.styleDef.Switch_textOff
pressed: control.pressed x: control.checked ? max : min
focused: control.activeFocus
selected: control.checked
window_focused: control.window && control.window.active
styleDef: panel.styleDef.Switch_switchTextAppearance
anchors.fill: parent FontMetrics {
id: metrics
font: label.font
}
readonly property real maxTextWidth: Math.max(metrics.boundingRect(panel.styleDef.Switch_textOn).width,
metrics.boundingRect(panel.styleDef.Switch_textOff).width)
implicitWidth: Math.max(loader.implicitWidth, maxTextWidth + 2 * panel.styleDef.Switch_thumbTextPadding)
implicitHeight: Math.max(loader.implicitHeight, metrics.height)
anchors.top: parent.top
anchors.bottom: parent.bottom
Behavior on x {
id: behavior
enabled: thumb.status === Loader.Ready
NumberAnimation {
duration: 150
easing.type: Easing.OutCubic
}
}
DrawableLoader {
id: loader
anchors.left: parent.left
anchors.right: parent.right
anchors.leftMargin: -padding.left
anchors.rightMargin: -padding.right
anchors.verticalCenter: parent.verticalCenter
pressed: control.pressed
checked: control.checked
focused: control.activeFocus
window_focused: control.window && control.window.active
styleDef: panel.styleDef.Switch_thumb
}
LabelStyle {
id: label
text: control.checked ? panel.styleDef.Switch_textOn : panel.styleDef.Switch_textOff
pressed: control.pressed
focused: control.activeFocus
selected: control.checked
window_focused: control.window && control.window.active
styleDef: panel.styleDef.Switch_switchTextAppearance
anchors.fill: parent
}
} }
} }
} }
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment