// SPDX-FileCopyrightText: 2021 Nheko Contributors // // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.12 import im.nheko 1.0 Item { required property int type required property int originalWidth required property double proportionalHeight required property string url required property string blurhash required property string body required property string filename required property bool isReply property double tempWidth: Math.min(parent ? parent.width : undefined, originalWidth < 1 ? 200 : originalWidth) property double tempHeight: tempWidth * proportionalHeight property double divisor: isReply ? 5 : 3 property bool tooHigh: tempHeight > timelineView.height / divisor height: Math.round(tooHigh ? timelineView.height / divisor : tempHeight) width: Math.round(tooHigh ? (timelineView.height / divisor) / proportionalHeight : tempWidth) Image { id: blurhash_ anchors.fill: parent visible: img.status != Image.Ready source: blurhash ? ("image://blurhash/" + blurhash) : ("image://colorimage/:/icons/icons/ui/do-not-disturb-rounded-sign@2x.png?" + Nheko.colors.buttonText) asynchronous: true fillMode: Image.PreserveAspectFit sourceSize.width: parent.width sourceSize.height: parent.height } Image { id: img anchors.fill: parent source: url.replace("mxc://", "image://MxcImage/") asynchronous: true fillMode: Image.PreserveAspectFit smooth: true mipmap: true TapHandler { enabled: type == MtxEvent.ImageMessage && img.status == Image.Ready onSingleTapped: { TimelineManager.openImageOverlay(url, room.data.eventId); eventPoint.accepted = true; } gesturePolicy: TapHandler.ReleaseWithinBounds } HoverHandler { id: mouseArea } Item { id: overlay anchors.fill: parent visible: mouseArea.hovered Rectangle { id: container width: parent.width implicitHeight: imgcaption.implicitHeight anchors.bottom: overlay.bottom color: Nheko.colors.window opacity: 0.75 } Text { id: imgcaption anchors.fill: container elide: Text.ElideMiddle horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter // See this MSC: https://github.com/matrix-org/matrix-doc/pull/2530 text: filename ? filename : body color: Nheko.colors.text } } } }