Warning, /libraries/kirigami-addons/src/components/Avatar.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 * SPDX-FileCopyrightText: 2020 Carson Black <uhhadd@gmail.com> 0003 * SPDX-FileCopyrightText: 2023 ivan tkachenko <me@ratijas.tk> 0004 * 0005 * SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 import QtQuick 2.15 0009 import QtQuick.Window 2.15 0010 import org.kde.kirigami 2.15 as Kirigami 0011 import org.kde.kirigamiaddons.components 1.0 as Components 0012 0013 /** 0014 * @brief An element that represents a user, either with initials, an icon, or a profile image. 0015 * @inherit QtQuick.Item 0016 */ 0017 Item { 0018 id: root 0019 0020 enum ImageMode { 0021 AlwaysShowImage, 0022 AdaptiveImageOrInitals, 0023 AlwaysShowInitials 0024 } 0025 0026 enum InitialsMode { 0027 UseInitials, 0028 UseIcon 0029 } 0030 0031 //BEGIN properties 0032 /** 0033 * @brief This property holds the given name of a user. 0034 * 0035 * The user's name will be used for generating initials and to provide the 0036 * accessible name for assistive technology. 0037 */ 0038 property string name 0039 0040 /** 0041 * @brief This property holds the source of the user's profile picture; an image. 0042 * @see QtQuick.Image::source 0043 * @property url source 0044 */ 0045 property alias source: avatarImage.source 0046 0047 /** 0048 * @brief This property holds avatar's icon source. 0049 * 0050 * This icon is displayed when using an icon with ``Avatar.InitialsMode.UseIcon`` and 0051 * ``Avatar.ImageNode.AlwaysShowInitials`` enabled. 0052 * 0053 * @see org::kde::kirigami::Icon::source 0054 * @property var iconSource 0055 */ 0056 property alias iconSource: avatarIcon.source 0057 0058 /** 0059 * @brief This property holds how the button should represent the user when no user-set image is available. 0060 * 0061 * Possible values are: 0062 * * ``Avatar.InitialsMode.UseInitials``: Show the user's initials. 0063 * * ``Avatar.InitialsMode.UseIcon``: Show a generic icon. 0064 * 0065 * @see org::kde::kirigamiaddons::components::Avatar::InitialsMode 0066 */ 0067 property int initialsMode: Avatar.InitialsMode.UseInitials 0068 0069 /** 0070 * @brief This property holds how the avatar should be shown. 0071 * 0072 * This property holds whether the button should always show the image; show the image if one is 0073 * available and show initials when it is not; or always show initials. 0074 * 0075 * Possible values are: 0076 * * ``Avatar.ImageMode.AlwaysShowImage``: Always try to show the image; even if it hasn't loaded yet or is undefined. 0077 * * ``Avatar.ImageMode.AdaptiveImageOrInitals``: Show the image if it is valid; or show initials if it is not 0078 * * ``Avatar.ImageMode.AlwaysShowInitials``: Always show initials 0079 * 0080 * @see org::kde::kirigamiaddons::components::Avatar::ImageMode 0081 */ 0082 property int imageMode: Avatar.ImageMode.AdaptiveImageOrInitals 0083 0084 /** 0085 * @brief This property sets whether the provided image should be cached. 0086 * @see QtQuick.Image::cache 0087 * @property bool cache 0088 */ 0089 property alias cache: avatarImage.cache 0090 0091 /** 0092 * @brief This property holds the source size of the user's profile picture. 0093 * @see QtQuick.Image::sourceSize 0094 * @property int sourceSize 0095 */ 0096 property alias sourceSize: avatarImage.sourceSize 0097 0098 /** 0099 * @brief This property holds the color to use for this avatar. 0100 * 0101 * If not explicitly set, this defaults to generating a color from the name. 0102 * 0103 * @property color color 0104 */ 0105 property color color: Components.NameUtils.colorsFromString(name) 0106 0107 /** 0108 * @brief This property holds the color of the avatar's initials. 0109 * 0110 * If not explicitly set, this defaults to defaultInitialsColor. 0111 * 0112 * @see defaultInitialsColor 0113 * @property color initialsColor 0114 */ 0115 property color initialsColor: defaultInitialsColor 0116 0117 /** 0118 * @brief This property holds the default color of the avatar's initials. 0119 * 0120 * It depends on the avatar's color. 0121 * 0122 * @property color defaultInitialsColor 0123 */ 0124 readonly property alias defaultInitialsColor: root.__textColor 0125 0126 /** 0127 * @brief This item holds the parent item on the clipped circle. 0128 * 0129 * Implementations may add custom graphics which will be clipped along with 0130 * the rest of the avatar content. 0131 */ 0132 readonly property alias clippedContent: clippedContent 0133 0134 implicitWidth: Kirigami.Units.iconSizes.large 0135 implicitHeight: Kirigami.Units.iconSizes.large 0136 0137 Accessible.role: Accessible.Graphic 0138 Accessible.name: name 0139 0140 readonly property real __diameter: Math.min(root.width, root.height) 0141 0142 readonly property color __textColor: Kirigami.ColorUtils.brightnessForColor(root.color) === Kirigami.ColorUtils.Light 0143 ? "black" 0144 : "white" 0145 0146 readonly property bool __showImage: { 0147 switch (root.imageMode) { 0148 case Avatar.ImageMode.AlwaysShowImage: 0149 return true; 0150 case Avatar.ImageMode.AdaptiveImageOrInitals: 0151 return avatarImage.status === Image.Ready; 0152 case Avatar.ImageMode.AlwaysShowInitials: 0153 default: 0154 return false; 0155 } 0156 } 0157 0158 Item { 0159 id: clippedContent 0160 0161 anchors.centerIn: parent 0162 0163 width: root.__diameter 0164 height: root.__diameter 0165 0166 Text { 0167 anchors.fill: parent 0168 0169 visible: root.initialsMode === Avatar.InitialsMode.UseInitials && 0170 !root.__showImage && 0171 !Components.NameUtils.isStringUnsuitableForInitials(root.name) && 0172 root.width > Kirigami.Units.gridUnit 0173 0174 text: Components.NameUtils.initialsFromString(root.name) 0175 color: root.color 0176 0177 font { 0178 // this ensures we don't get a both point and pixel size are set warning 0179 pointSize: -1 0180 pixelSize: Math.round((root.height - Kirigami.Units.largeSpacing) / 2) 0181 } 0182 fontSizeMode: Text.Fit 0183 verticalAlignment: Text.AlignVCenter 0184 horizontalAlignment: Text.AlignHCenter 0185 } 0186 0187 Kirigami.Icon { 0188 id: avatarIcon 0189 0190 anchors.fill: parent 0191 anchors.margins: Kirigami.Units.largeSpacing 0192 0193 visible: !root.__showImage 0194 && (root.initialsMode === Avatar.InitialsMode.UseIcon 0195 || Components.NameUtils.isStringUnsuitableForInitials(root.name)) 0196 0197 color: root.__textColor 0198 source: "user" 0199 } 0200 0201 Image { 0202 id: avatarImage 0203 0204 anchors.fill: parent 0205 0206 visible: root.__showImage 0207 0208 fillMode: Image.PreserveAspectCrop 0209 mipmap: true 0210 sourceSize { 0211 width: root.__diameter * root.Screen.devicePixelRatio 0212 height: root.__diameter * root.Screen.devicePixelRatio 0213 } 0214 } 0215 0216 layer { 0217 enabled: true 0218 effect: Kirigami.ShadowedTexture { 0219 radius: root.__diameter 0220 0221 border { 0222 width: root.__showImage ? 0 : 1.25 0223 color: root.color 0224 } 0225 0226 color: Kirigami.ColorUtils.tintWithAlpha(Kirigami.Theme.backgroundColor, border.color, 0.07) 0227 } 0228 } 0229 } 0230 }