/
erhoof
/
telegraf
Обзор
Документация
Войти
/
erhoof
/
telegraf
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
qml/components/topicIcon/TopicIconImage.qml
122 строки
4 KB
Nikolay Sinyov
- исправил косяк в путях импорта для topicIconImage
10 сен 2025, 14:06
10 сен 2025, 14:06
bd3a8f4
Код
Авторство
О чём код?
import QtQuick 2.6 import Sailfish.Silica 1.0 import ru.telegrafaurora.telegraf 1.0 import "../../js/twemoji.js" as Emoji Image { id: topicIconImage property int topicColor: 0 property string customEmojiId: "0" property bool isGeneral: false property bool isPinned: false property bool hasCustomEmoji: false property string emojiText: "" width: Theme.itemSizeSmall height: Theme.itemSizeSmall fillMode: Image.PreserveAspectFit property string cachedImageUrl: "" property bool isRendering: false property bool isDataReady: false property string generatedImageUrl: "" function initAndUpdateData() { isDataReady = false; if (customEmojiId && customEmojiId !== "" && customEmojiId !== "0" && customEmojiId !== 0) { if (CustomEmojiManager.hasCustomEmoji(customEmojiId)) { var cachedSticker = CustomEmojiManager.getCustomEmoji(customEmojiId); hasCustomEmoji = true; emojiText = cachedSticker.emoji || "🎯"; isDataReady = true; updateImage(); } else { CustomEmojiManager.requestCustomEmoji(customEmojiId); } } else { isDataReady = true; updateImage(); } } function updateImage() { if (isRendering || !isDataReady) return; isRendering = true; var component = Qt.createComponent("TopicIconRender.qml"); if (component.status === Component.Ready) { var renderer = component.createObject(topicIconImage, { topicColor: topicColor, isGeneral: isGeneral, isPinned: isPinned, hasCustomEmoji: hasCustomEmoji, emojiText: emojiText, width: topicIconImage.width, height: topicIconImage.height, visible: false }); renderInitTimer.renderer = renderer; renderInitTimer.start(); } else { console.error("Ошибка создания компонента:", component.errorString()); isRendering = false; } } Timer { id: renderInitTimer property var renderer interval: 100 onTriggered: { if (renderer) { renderer.grabToImage(function(result) { cachedImageUrl = result.url; source = cachedImageUrl; generatedImageUrl = cachedImageUrl; renderer.destroy(); isRendering = false; }, Qt.size(topicIconImage.width, topicIconImage.height)); } } } function getImageUrl() { return generatedImageUrl; } function refreshImage() { initAndUpdateData(); } Component.onCompleted: { initAndUpdateData(); } Connections { target: CustomEmojiManager onCustomEmojiReceived: { if (customEmojiId === topicIconImage.customEmojiId) { hasCustomEmoji = true; emojiText = sticker.emoji || "🎯"; isDataReady = true; updateImage(); } } } onStatusChanged: { if (status === Image.Error && sourceSize.width === 0) { source = "image://theme/icon-m-image"; generatedImageUrl = "image://theme/icon-m-image"; } } onTopicColorChanged: refreshImage() onCustomEmojiIdChanged: refreshImage() onIsGeneralChanged: refreshImage() onIsPinnedChanged: refreshImage() }