Warning, /utilities/kirogi/src/ui/components/PillBox.qml is written in an unsupported language. File is not indexed.

0001 /*
0002  * Copyright 2019 Eike Hein <hein@kde.org>
0003  *
0004  * This program is free software; you can redistribute it and/or
0005  * modify it under the terms of the GNU General Public License as
0006  * published by the Free Software Foundation; either version 2 of
0007  * the License or (at your option) version 3 or any later version
0008  * accepted by the membership of KDE e.V. (or its successor approved
0009  * by the membership of KDE e.V.), which shall act as a proxy
0010  * defined in Section 14 of version 3 of the license.
0011  *
0012  * This program is distributed in the hope that it will be useful,
0013  * but WITHOUT ANY WARRANTY; without even the implied warranty of
0014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0015  * GNU General Public License for more details.
0016  *
0017  * You should have received a copy of the GNU General Public License
0018  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
0019  */
0020 
0021 import QtQuick 2.12
0022 import QtGraphicalEffects 1.12
0023 import QtQuick.Window 2.12
0024 
0025 import org.kde.kirigami 2.6 as Kirigami
0026 
0027 Item {
0028     id: pillBox
0029 
0030     LayoutMirroring.enabled: false
0031     LayoutMirroring.childrenInherit: true
0032 
0033     property Item background: null
0034     property var backgroundColor: "black"
0035     property real backgroundOpacity: 0.31
0036     property var borderColor: "white"
0037     property var borderWidth: 2
0038     property var borderRadius: height / 2
0039 
0040     Item {
0041         id: pillShapeMask
0042 
0043         visible: false
0044 
0045         anchors.fill: parent
0046 
0047         Rectangle {
0048             visible: true
0049 
0050             anchors.left: parent.left
0051 
0052             width: parent.height
0053             height: width
0054 
0055             radius: borderRadius
0056 
0057             color: "black"
0058         }
0059 
0060         Rectangle {
0061             visible: true
0062 
0063             anchors.right: parent.right
0064 
0065             width: parent.height
0066             height: width
0067 
0068             radius: borderRadius
0069 
0070             color: "black"
0071         }
0072 
0073         Rectangle {
0074             visible: true
0075 
0076             anchors.left: parent.left
0077             anchors.leftMargin: parent.height / 2
0078             anchors.right: parent.right
0079             anchors.rightMargin: parent.height / 2
0080 
0081             height: parent.height
0082 
0083             color: "black"
0084         }
0085     }
0086 
0087     BlurredBackground {
0088         sourceItem: background
0089         mask: pillShapeMask
0090     }
0091 
0092     Rectangle {
0093         id: plate
0094 
0095         anchors.fill: parent
0096 
0097         color: backgroundColor
0098         opacity: backgroundOpacity
0099 
0100         layer.enabled: true
0101         layer.effect: OpacityMask {
0102             anchors.fill: parent
0103             maskSource: pillShapeMask
0104         }
0105     }
0106 
0107     Item {
0108         id: leftBorderMask
0109 
0110         visible: false
0111 
0112         anchors.fill: leftBorder
0113 
0114         Rectangle {
0115             visible: true
0116 
0117             anchors.fill: parent
0118             anchors.rightMargin: leftBorder.width - leftBorder.radius
0119 
0120             color: "black"
0121         }
0122     }
0123 
0124     Rectangle {
0125         id: leftBorder
0126 
0127         anchors.left: parent.left
0128 
0129         width: parent.height
0130         height: width
0131 
0132         radius: borderRadius
0133 
0134         color: "transparent"
0135         opacity: 0.69
0136 
0137         border.width: borderWidth
0138         border.color: borderColor
0139 
0140         layer.enabled: true
0141         layer.effect: OpacityMask {
0142             anchors.fill: leftBorder
0143 
0144             maskSource: leftBorderMask
0145         }
0146     }
0147 
0148     Item {
0149         id: rightBorderMask
0150 
0151         visible: false
0152 
0153         anchors.fill: rightBorder
0154 
0155         Rectangle {
0156             visible: true
0157 
0158             anchors.fill: parent
0159             anchors.leftMargin: rightBorder.width - rightBorder.radius
0160 
0161             color: "black"
0162         }
0163     }
0164 
0165     Rectangle {
0166         id: rightBorder
0167 
0168         anchors.right: parent.right
0169 
0170         width: parent.height
0171         height: width
0172 
0173         radius: borderRadius
0174 
0175         color: "transparent"
0176         opacity: leftBorder.opacity
0177         border.width: borderWidth
0178         border.color: borderColor
0179 
0180         layer.enabled: true
0181         layer.effect: OpacityMask {
0182             anchors.fill: rightBorder
0183 
0184             maskSource: rightBorderMask
0185         }
0186     }
0187 
0188     Item {
0189         id: middleBorderMask
0190 
0191         visible: false
0192 
0193         anchors.fill: middleBorder
0194 
0195         Rectangle {
0196             visible: true
0197 
0198             width: leftBorder.radius
0199             height: parent.height
0200 
0201             color: "black"
0202         }
0203 
0204         Rectangle {
0205             visible: true
0206 
0207             anchors.fill: parent
0208             anchors.leftMargin: leftBorder.radius
0209             anchors.rightMargin: rightBorder.radius
0210             anchors.topMargin: borderWidth
0211             anchors.bottomMargin: borderWidth
0212 
0213             color: "black"
0214         }
0215 
0216         Rectangle {
0217             visible: true
0218 
0219             anchors.right: parent.right
0220 
0221             width: rightBorder.radius
0222             height: parent.height
0223 
0224             color: "black"
0225         }
0226     }
0227 
0228     Rectangle {
0229         id: middleBorder
0230 
0231         anchors.fill: parent
0232 
0233         color: "transparent"
0234         opacity: 0.7
0235 
0236         border.width: borderWidth
0237         border.color: borderColor
0238 
0239         layer.enabled: true
0240         layer.effect: OpacityMask {
0241             anchors.fill: middleBorder
0242 
0243             maskSource: middleBorderMask
0244             invert: true
0245         }
0246     }
0247 }
0248