mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-23 19:38:48 +03:00
Merge 52346d972e
into 048af42780
This commit is contained in:
commit
d509ef93d6
1 changed files with 44 additions and 3 deletions
|
@ -48,8 +48,10 @@ Window {
|
||||||
Item {
|
Item {
|
||||||
id: imgContainer
|
id: imgContainer
|
||||||
|
|
||||||
property int imgSrcWidth: (imageOverlay.originalWidth && imageOverlay.originalWidth > 100) ? imageOverlay.originalWidth : Screen.width
|
property int imgSrcWidth: (imageOverlay.originalWidth && imageOverlay.originalWidth > 100) ? imageOverlay.originalWidth : imageOverlay.width
|
||||||
property int imgSrcHeight: imageOverlay.proportionalHeight ? imgSrcWidth * imageOverlay.proportionalHeight : Screen.height
|
property int imgSrcHeight: imageOverlay.proportionalHeight ? imgSrcWidth * imageOverlay.proportionalHeight : imageOverlay.height
|
||||||
|
readonly property int physicalWidth: width * scale
|
||||||
|
readonly property int physicalHeight: height * scale
|
||||||
|
|
||||||
property double initialScale: Math.min(Window.height/imgSrcHeight, Window.width/imgSrcWidth, 1.0)
|
property double initialScale: Math.min(Window.height/imgSrcHeight, Window.width/imgSrcWidth, 1.0)
|
||||||
|
|
||||||
|
@ -59,6 +61,22 @@ Window {
|
||||||
x: (parent.width - width) / 2
|
x: (parent.width - width) / 2
|
||||||
y: (parent.height - height) / 2
|
y: (parent.height - height) / 2
|
||||||
|
|
||||||
|
onXChanged: {
|
||||||
|
if (physicalWidth < imageOverlay.width)
|
||||||
|
x = (parent.width - width) / 2;
|
||||||
|
}
|
||||||
|
onYChanged: {
|
||||||
|
if (physicalHeight < imageOverlay.height)
|
||||||
|
y = (parent.height - height) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
Behavior on rotation {
|
||||||
|
NumberAnimation {
|
||||||
|
duration: 100
|
||||||
|
easing.type: Easing.InOutQuad
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Image {
|
Image {
|
||||||
id: img
|
id: img
|
||||||
|
|
||||||
|
@ -89,13 +107,30 @@ Window {
|
||||||
}
|
}
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
anchors.fill: parent
|
id: handlerContainer
|
||||||
|
|
||||||
|
function snapImageRotation()
|
||||||
|
{
|
||||||
|
// snap to 15-degree angles
|
||||||
|
let rotationOffset = imgContainer.rotation % 15;
|
||||||
|
if (rotationOffset != 0)
|
||||||
|
{
|
||||||
|
if (rotationOffset < 7.5)
|
||||||
|
imgContainer.rotation -= rotationOffset;
|
||||||
|
else
|
||||||
|
imgContainer.rotation += rotationOffset;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
PinchHandler {
|
PinchHandler {
|
||||||
target: imgContainer
|
target: imgContainer
|
||||||
maximumScale: 10
|
maximumScale: 10
|
||||||
minimumScale: 0.1
|
minimumScale: 0.1
|
||||||
|
|
||||||
|
onGrabChanged: handlerContainer.snapImageRotation()
|
||||||
}
|
}
|
||||||
|
|
||||||
WheelHandler {
|
WheelHandler {
|
||||||
|
@ -105,10 +140,16 @@ Window {
|
||||||
// and we don't yet distinguish mice and trackpads on Wayland either
|
// and we don't yet distinguish mice and trackpads on Wayland either
|
||||||
acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad
|
acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad
|
||||||
target: imgContainer
|
target: imgContainer
|
||||||
|
|
||||||
|
onWheel: handlerContainer.snapImageRotation()
|
||||||
}
|
}
|
||||||
|
|
||||||
DragHandler {
|
DragHandler {
|
||||||
target: imgContainer
|
target: imgContainer
|
||||||
|
xAxis.enabled: imgContainer.physicalWidth > imageOverlay.width
|
||||||
|
yAxis.enabled: imgContainer.physicalHeight > imageOverlay.height
|
||||||
|
|
||||||
|
onGrabChanged: handlerContainer.snapImageRotation()
|
||||||
}
|
}
|
||||||
|
|
||||||
HoverHandler {
|
HoverHandler {
|
||||||
|
|
Loading…
Reference in a new issue