Warning, /network/tokodon/src/content/ui/StatusDelegate/InteractionButton.qml is written in an unsupported language. File is not indexed.

0001 // SPDX-FileCopyrightText: 2022 Joshua Goins <josh@redstrate.com>
0002 // SPDX-License-Identifier: GPL-3.0-or-later
0003 
0004 import QtQuick
0005 import QtQuick.Layouts
0006 import org.kde.kirigami 2 as Kirigami
0007 import QtQuick.Controls 2 as QQC2
0008 
0009 // A specialized button used for the "Favorite", "Boost", and etc buttons on a status
0010 QQC2.AbstractButton {
0011     id: control
0012 
0013     required property string iconName
0014     property string interactedIconName
0015 
0016     property bool interactable: true
0017     property bool interacted: false
0018     property color interactionColor
0019 
0020     required property string tooltip
0021 
0022     hoverEnabled: true
0023     activeFocusOnTab: interactable
0024 
0025     QQC2.ToolTip.text: control.tooltip
0026     QQC2.ToolTip.visible: hovered && QQC2.ToolTip.text !== ""
0027     QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay
0028 
0029     Accessible.name: tooltip
0030 
0031     topPadding: Kirigami.Units.smallSpacing
0032     bottomPadding: Kirigami.Units.smallSpacing
0033     leftPadding: Kirigami.Units.smallSpacing
0034     rightPadding: Kirigami.Units.smallSpacing
0035 
0036     contentItem: RowLayout {
0037         spacing: Kirigami.Units.smallSpacing
0038 
0039         Kirigami.Icon {
0040             id: icon
0041 
0042             Layout.preferredWidth: Kirigami.Units.iconSizes.smallMedium
0043             Layout.preferredHeight: Kirigami.Units.iconSizes.smallMedium
0044             Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
0045 
0046             source: control.interacted ? control.interactedIconName : control.iconName
0047 
0048             isMask: true
0049             color: (interactable && (control.hovered || parent.activeFocus)) ? Kirigami.Theme.focusColor : (control.interacted ? control.interactionColor : Kirigami.Theme.textColor)
0050         }
0051 
0052         QQC2.Label {
0053             id: label
0054 
0055             text: control.text
0056             verticalAlignment: Text.AlignVCenter
0057             visible: control.text
0058             color: Kirigami.Theme.disabledTextColor
0059         }
0060     }
0061 
0062     background: Rectangle {
0063         color: control.hovered && control.interactable ? Kirigami.ColorUtils.tintWithAlpha(Kirigami.Theme.backgroundColor, Kirigami.Theme.textColor, 0.1) : "transparent"
0064         radius: Kirigami.Units.mediumSpacing
0065 
0066         Rectangle {
0067             visible: control.visualFocus
0068             radius: parent.radius
0069             color: "transparent"
0070             anchors {
0071                 fill: parent
0072                 margins: -2
0073             }
0074             border {
0075                 width: 2
0076                 color: Kirigami.Theme.focusColor
0077             }
0078         }
0079     }
0080 }