matrixion/qml/dialogs/ImageOverlay.qml

122 lines
3.2 KiB
QML
Raw Permalink Normal View History

// SPDX-FileCopyrightText: 2022 Nheko Contributors
// SPDX-License-Identifier: GPL-3.0-or-later
import QtQuick 2.15
import QtQuick.Window 2.15
2022-04-16 03:13:01 +03:00
import "../"
import im.nheko
Window {
id: imageOverlay
required property string eventId
required property int originalWidth
required property double proportionalHeight
2022-04-16 03:13:01 +03:00
required property Room room
required property string url
//visibility: Window.FullScreen
2022-04-16 03:13:01 +03:00
color: Qt.rgba(0.2, 0.2, 0.2, 0.66)
flags: Qt.FramelessWindowHint
Shortcut {
sequence: StandardKey.Cancel
2022-04-16 03:13:01 +03:00
onActivated: imageOverlay.close()
}
Item {
id: imgContainer
property int imgSrcHeight: proportionalHeight ? imgSrcWidth * proportionalHeight : Screen.height
2022-04-16 03:13:01 +03:00
property int imgSrcWidth: (originalWidth && originalWidth > 200) ? originalWidth : Screen.width
height: Math.min(parent.height, imgSrcHeight)
width: Math.min(parent.width, imgSrcWidth)
x: (parent.width - width)
y: (parent.height - height)
2022-04-16 03:13:01 +03:00
onScaleChanged: {
if (scale > 10)
scale = 10;
if (scale < 0.1)
scale = 0.1;
}
Image {
id: img
2022-04-16 03:13:01 +03:00
property bool loaded: status == Image.Ready
anchors.fill: parent
asynchronous: true
fillMode: Image.PreserveAspectFit
mipmap: true
2022-04-16 03:13:01 +03:00
smooth: true
source: url.replace("mxc://", "image://MxcImage/")
visible: !mxcimage.loaded
}
MxcAnimatedImage {
id: mxcimage
anchors.fill: parent
eventId: imageOverlay.eventId
2022-04-16 03:13:01 +03:00
play: !Settings.animateImagesOnHover || mouseArea.hovered
roomm: imageOverlay.room
visible: loaded
2022-01-03 01:50:08 +03:00
}
}
Item {
anchors.fill: parent
PinchHandler {
maximumScale: 10
minimumScale: 0.1
2022-04-16 03:13:01 +03:00
target: imgContainer
}
WheelHandler {
property: "scale"
target: imgContainer
}
DragHandler {
target: imgContainer
}
HoverHandler {
id: mouseArea
}
}
Row {
anchors.margins: Nheko.paddingLarge
2022-04-16 03:13:01 +03:00
anchors.right: parent.right
anchors.top: parent.top
spacing: Nheko.paddingMedium
ImageButton {
height: 48
hoverEnabled: true
image: ":/icons/icons/ui/download.svg"
2022-04-16 03:13:01 +03:00
width: 48
//ToolTip.visible: hovered
//ToolTip.delay: Nheko.tooltipDelay
//ToolTip.text: qsTr("Download")
onClicked: {
if (room) {
room.saveMedia(eventId);
} else {
TimelineManager.saveMedia(url);
}
imageOverlay.close();
}
}
ImageButton {
height: 48
hoverEnabled: true
image: ":/icons/icons/ui/dismiss.svg"
2022-04-16 03:13:01 +03:00
width: 48
//ToolTip.visible: hovered
//ToolTip.delay: Nheko.tooltipDelay
//ToolTip.text: qsTr("Close")
onClicked: imageOverlay.close()
}
}
}