From 281080a21ffeafd317067908f84b8dfbcfad477e Mon Sep 17 00:00:00 2001 From: Sophie Herold Date: Wed, 26 Feb 2025 14:48:39 +0100 Subject: [PATCH] edit/crop: Fix edge resize for fixed aspect ratio Allow to decrease the size when dragging an edge with fixed aspect ratio. Issue #409 --- src/widgets/edit/crop_selection.rs | 32 ++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/src/widgets/edit/crop_selection.rs b/src/widgets/edit/crop_selection.rs index 80ffbd1..482f7de 100644 --- a/src/widgets/edit/crop_selection.rs +++ b/src/widgets/edit/crop_selection.rs @@ -358,15 +358,31 @@ mod imp { let coord = (x, y); let new_area = if let Some(aspect_ratio) = imp.aspect_ratio() { - let u = - imp.new_crop_area_aspect_ratio(&resize, true, coord, aspect_ratio); - let v = - imp.new_crop_area_aspect_ratio(&resize, false, coord, aspect_ratio); - - if u.area() > v.area() { - u + // Width for height an vice versa is only needed if corner is dragged + // and both dimensions change + if resize.handle.h_edge().is_none() { + imp.new_crop_area_aspect_ratio(&resize, true, coord, aspect_ratio) + } else if resize.handle.v_edge().is_none() { + imp.new_crop_area_aspect_ratio(&resize, false, coord, aspect_ratio) } else { - v + let u = imp.new_crop_area_aspect_ratio( + &resize, + true, + coord, + aspect_ratio, + ); + let v = imp.new_crop_area_aspect_ratio( + &resize, + false, + coord, + aspect_ratio, + ); + + if u.area() > v.area() { + u + } else { + v + } } } else { imp.new_crop_area_aspect_free(&resize, coord)