Warning, /utilities/kalk/src/qml/NumberButton.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 * SPDX-FileCopyrightText: 2020-2021 Han Young <hanyoung@protonmail.com>
0003 * SPDX-FileCopyrightText: 2014 Aaron Seigo <aseigo@kde.org>
0004 * SPDX-FileCopyrightText: 2014 Marco Martin <mart@kde.org>
0005 * SPDX-FileCopyrightText: 2020 Devin Lin <espidev@gmail.com>
0006 *
0007 * SPDX-License-Identifier: GPL-3.0-or-later
0008 */
0009
0010 import QtQuick 2.15
0011 import QtQuick.Layouts 1.1
0012 import Qt5Compat.GraphicalEffects
0013 import QtQuick.Controls 2.2 as Controls
0014
0015 import org.kde.kirigami 2.15 as Kirigami
0016
0017 Item {
0018 id: root
0019 Layout.fillWidth: true
0020 Layout.fillHeight: true
0021
0022 signal clicked(string text)
0023 signal longClicked()
0024
0025 property string text
0026 property string display: text
0027 property bool special: false
0028 property bool down: false
0029
0030 Kirigami.Theme.colorSet: Kirigami.Theme.View
0031 Kirigami.Theme.inherit: false
0032
0033 property color baseColor: Kirigami.Theme.highlightColor
0034 property color buttonColor: Kirigami.Theme.backgroundColor
0035 property color buttonHoveredColor: Kirigami.Theme.alternateBackgroundColor
0036 property color buttonPressedColor: Qt.rgba(baseColor.r, baseColor.g, baseColor.b, 0.3)
0037 property color buttonBorderColor: Qt.rgba(buttonTextColor.r, buttonTextColor.g, buttonTextColor.b, 0.2)
0038 property color buttonBorderHoveredColor: buttonBorderColor
0039 property color buttonBorderPressedColor: Qt.rgba(baseColor.r, baseColor.g, baseColor.b, 0.7)
0040 property color buttonTextColor: Kirigami.Theme.textColor
0041
0042 // vibration
0043 // TODO bring back
0044 //HapticsEffect {
0045 // id: vibrate
0046 // attackIntensity: 0.0
0047 // attackTime: 0
0048 // fadeTime: 0
0049 // fadeIntensity: 0.0
0050 // intensity: 0.5
0051 // duration: 10
0052 //}
0053
0054 Controls.AbstractButton {
0055 id: button
0056 anchors.fill: parent
0057 focusPolicy: Qt.NoFocus
0058
0059 background: Rectangle {
0060 radius: Kirigami.Units.smallSpacing
0061 color: Kirigami.Theme.backgroundColor
0062
0063 // actual background fill
0064 Rectangle {
0065 anchors.fill: parent
0066 radius: Kirigami.Units.smallSpacing
0067 color: button.pressed || root.down ? root.buttonPressedColor :
0068 (hoverHandler.hovered && !Kirigami.Settings.isMobile ? root.buttonHoveredColor : root.buttonColor)
0069 border.color: button.pressed ? root.buttonBorderPressedColor :
0070 (hoverHandler.hovered && !Kirigami.Settings.isMobile ? root.buttonBorderHoveredColor : root.buttonBorderColor)
0071
0072 Behavior on color { ColorAnimation { duration: 50 } }
0073 Behavior on border.color { ColorAnimation { duration: 50 } }
0074 }
0075
0076 // small box shadow
0077 Rectangle {
0078 anchors.top: parent.top
0079 anchors.topMargin: 1
0080 anchors.left: parent.left
0081 anchors.right: parent.right
0082 height: parent.height
0083 z: -1
0084 color: Qt.rgba(0, 0, 0, 0.05)
0085 radius: Kirigami.Units.smallSpacing
0086 }
0087 }
0088
0089 contentItem: Item {
0090 anchors.centerIn: parent
0091
0092 Controls.Label {
0093 id: label
0094 anchors.centerIn: parent
0095 visible: root.display !== "⌫" // not backspace icon
0096
0097 font.pointSize: Math.max(Math.min(Math.round(parent.height * 0.27), Math.round(parent.width * 0.27)), 10)
0098 font.weight: Font.DemiBold
0099 text: root.display
0100 opacity: special ? 0.4 : 0.9
0101 horizontalAlignment: Text.AlignHCenter
0102 color: root.buttonTextColor
0103 }
0104 Kirigami.Icon {
0105 visible: root.display === "⌫" // backspace icon
0106 source: "edit-clear"
0107 anchors.centerIn: parent
0108 opacity: special ? 0.6 : 1.0
0109 implicitWidth: Math.round(parent.height * 0.3)
0110 implicitHeight: width
0111 }
0112 }
0113
0114 onPressedChanged: {
0115 if (pressed) {
0116 //vibrate.start();
0117 }
0118 }
0119
0120 onClicked: root.clicked(root.text)
0121 onPressAndHold: root.longClicked()
0122
0123 HoverHandler {
0124 id: hoverHandler
0125 acceptedDevices: PointerDevice.Mouse | PointerDevice.Stylus
0126 }
0127 }
0128 }