Skip to content
Snippets Groups Projects
ImageMessage.qml 2.86 KiB
Newer Older
  • Learn to ignore specific revisions
  • Nicolas Werner's avatar
    Nicolas Werner committed
    // SPDX-FileCopyrightText: 2021 Nheko Contributors
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    // SPDX-License-Identifier: GPL-3.0-or-later
    
    
    import QtQuick 2.12
    
        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
    
    Nicolas Werner's avatar
    Nicolas Werner committed
        required property string eventId
    
        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
    
    
    Nicolas Werner's avatar
    Nicolas Werner committed
            visible: !mxcimage.loaded
    
            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
    
    Nicolas Werner's avatar
    Nicolas Werner committed
        MxcAnimatedImage {
            id: mxcimage
    
    Nicolas Werner's avatar
    Nicolas Werner committed
            visible: loaded
            anchors.fill: parent
            roomm: room
            eventId: parent.eventId
        }
    
    Nicolas Werner's avatar
    Nicolas Werner committed
        HoverHandler {
            id: mouseArea
        }
    
    Nicolas Werner's avatar
    Nicolas Werner committed
        Item {
            id: overlay
    
    Nicolas Werner's avatar
    Nicolas Werner committed
            anchors.fill: parent
            visible: mouseArea.hovered
    
    Nicolas Werner's avatar
    Nicolas Werner committed
            Rectangle {
                id: container
    
                width: parent.width
                implicitHeight: imgcaption.implicitHeight
                anchors.bottom: overlay.bottom
                color: Nheko.colors.window
                opacity: 0.75
            }
    
            Text {
                id: imgcaption
    
    Nicolas Werner's avatar
    Nicolas Werner committed
                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