Fix tool drawing start point offset when an artboard has a transform (#1763)

* Fix offset artboard

* Multiply in transform sometimes
This commit is contained in:
0HyperCube 2024-05-28 09:09:48 +01:00 committed by GitHub
parent d40fb6caad
commit 61292500e6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 13 additions and 4 deletions

View file

@ -157,7 +157,11 @@ impl ArtboardToolData {
};
let center = from_center.then_some(bounds.center_of_transformation);
let (position, size) = movement.new_size(mouse_position, bounds.transform, center, constrain_square, None);
let (min, size) = movement.new_size(mouse_position, bounds.transform, center, constrain_square, None);
let max = min + size;
let position = min.min(max);
let size = (max - min).abs();
responses.add(GraphOperationMessage::ResizeArtboard {
id: self.selected_artboard.unwrap().to_node(),
location: position.round().as_ivec2(),
@ -271,6 +275,9 @@ impl Fsm for ArtboardToolFsmState {
let start = root_transform.transform_point2(start);
let size = root_transform.transform_vector2(size);
let end = start + size;
let size = (start - end).abs();
let start = start.min(end);
if let Some(artboard) = tool_data.selected_artboard {
responses.add(GraphOperationMessage::ResizeArtboard {

View file

@ -318,7 +318,7 @@ impl Fsm for BrushToolFsmState {
let layer = loaded_layer.unwrap_or_else(|| new_brush_layer(document, responses));
tool_data.layer = Some(layer);
let parent = layer.parent(document.metadata()).unwrap_or_default();
let parent = layer.parent(document.metadata()).unwrap_or_else(|| document.new_layer_parent(true));
let parent_transform = document.metadata().transform_to_viewport(parent).inverse().transform_point2(input.mouse.position);
let layer_position = tool_data.transform.inverse().transform_point2(parent_transform);

View file

@ -339,6 +339,7 @@ impl NodeRuntime {
None.or_else(|| try_downcast::<VectorData>(introspected_data.as_ref()))
.or_else(|| try_downcast::<ImageFrame<Color>>(introspected_data.as_ref()))
.or_else(|| try_downcast::<GraphicElement>(introspected_data.as_ref()))
.or_else(|| try_downcast::<graphene_core::Artboard>(introspected_data.as_ref()))
} {
self.upstream_transforms.insert(parent_network_node_id, transform);
}

View file

@ -447,7 +447,8 @@ impl GraphicElementRendered for Artboard {
}
fn add_click_targets(&self, click_targets: &mut Vec<ClickTarget>) {
let subpath = Subpath::new_rect(self.location.as_dvec2(), self.location.as_dvec2() + self.dimensions.as_dvec2());
let mut subpath = Subpath::new_rect(DVec2::ZERO, self.dimensions.as_dvec2());
subpath.apply_transform(self.graphic_group.transform.inverse());
click_targets.push(ClickTarget { stroke_width: 0., subpath });
}

View file

@ -127,7 +127,7 @@ impl TransformMut for VectorData {
impl Transform for Artboard {
fn transform(&self) -> DAffine2 {
DAffine2::from_translation(self.location.as_dvec2())
DAffine2::from_translation(self.location.as_dvec2()) * self.graphic_group.transform
}
fn local_pivot(&self, pivot: DVec2) -> DVec2 {
self.location.as_dvec2() + self.dimensions.as_dvec2() * pivot