Skip to content

Commit 0004bbb

Browse files
mTvare6Keavon
andauthored
Fix transform cage bug where aborted resize/rotate after drag is used for next resize/rotate (#2308)
* Fix the said issues * Replace numbers with consts --------- Co-authored-by: Keavon Chambers <[email protected]>
1 parent cf2a071 commit 0004bbb

File tree

3 files changed

+12
-5
lines changed

3 files changed

+12
-5
lines changed

editor/src/consts.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ pub const ANGLE_MEASURE_RADIUS_FACTOR: f64 = 0.04;
7373
pub const ARC_MEASURE_RADIUS_FACTOR_RANGE: (f64, f64) = (0.05, 0.15);
7474

7575
// TRANSFORM CAGE
76+
pub const RESIZE_HANDLE_SIZE: f64 = 6.;
7677
pub const BOUNDS_SELECT_THRESHOLD: f64 = 10.;
7778
pub const BOUNDS_ROTATE_THRESHOLD: f64 = 20.;
7879
pub const MIN_LENGTH_FOR_MIDPOINT_VISIBILITY: f64 = 20.;

editor/src/messages/tool/common_functionality/transformation_cage.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::consts::{
22
BOUNDS_ROTATE_THRESHOLD, BOUNDS_SELECT_THRESHOLD, COLOR_OVERLAY_WHITE, MAXIMUM_ALT_SCALE_FACTOR, MIN_LENGTH_FOR_CORNERS_VISIBILITY, MIN_LENGTH_FOR_MIDPOINT_VISIBILITY,
3-
MIN_LENGTH_FOR_RESIZE_TO_INCLUDE_INTERIOR, SELECTION_DRAG_ANGLE,
3+
MIN_LENGTH_FOR_RESIZE_TO_INCLUDE_INTERIOR, RESIZE_HANDLE_SIZE, SELECTION_DRAG_ANGLE,
44
};
55
use crate::messages::frontend::utility_types::MouseCursorIcon;
66
use crate::messages::portfolio::document::overlays::utility_types::OverlayContext;
@@ -389,7 +389,8 @@ impl BoundingBoxManager {
389389
overlay_context.quad(quad, None);
390390

391391
let mut draw_handle = |point: DVec2| {
392-
let quad = DAffine2::from_angle_translation((quad.top_left() - quad.top_right()).to_angle(), point) * Quad::from_box([DVec2::splat(-3.), DVec2::splat(3.)]);
392+
let quad = DAffine2::from_angle_translation((quad.top_left() - quad.top_right()).to_angle(), point)
393+
* Quad::from_box([DVec2::splat(-RESIZE_HANDLE_SIZE / 2.), DVec2::splat(RESIZE_HANDLE_SIZE / 2.)]);
393394
overlay_context.quad(quad, Some(COLOR_OVERLAY_WHITE));
394395
};
395396

editor/src/messages/tool/tool_messages/select_tool.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
use super::tool_prelude::*;
44
use crate::consts::{
5-
COLOR_OVERLAY_BLUE, COLOR_OVERLAY_GREEN, COLOR_OVERLAY_RED, COMPASS_ROSE_HOVER_RING_DIAMETER, DRAG_DIRECTION_MODE_DETERMINATION_THRESHOLD, ROTATE_INCREMENT, SELECTION_DRAG_ANGLE,
6-
SELECTION_TOLERANCE,
5+
COLOR_OVERLAY_BLUE, COLOR_OVERLAY_GREEN, COLOR_OVERLAY_RED, COMPASS_ROSE_HOVER_RING_DIAMETER, DRAG_DIRECTION_MODE_DETERMINATION_THRESHOLD, RESIZE_HANDLE_SIZE, ROTATE_INCREMENT,
6+
SELECTION_DRAG_ANGLE, SELECTION_TOLERANCE,
77
};
88
use crate::messages::input_mapper::utility_types::input_mouse::ViewportPosition;
99
use crate::messages::portfolio::document::graph_operation::utility_types::TransformIn;
@@ -583,7 +583,8 @@ impl Fsm for SelectToolFsmState {
583583

584584
let show_compass = !(can_get_into_other_states || is_resizing_or_rotating);
585585
let show_compass_with_ring = bounds.map(|bounds| transform * Quad::from_box(bounds)).and_then(|quad| {
586-
(show_compass && quad.all_sides_at_least_width(COMPASS_ROSE_HOVER_RING_DIAMETER))
586+
const MIN_ARROWS_TO_RESIZE_HANDLE_DISTANCE: f64 = 4.;
587+
(show_compass && quad.all_sides_at_least_width(COMPASS_ROSE_HOVER_RING_DIAMETER + RESIZE_HANDLE_SIZE + MIN_ARROWS_TO_RESIZE_HANDLE_DISTANCE))
587588
.then_some(
588589
matches!(self, SelectToolFsmState::Dragging { .. })
589590
.then_some(show_hover_ring)
@@ -1412,6 +1413,10 @@ impl Fsm for SelectToolFsmState {
14121413
}
14131414
});
14141415

1416+
if let Some(bounds) = &mut tool_data.bounding_box_manager {
1417+
bounds.original_transforms.clear();
1418+
}
1419+
14151420
responses.add(DocumentMessage::AbortTransaction);
14161421
tool_data.snap_manager.cleanup(responses);
14171422
responses.add(OverlaysMessage::Draw);

0 commit comments

Comments
 (0)