Warning, /plasma/latte-dock/declarativeimports/abilities/items/basicitem/ShortcutBadge.qml is written in an unsupported language. File is not indexed.

0001 /*
0002     SPDX-FileCopyrightText: 2019 Michail Vourlakos <mvourlakos@gmail.com>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 import QtQuick 2.7
0007 import QtGraphicalEffects 1.0
0008 
0009 import org.kde.plasma.plasmoid 2.0
0010 import org.kde.latte.components 1.0 as LatteComponents
0011 
0012 Loader{
0013     id: shorcutBadge
0014     active: abilityItem.abilities.shortcuts.showPositionShortcutBadges && !abilityItem.isSeparator && !abilityItem.isHidden && abilityItem.abilities.shortcuts.isEnabled
0015     asynchronous: true
0016     visible: badgeString !== ""
0017 
0018     property int fixedIndex:-1
0019 
0020     readonly property int maxFixedIndex: abilityItem.abilities.shortcuts.badges.length
0021     readonly property real textColorBrightness: colorBrightness(theme.textColor)
0022     readonly property string badgeString: (shorcutBadge.fixedIndex>=1 && shorcutBadge.fixedIndex<=maxFixedIndex) ?
0023                                               abilityItem.abilities.shortcuts.badges[shorcutBadge.fixedIndex-1] : ""
0024     readonly property color lightTextColor: textColorBrightness > 127.5 ? theme.textColor : theme.backgroundColor
0025 
0026     onActiveChanged: updateShorcutIndex();
0027 
0028     Connections {
0029         target: abilityItem
0030         onItemIndexChanged: shortcutBadge.updateShorcutIndex();
0031     }
0032 
0033     function updateShorcutIndex() {
0034         if (shorcutBadge.active && abilityItem.abilities.shortcuts.showPositionShortcutBadges) {
0035             fixedIndex = abilityItem.abilities.shortcuts.shortcutIndex(abilityItem.itemIndex);
0036         } else {
0037             fixedIndex = -1;
0038         }
0039     }
0040 
0041     function colorBrightness(color) {
0042         return colorBrightnessFromRGB(color.r * 255, color.g * 255, color.b * 255);
0043     }
0044 
0045     // formula for brightness according to:
0046     // https://www.w3.org/TR/AERT/#color-contrast
0047     function colorBrightnessFromRGB(r, g, b) {
0048         return (r * 299 + g * 587 + b * 114) / 1000
0049     }
0050 
0051     sourceComponent: Item{
0052         Loader{
0053             anchors.fill: taskNumber
0054             active: abilityItem.abilities.myView.itemShadow.isEnabled
0055                     && abilityItem.abilities.environment.isGraphicsSystemAccelerated
0056 
0057             sourceComponent: DropShadow{
0058                 color: abilityItem.abilities.myView.itemShadow.shadowColor
0059                 fast: true
0060                 samples: 2 * radius
0061                 source: taskNumber
0062                 radius: abilityItem.abilities.myView.itemShadow.size/2
0063                 verticalOffset: 2
0064             }
0065         }
0066 
0067         LatteComponents.BadgeText {
0068             id: taskNumber
0069             // when iconSize < 48, height is always = 24, height / iconSize > 50%
0070             // we prefer center aligned badges to top-left aligned ones
0071             property bool centerInParent: abilityItem.abilities.metrics.iconSize < 48
0072 
0073             anchors.left: centerInParent? undefined : parent.left
0074             anchors.top: centerInParent? undefined : parent.top
0075             anchors.centerIn: centerInParent? parent : undefined
0076             minimumWidth: 0.4 * (abilityItem.parabolicItem.zoom * abilityItem.abilities.metrics.iconSize)
0077             height: Math.max(24, 0.4 * (abilityItem.parabolicItem.zoom * abilityItem.abilities.metrics.iconSize))
0078 
0079             style3d: abilityItem.abilities.myView.badgesIn3DStyle
0080             textValue: shorcutBadge.badgeString
0081             borderColor: shortcutBadge.lightTextColor
0082 
0083             showNumber: false
0084             showText: true
0085 
0086             proportion: 0
0087             radiusPerCentage: 100
0088         }
0089     }
0090 }