You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.4 KiB
83 lines
2.4 KiB
/* |
|
* SPDX-FileCopyrightText: 2021 Devin Lin <espidev@gmail.com> |
|
* |
|
* SPDX-License-Identifier: LGPL-2.0-or-later |
|
*/ |
|
|
|
import QtQuick 2.15 |
|
import QtQuick.Controls 2.15 |
|
import QtQuick.Layouts 1.15 |
|
import QtQuick.Window 2.2 |
|
import QtGraphicalEffects 1.12 |
|
import org.kde.kirigami 2.18 as Kirigami |
|
|
|
AbstractButton { |
|
id: root |
|
|
|
property alias corners: background.corners |
|
|
|
property bool verticalSeparator: false |
|
property bool horizontalSeparator: false |
|
|
|
background: Kirigami.ShadowedRectangle { |
|
id: background |
|
Kirigami.Theme.colorSet: Kirigami.Theme.Button |
|
Kirigami.Theme.inherit: false |
|
color: { |
|
if (root.down) { |
|
let avg = (Kirigami.Theme.backgroundColor.r + Kirigami.Theme.backgroundColor.g + Kirigami.Theme.backgroundColor.b) / 3; |
|
// sample down |
|
avg = Math.max(0, (avg - 0.8) * 5); |
|
return Qt.darker(Kirigami.Theme.backgroundColor, 1.1 + 0.4 * (1 - avg)); |
|
} else if (hoverHandler.hovered) { |
|
return Qt.darker(Kirigami.Theme.backgroundColor, 1.05) |
|
} else { |
|
return Kirigami.Theme.backgroundColor |
|
} |
|
} |
|
|
|
Kirigami.Separator { |
|
anchors.left: parent.left |
|
anchors.top: parent.top |
|
anchors.bottom: parent.bottom |
|
visible: root.verticalSeparator |
|
} |
|
Kirigami.Separator { |
|
anchors.left: parent.left |
|
anchors.right: parent.right |
|
anchors.top: parent.top |
|
visible: root.horizontalSeparator |
|
} |
|
} |
|
|
|
leftPadding: Kirigami.Units.largeSpacing |
|
rightPadding: Kirigami.Units.largeSpacing |
|
topPadding: Kirigami.Units.largeSpacing |
|
bottomPadding: Kirigami.Units.largeSpacing |
|
|
|
contentItem: Item { |
|
implicitHeight: row.height + Kirigami.Units.smallSpacing |
|
implicitWidth: row.implicitWidth |
|
RowLayout { |
|
id: row |
|
anchors.centerIn: parent |
|
spacing: 0 |
|
|
|
Kirigami.Icon { |
|
Layout.preferredHeight: label.height |
|
Layout.preferredWidth: height |
|
Layout.rightMargin: Kirigami.Units.smallSpacing |
|
visible: root.icon.name |
|
source: root.icon.name |
|
} |
|
Label { |
|
id: label |
|
text: root.text |
|
} |
|
} |
|
|
|
HoverHandler { |
|
id: hoverHandler |
|
} |
|
} |
|
}
|
|
|