improvement(StatusImageCrop): add option to limit to fill

Currently only fit image is supported as minimum limit
This change sdds option to fill crop window with image as
minimum zoom which is required by status-go crop function
This commit is contained in:
Stefan 2022-05-11 15:22:13 +03:00 committed by Stefan Dunca
parent ba79f62fda
commit 1c0d4b0133
2 changed files with 26 additions and 6 deletions

View File

@ -264,12 +264,11 @@ Item {
enabled: root.interactive enabled: root.interactive
from: 1 from: cropEditor.minZoomScale
to: cropEditor.maxZoomScale
value: cropEditor.zoomScale value: cropEditor.zoomScale
live: false live: false
onMoved: cropEditor.setCropRect(cropEditor.getZoomRect(valueAt(visualPosition))) onMoved: cropEditor.setCropRect(cropEditor.getZoomRect(valueAt(visualPosition)))
to: 10
} }
StatusIcon { StatusIcon {
icon: "add-circle" icon: "add-circle"

View File

@ -94,6 +94,21 @@ Item {
*/ */
property real wallTransparency: 0.7 property real wallTransparency: 0.7
/*!
\qmlproperty bool StatusImageCrop::allowZoomToFitAllContent
\c true to limit the content to fit at minimum zoom; that's it, the user will see the entire image
in the crop window, in case of aspect-ratio mismatch, allowing transparent/no-content borders in the crop window.
\c false to limit the content to fill at minimum zoom; that's it, the user will see only part of the image
in the crop window in case of aspect-ratio mismatch. This way, we don't allow transparent/no-content space
*/
property bool allowZoomToFitAllContent: false
/*!
\qmlproperty real StatusImageCrop::minZoomScale
Minimum allowed zoom. This is 1 if \c allowZoomToFitAllContent is true else depends on the
source aspect ratio.
*/
readonly property real minZoomScale: allowZoomToFitAllContent ? 1 : d.zoomToFill
/*! /*!
\qmlproperty real StatusImageCrop::maxZoomScale \qmlproperty real StatusImageCrop::maxZoomScale
Don't allow to zoom in more than maxZoomScale factor Don't allow to zoom in more than maxZoomScale factor
@ -166,8 +181,8 @@ Item {
nZoom = root.maxZoomScale nZoom = root.maxZoomScale
n = root.getZoomRect(nZoom) n = root.getZoomRect(nZoom)
} }
else if(nZoom < 1) { else if(nZoom < root.minZoomScale) {
nZoom = 1 nZoom = root.minZoomScale
n = root.getZoomRect(nZoom) n = root.getZoomRect(nZoom)
} }
@ -248,8 +263,14 @@ Item {
QtObject { QtObject {
id: d id: d
property rect cropRect: fillContentInSquaredWindow(sourceSize) property rect cropRect: fillContentInSquaredWindow(root.sourceSize)
onCropRectChanged: windowRect.requestPaint() onCropRectChanged: windowRect.requestPaint()
readonly property real zoomToFill: {
const rectangle = fillContentInSquaredWindow(root.sourceSize)
return d.currentZoom(root.sourceSize, Qt.size(rectangle.width, rectangle.height))
}
property rect cropWindow property rect cropWindow
// Probably called from render thread, run async // Probably called from render thread, run async
signal updateCropWindow(rect newRect) signal updateCropWindow(rect newRect)