f1055ce5b9
Fix bug introduced in 11fb32: When loading an encrypted thumbnail, QML lacks the decryption dict for half a second at first. When calling python like this, python calls the wrong matrix API for fetching the encrypted thumbnail, and the added retry code would be forever stuck. The retry code has been moved to QML, and now works for all HImage.
107 lines
3.2 KiB
QML
107 lines
3.2 KiB
QML
// SPDX-License-Identifier: LGPL-3.0-or-later
|
|
|
|
import QtQuick 2.12
|
|
import QtQuick.Controls 2.12
|
|
|
|
Rectangle {
|
|
id: avatar
|
|
|
|
property bool compact: false
|
|
|
|
property string name
|
|
property alias mxc: avatarImage.mxc
|
|
property alias title: avatarImage.title
|
|
|
|
property alias toolTipMxc: avatarToolTipImage.mxc
|
|
property alias sourceOverride: avatarImage.sourceOverride
|
|
property alias toolTipSourceOverride: avatarToolTipImage.sourceOverride
|
|
property alias fillMode: avatarImage.fillMode
|
|
property alias animate: avatarImage.animate
|
|
|
|
readonly property alias hovered: hoverHandler.hovered
|
|
readonly property alias circleRadius: avatarImage.circleRadius
|
|
|
|
|
|
implicitWidth: implicitHeight
|
|
implicitHeight:
|
|
compact ?
|
|
theme.controls.avatar.compactSize :
|
|
theme.controls.avatar.size
|
|
|
|
radius: theme.controls.avatar.radius
|
|
|
|
color: avatarImage.visible ? "transparent" : utils.hsluv(
|
|
name ? utils.hueFrom(name) : 0,
|
|
name ? theme.controls.avatar.background.saturation : 0,
|
|
theme.controls.avatar.background.lightness,
|
|
theme.controls.avatar.background.opacity
|
|
)
|
|
|
|
Behavior on color { HColorAnimation {} }
|
|
|
|
HLabel {
|
|
z: 1
|
|
anchors.centerIn: parent
|
|
visible: ! avatarImage.visible
|
|
|
|
text: name ? name.charAt(0) : "?"
|
|
font.pixelSize: parent.height / 1.4
|
|
|
|
color: utils.hsluv(
|
|
name ? utils.hueFrom(name) : 0,
|
|
name ? theme.controls.avatar.letter.saturation : 0,
|
|
theme.controls.avatar.letter.lightness,
|
|
theme.controls.avatar.letter.opacity
|
|
)
|
|
|
|
Behavior on color { HColorAnimation {} }
|
|
}
|
|
|
|
HMxcImage {
|
|
id: avatarImage
|
|
anchors.fill: parent
|
|
showProgressBar: false
|
|
visible: Boolean(sourceOverride || mxc)
|
|
z: 2
|
|
sourceSize.width: parent.width
|
|
sourceSize.height: parent.height
|
|
fillMode: Image.PreserveAspectCrop
|
|
animatedFillMode: AnimatedImage.PreserveAspectCrop
|
|
animate: false
|
|
radius: parent.radius
|
|
|
|
HoverHandler { id: hoverHandler }
|
|
|
|
HToolTip {
|
|
id: avatarToolTip
|
|
|
|
readonly property int dimension: Math.min(
|
|
mainUI.width / 1.25,
|
|
mainUI.height / 1.25,
|
|
theme.controls.avatar.hoveredImage.size +
|
|
background.border.width * 2,
|
|
)
|
|
|
|
visible: ! avatarImage.broken &&
|
|
avatarImage.width < dimension * 0.75 &&
|
|
(toolTipSourceOverride || toolTipMxc) &&
|
|
hoverHandler.hovered
|
|
delay: 1000
|
|
backgroundColor: theme.controls.avatar.hoveredImage.background
|
|
|
|
contentItem: HMxcImage {
|
|
id: avatarToolTipImage
|
|
fillMode: Image.PreserveAspectCrop
|
|
animatedFillMode: AnimatedImage.PreserveAspectCrop
|
|
mxc: avatarImage.mxc
|
|
title: avatarImage.title
|
|
|
|
sourceSize.width: avatarToolTip.dimension
|
|
sourceSize.height: avatarToolTip.dimension
|
|
width: avatarToolTip.dimension
|
|
height: avatarToolTip.dimension
|
|
}
|
|
}
|
|
}
|
|
}
|