Warning, /frameworks/qqc2-desktop-style/org.kde.desktop/RoundButton.qml is written in an unsupported language. File is not indexed.

0001 /*
0002     SPDX-FileCopyrightText: 2018 Marco Martin <mart@kde.org>
0003     SPDX-FileCopyrightText: 2017 The Qt Company Ltd.
0004 
0005     SPDX-License-Identifier: LGPL-3.0-only OR GPL-2.0-or-later
0006 */
0007 
0008 import QtQuick
0009 import QtQuick.Layouts
0010 import QtQuick.Templates as T
0011 import QtQuick.Controls as Controls
0012 import org.kde.kirigami as Kirigami
0013 import org.kde.qqc2desktopstyle.private as StylePrivate
0014 
0015 T.RoundButton {
0016     id: controlRoot
0017 
0018     Kirigami.Theme.colorSet: !flat && (controlRoot.activeFocus || controlRoot.highlighted) ? Kirigami.Theme.Selection : Kirigami.Theme.Button
0019     Kirigami.Theme.inherit: flat && !down && !checked
0020 
0021     implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
0022                             implicitContentWidth + leftPadding + rightPadding)
0023     implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
0024                              implicitContentHeight + topPadding + bottomPadding,
0025                              implicitIndicatorHeight + topPadding + bottomPadding)
0026 
0027     baselineOffset: contentItem.y + contentItem.baselineOffset
0028 
0029     transform: Translate {
0030         x: controlRoot.down || controlRoot.checked ? 1 : 0
0031         y: controlRoot.down || controlRoot.checked ? 1 : 0
0032     }
0033 
0034     icon.width: Kirigami.Units.iconSizes.smallMedium
0035     icon.height: Kirigami.Units.iconSizes.smallMedium
0036 
0037     padding: 6 // Matches the button margins of Breeze, Fusion, Oxygen and QCommonStyle
0038     spacing: 4 // Matches the default/hardcoded icon+label spacing of Qt Widgets
0039 
0040     contentItem: GridLayout {
0041         rowSpacing: controlRoot.spacing
0042         columnSpacing: controlRoot.spacing
0043         flow: iconContent.visible && labelContent.visible && controlRoot.display === T.AbstractButton.TextUnderIcon ? GridLayout.TopToBottom : GridLayout.LeftToRight
0044         Kirigami.Icon {
0045             id: iconContent
0046             Layout.alignment: {
0047                 if (iconContent.visible && labelContent.visible) {
0048                     if (controlRoot.display === T.AbstractButton.TextBesideIcon) {
0049                         return Qt.AlignRight | Qt.AlignVCenter
0050                     } else if (controlRoot.display === T.AbstractButton.TextUnderIcon) {
0051                         return Qt.AlignHCenter | Qt.AlignBottom
0052                     }
0053                 }
0054                 return Qt.AlignCenter
0055             }
0056             color: controlRoot.icon.color // defaults to Qt::transparent
0057             implicitWidth: controlRoot.icon.width
0058             implicitHeight: controlRoot.icon.height
0059             visible: source.toString().length > 0 && controlRoot.display !== T.AbstractButton.TextOnly
0060             source: controlRoot.icon ? (controlRoot.icon.name || controlRoot.icon.source) : ""
0061         }
0062         Controls.Label {
0063             id: labelContent
0064             Layout.alignment: {
0065                 if (iconContent.visible && labelContent.visible) {
0066                     if (controlRoot.display === T.AbstractButton.TextBesideIcon) {
0067                         return Qt.AlignLeft | Qt.AlignVCenter
0068                     } else if (controlRoot.display === T.AbstractButton.TextUnderIcon) {
0069                         return Qt.AlignHCenter | Qt.AlignTop
0070                     }
0071                 }
0072                 return Qt.AlignCenter
0073             }
0074             text: controlRoot.text
0075             visible: text.length > 0 && controlRoot.display !== T.AbstractButton.IconOnly
0076         }
0077     }
0078     background: Rectangle {
0079         property color borderColor: Kirigami.ColorUtils.linearInterpolation(controlRoot.palette.button, controlRoot.palette.buttonText, Kirigami.Theme.frameContrast)
0080 
0081         visible: !controlRoot.flat || controlRoot.hovered || controlRoot.activeFocus || controlRoot.highlighted || controlRoot.checked || controlRoot.down
0082 
0083         implicitWidth: Kirigami.Units.gridUnit + 6 + 6
0084         implicitHeight: Kirigami.Units.gridUnit + 6 + 6
0085         radius: controlRoot.radius
0086         color: {
0087             if (controlRoot.checked || controlRoot.down) {
0088                 return Qt.tint(Kirigami.Theme.textColor, Qt.alpha(borderColor, 0.8))
0089             } else if (controlRoot.flat) {
0090                 return Qt.alpha(Kirigami.Theme.backgroundColor, 0)
0091             } else {
0092                 return Kirigami.Theme.backgroundColor
0093             }
0094         }
0095 
0096         border.color: controlRoot.flat ? Kirigami.Theme.highlightColor : borderColor
0097         border.width: controlRoot.flat && !(controlRoot.hovered || controlRoot.activeFocus || controlRoot.highlighted) ? 0 : 1
0098 
0099         Rectangle {
0100             id: gradientRect
0101             radius: controlRoot.radius
0102             anchors.fill: parent
0103             visible: !controlRoot.flat
0104             gradient: Gradient {
0105                 GradientStop { position: 0.0; color: Qt.rgba(1, 1, 1, 0.13) }
0106                 GradientStop { position: 1.0; color: Qt.rgba(0, 0, 0, 0.03) }
0107             }
0108         }
0109         Rectangle {
0110             id: shadowRect
0111             z: -1
0112             radius: controlRoot.radius
0113             visible: !controlRoot.down && !controlRoot.checked && !controlRoot.flat
0114             anchors {
0115                 topMargin: 1
0116                 bottomMargin: -1
0117                 fill: parent
0118             }
0119             color: Qt.rgba(0, 0, 0, 0.15)
0120         }
0121     }
0122 }