Revision control

Copy as Markdown

// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick
import QtQuick.Controls
Item {
id: rootItem
property real contentScale: 1.0
property bool smoothScaling: true
property bool useSmoothContent: true
property bool showContentBorders: false
property alias currentSourceImage: sourceImageSelector.currentImage
property alias currentBackgroundImage: backgroundImageSelector.currentImage
readonly property real contentMinScale: 0.10
readonly property real contentMaxScale: 4.0
readonly property real contentScaleStep: 0.10
function updateScaleSlider(newScale) {
scaleSlider.value = newScale;
}
function getStepSize(zoomingIn) {
// Differentiate zooming directions so zoomin 1 step in, then 1
// step out will end up into starting zoom level.
var z = zoomingIn ? contentScale + 0.01 : contentScale - 0.01;
if (z >= 2.0)
return contentScaleStep * 5.0;
else if (z >= 1.0)
return contentScaleStep * 2.0;
return contentScaleStep;
}
function contentZoomIn() {
var step = getStepSize(true);
var newScale = scaleSlider.value + step;
newScale = Math.min(newScale, contentMaxScale);
scaleSlider.value = newScale;
}
function contentZoomOut() {
var step = getStepSize(false);
var newScale = scaleSlider.value - step;
newScale = Math.max(newScale, contentMinScale);
scaleSlider.value = newScale;
}
function selectLastPreviewSource() {
sourceImageSelector.currentIndex = sourceImageSelector.imagesModel.rowCount - 1;
}
height: 50
Behavior on contentScale {
enabled: rootItem.smoothScaling
NumberAnimation {
duration: 400
easing.type: Easing.InOutQuad
}
}
Rectangle {
anchors.fill: parent
color: mainView.backgroundColor1
opacity: 0.8
}
Row {
anchors.verticalCenter: parent.verticalCenter
height: 50
spacing: 2
x: 5
CustomImageSelector {
id: sourceImageSelector
anchors.verticalCenter: parent.verticalCenter
description: "Preview source"
imagesModel: effectManager.settings.sourceImagesModel
showAddButton: true
onAddPressed: {
applicationSettingsDialog.addPreviewSourceImage();
}
}
CustomImageSelector {
id: backgroundImageSelector
anchors.verticalCenter: parent.verticalCenter
description: "Preview background"
imagesModel: effectManager.settings.backgroundImagesModel
}
Item {
width: 20
height: 1
}
CustomIconButton {
id: zoomOutButton
anchors.verticalCenter: parent.verticalCenter
height: parent.height * 0.6
width: height
icon: "images/icon_zoom_out.png"
description: "Zoom out"
onClicked: {
contentZoomOut();
}
}
Slider {
id: scaleSlider
anchors.verticalCenter: parent.verticalCenter
anchors.verticalCenterOffset: 5
width: 120
from: contentMinScale
to: contentMaxScale
stepSize: contentScaleStep
value: 1.0
onValueChanged: {
contentScale = value;
}
Text {
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
anchors.verticalCenterOffset: -16
text: (100 * contentScale).toFixed(0) + " %"
font.pixelSize: 14
color: mainView.foregroundColor2
z: 2
}
}
CustomIconButton {
id: zoomInButton
anchors.verticalCenter: parent.verticalCenter
height: parent.height * 0.6
width: height
icon: "images/icon_zoom_in.png"
description: "Zoom in"
onClicked: {
contentZoomIn();
}
}
CustomIconButton {
id: zoomAutoButton
anchors.verticalCenter: parent.verticalCenter
height: parent.height * 0.6
width: height
icon: "images/icon_zoom_auto.png"
description: "Zoom to fit"
onClicked: {
autoScaleToContent();
}
}
Item {
width: 20
height: 1
}
CustomIconButton {
id: softenButton
anchors.verticalCenter: parent.verticalCenter
height: parent.height * 0.6
width: height
icon: "images/icon_soften.png"
toggledIcon: "images/icon_soften_on.png"
toggleButton: true
toggled: useSmoothContent
description: "Bilinear scaling"
onClicked: {
useSmoothContent = !useSmoothContent;
}
}
CustomIconButton {
id: showBordersButton
anchors.verticalCenter: parent.verticalCenter
height: parent.height * 0.6
width: height
icon: "images/icon_borders.png"
toggledIcon: "images/icon_borders_on.png"
toggleButton: true
toggled: showContentBorders
description: "Show item borders"
onClicked: {
showContentBorders = !showContentBorders;
}
}
}
}