mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2025-08-04 13:30:48 +00:00
Fix inability to drag axis-aligned lines (#2561)
* Fix 1 and 3 * Fix 2 * Shape tools refactor --------- Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
parent
fdff5d4e5e
commit
3e6021fb8f
4 changed files with 9 additions and 6 deletions
|
@ -142,14 +142,17 @@ impl DocumentMetadata {
|
|||
///
|
||||
/// If the layer bounds are `0` in either axis then they are changed to be `1`.
|
||||
pub fn nonzero_bounding_box(&self, layer: LayerNodeIdentifier) -> [DVec2; 2] {
|
||||
let [bounds_min, mut bounds_max] = self.bounding_box_with_transform(layer, DAffine2::IDENTITY).unwrap_or_default();
|
||||
let [mut bounds_min, mut bounds_max] = self.bounding_box_with_transform(layer, DAffine2::IDENTITY).unwrap_or_default();
|
||||
|
||||
let bounds_size = bounds_max - bounds_min;
|
||||
let bounds_midpoint = bounds_min.midpoint(bounds_max);
|
||||
if bounds_size.x < 1e-10 {
|
||||
bounds_max.x = bounds_min.x + 1.;
|
||||
bounds_max.x = bounds_midpoint.x + 0.5;
|
||||
bounds_min.x = bounds_midpoint.x - 0.5;
|
||||
}
|
||||
if bounds_size.y < 1e-10 {
|
||||
bounds_max.y = bounds_min.y + 1.;
|
||||
bounds_max.y = bounds_midpoint.y + 0.5;
|
||||
bounds_min.y = bounds_midpoint.y - 0.5;
|
||||
}
|
||||
|
||||
[bounds_min, bounds_max]
|
||||
|
|
|
@ -35,7 +35,7 @@ impl Default for Pivot {
|
|||
impl Pivot {
|
||||
/// Calculates the transform that gets from normalized pivot to viewspace.
|
||||
fn get_layer_pivot_transform(layer: LayerNodeIdentifier, document: &DocumentMessageHandler) -> DAffine2 {
|
||||
let [min, max] = document.metadata().nonzero_bounding_box(layer);
|
||||
let [min, max] = document.metadata().bounding_box_with_transform(layer, DAffine2::IDENTITY).unwrap_or_default();
|
||||
|
||||
let bounds_transform = DAffine2::from_translation(min) * DAffine2::from_scale(max - min);
|
||||
let layer_transform = document.metadata().transform_to_viewport(layer);
|
||||
|
|
|
@ -794,7 +794,7 @@ impl BoundingBoxManager {
|
|||
}
|
||||
|
||||
match edges {
|
||||
Some((top, bottom, left, right)) if !self.is_bounds_flat() => match (top, bottom, left, right) {
|
||||
Some((top, bottom, left, right)) => match (top, bottom, left, right) {
|
||||
(true, _, false, false) | (_, true, false, false) => MouseCursorIcon::NSResize,
|
||||
(false, false, true, _) | (false, false, _, true) => MouseCursorIcon::EWResize,
|
||||
(true, _, true, _) | (_, true, _, true) => MouseCursorIcon::NWSEResize,
|
||||
|
|
|
@ -88,7 +88,7 @@ impl ClickTarget {
|
|||
// This bounding box is not very accurate as it is the axis aligned version of the transformed bounding box. However it is fast.
|
||||
if !self
|
||||
.bounding_box
|
||||
.is_some_and(|loose| (loose[0] - loose[1]).abs().cmpgt(DVec2::splat(1e-4)).all() && intersects((layer_transform * Quad::from_box(loose)).bounding_box(), target_bounds))
|
||||
.is_some_and(|loose| (loose[0] - loose[1]).abs().cmpgt(DVec2::splat(1e-4)).any() && intersects((layer_transform * Quad::from_box(loose)).bounding_box(), target_bounds))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue