C++ / fmt (pull_request) Successful in 5s
JS/TS / fmt (pull_request) Successful in 17s
JS/TS / lint (pull_request) Successful in 16s
Python / fmt (pull_request) Successful in 31s
Python / lint (pull_request) Successful in 41s
Python / test (pull_request) Successful in 1m5s
Python / typecheck (pull_request) Successful in 1m15s
Rust / clippy (pull_request) Failing after 12m43s
Rust / fmt (pull_request) Failing after 12m57s
Rust / build (pull_request) Failing after 13m33s
Python / buildcheck (pull_request) Failing after 13m45s
C++ / clang-tidy (pull_request) Failing after 14m23s
C++ / build (pull_request) Failing after 14m25s
89 lines
2.3 KiB
QML
89 lines
2.3 KiB
QML
import QtQuick
|
|
import ZShell.Config
|
|
import qs.Services
|
|
|
|
CustomRect {
|
|
id: root
|
|
|
|
enum ButtonType {
|
|
Filled,
|
|
Tonal,
|
|
Text
|
|
}
|
|
|
|
property color activeColor
|
|
property color activeOnColor
|
|
property bool checked
|
|
property real checkedRadius: Tokens.rounding.medium
|
|
property real defaultRadius: Math.min(width, height) / 2
|
|
property color disabledColor: Qt.alpha(Colors.palette.m3onSurface, 0.1)
|
|
property color disabledOnColor: Qt.alpha(Colors.palette.m3onSurface, 0.38)
|
|
property bool fillWidth
|
|
property font font: ({
|
|
family: Config.appearance.font.family.sans,
|
|
pointSize: Tokens.font.size.larger,
|
|
bold: false
|
|
})
|
|
property real horizontalPadding: padding
|
|
readonly property alias hovered: stateLayer.containsMouse
|
|
required implicitHeight
|
|
required implicitWidth
|
|
property color inactiveColor
|
|
property color inactiveOnColor
|
|
property bool internalChecked
|
|
property bool isRound
|
|
property bool isToggle
|
|
readonly property color onColor: !enabled ? disabledOnColor : internalChecked ? activeOnColor : inactiveOnColor
|
|
property real padding
|
|
readonly property alias pressed: stateLayer.pressed
|
|
property real pressedRadius: Tokens.rounding.smallest
|
|
readonly property alias radiusAnim: radiusAnim
|
|
property bool radiusMorph: true
|
|
property alias shapeMorph: stateLayer.shapeMorph
|
|
property real shapeMorphExpansion: shapeMorph && pressed ? 24 : 0
|
|
readonly property alias stateLayer: stateLayer
|
|
property int type: ButtonBase.Filled
|
|
property real verticalPadding: padding
|
|
|
|
signal clicked
|
|
|
|
color: type === ButtonBase.Text ? "transparent" : !enabled ? disabledColor : internalChecked ? activeColor : inactiveColor
|
|
radius: {
|
|
if (radiusMorph && pressed)
|
|
return pressedRadius;
|
|
if (internalChecked)
|
|
return checkedRadius;
|
|
if (isRound)
|
|
return (height || implicitHeight) / 2 * Math.min(1, Tokens.rounding.scale);
|
|
return defaultRadius;
|
|
}
|
|
|
|
Behavior on radius {
|
|
Anim {
|
|
id: radiusAnim
|
|
|
|
type: Anim.DefaultEffects
|
|
}
|
|
}
|
|
Behavior on shapeMorphExpansion {
|
|
Anim {
|
|
type: Anim.FastSpatial
|
|
}
|
|
}
|
|
|
|
onCheckedChanged: internalChecked = checked
|
|
|
|
StateLayer {
|
|
id: stateLayer
|
|
|
|
color: root.internalChecked ? root.activeOnColor : root.inactiveOnColor
|
|
enabled: root.enabled
|
|
|
|
onClicked: {
|
|
if (root.isToggle)
|
|
root.internalChecked = !root.internalChecked;
|
|
root.clicked();
|
|
}
|
|
}
|
|
}
|