/
erhoof
/
telegraf
Обзор
Документация
Войти
/
erhoof
/
telegraf
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
qml/components/messageContent/MessageSticker.qml
121 строка
4 KB
mbarashkov
Показываем превью для стикеров.
18 сен 2025, 14:55
18 сен 2025, 14:55
d52e3d7
Код
Авторство
О чём код?
import Aurora.Lottie 1.0 import QtQuick 2.6 import Sailfish.Silica 1.0 import QtMultimedia 5.6 import ru.telegrafaurora.telegraf 1.0 import "../" import "../../js/twemoji.js" as Emoji MessageContentBase { id: thisItem property var stickerData: messageListItem ? messageListItem.messageInformation.content.sticker : overlayFlickable.overlayMessage.content.sticker; readonly property bool asEmoji: AppSettings.showStickersAsEmojis readonly property bool isVideo: stickerData.format["@type"] === "stickerFormatWebm" && AppSettings.animateStickers readonly property bool animated: stickerData.format["@type"] === "stickerFormatTgs" && AppSettings.animateStickers readonly property bool stickerVisible: staticStickerLoader.item ? staticStickerLoader.item.visible : animatedStickerLoader.item ? animatedStickerLoader.item.visible : videoStickerLoader.item ? videoStickerLoader.item.visible : false readonly property bool isOwnSticker : messageListItem ? messageListItem.isOwnMessage : overlayFlickable.isOwnMessage readonly property real aspectRatio: stickerData.width / stickerData.height implicitWidth: stickerData.width implicitHeight: stickerData.height TDLibFile { id: file fileInformation: stickerData.sticker autoLoad: true } TDLibFile { id: thumbnailFile fileInformation: stickerData.thumbnail.file autoLoad: true } Item { width: parent.width height: width * aspectRatio // (centered in image mode, text-like in sticker mode) x: AppSettings.showStickersAsImages ? (parent.width - width) / 2 : isOwnSticker ? (parent.width - width) : 0 anchors.verticalCenter: parent.verticalCenter Loader { id: videoStickerLoader anchors.fill: parent active: isVideo && !asEmoji sourceComponent: Component { MessageAnimationVideoPlayer { source: file.path thumbnailSource: thumbnailFile.path visible: parent.visible } } } Loader { id: animatedStickerLoader anchors.fill: parent active: animated && !asEmoji && Qt.application.active sourceComponent: Component { LottieAnimation { id: lottieAnimation anchors.fill: parent loops: LottieAnimation.Infinite autoPlay: true source: file.path } } } Loader { id: staticStickerLoader anchors.fill: parent active: !isVideo && (!animated || asEmoji) sourceComponent: Component { Image { id: staticSticker anchors.fill: parent source: asEmoji ? Emoji.getEmojiPath(stickerData.emoji) : file.path sourceSize { width: width height: height } fillMode: Image.PreserveAspectFit autoTransform: true asynchronous: true visible: opacity > 0 opacity: status === Image.Ready ? 1 : 0 Behavior on opacity { FadeAnimation {} } layer.enabled: thisItem.highlighted layer.effect: PressEffect { source: staticSticker } } } } Loader { anchors.fill: parent sourceComponent: Component { BackgroundImage {} } active: opacity > 0 opacity: !stickerVisible && !placeHolderDelayTimer.running ? 0.15 : 0 Behavior on opacity { FadeAnimation {} } } } onClicked: { stickerSetOverlayLoader.stickerSetId = stickerData.set_id stickerSetOverlayLoader.active = true } Timer { id: placeHolderDelayTimer interval: 1000 running: true } }