Skip to content

Commit c770e5d

Browse files
committed
Only move if none within viewport
1 parent 3118569 commit c770e5d

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

editor/src/messages/portfolio/portfolio_message_handler.rs

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use crate::node_graph_executor::{ExportConfig, NodeGraphExecutor};
2020
use graphene_core::renderer::Quad;
2121

2222
use bezier_rs::Subpath;
23-
use glam::{DAffine2, DVec2, IVec2};
23+
use glam::{DVec2, IVec2};
2424
use graph_craft::document::value::TaggedValue;
2525
use graph_craft::document::{DocumentNodeImplementation, NodeId, NodeInput};
2626
use graphene_core::text::{Font, TypesettingConfig};
@@ -923,16 +923,29 @@ impl MessageHandler<PortfolioMessage, PortfolioMessageData<'_>> for PortfolioMes
923923
}
924924
}
925925
PortfolioMessage::CenterPastedLayers { layers } => {
926-
use crate::messages::portfolio::document::graph_operation::transform_utils;
927926
if let Some(document) = self.active_document_mut() {
928927
let viewport_bounds = Quad::from_box_at_zero(ipp.viewport_bounds.size());
929928
let viewport_center = viewport_bounds.center();
929+
let transform = document.metadata().document_to_viewport;
930+
931+
let viewport_points = Quad::from_box_at_zero(ipp.viewport_bounds.size()).0;
932+
933+
let inv_transform = transform.inverse();
934+
let doc_viewport_points = viewport_points.map(|p| inv_transform.transform_point2(p));
935+
let viewport_in_doc_space = Quad(doc_viewport_points);
930936

931937
let mut positions = Vec::new();
932938

933939
for &layer in &layers {
934940
if document.network_interface.is_artboard(&layer.to_node(), &[]) {
935941
if let Some(bounds) = document.metadata().bounding_box_document(layer) {
942+
let artboard_quad = Quad::from_box(bounds);
943+
944+
// Only center if nothing is in the viewport
945+
if artboard_quad.intersects(viewport_in_doc_space) {
946+
return;
947+
}
948+
936949
positions.push((layer, bounds[0], true));
937950
}
938951
} else {
@@ -941,6 +954,12 @@ impl MessageHandler<PortfolioMessage, PortfolioMessageData<'_>> for PortfolioMes
941954
if let Some(network) = modify_inputs.network_interface.network(&[]) {
942955
if let Some(node) = network.nodes.get(&transform_node_id) {
943956
let current_transform = transform_utils::get_current_transform(&node.inputs);
957+
958+
// Only center if nothing is in the viewport
959+
if viewport_in_doc_space.contains(current_transform.translation) {
960+
return;
961+
}
962+
944963
positions.push((layer, current_transform.translation, false));
945964
}
946965
}
@@ -951,7 +970,6 @@ impl MessageHandler<PortfolioMessage, PortfolioMessageData<'_>> for PortfolioMes
951970

952971
if !positions.is_empty() {
953972
let mean_pos = positions.iter().fold(glam::DVec2::ZERO, |acc, (_, pos, _)| acc + *pos) / positions.len() as f64;
954-
let transform = document.metadata().document_to_viewport;
955973

956974
for (layer, pos, is_artboard) in positions {
957975
let offset_from_center = pos - mean_pos;
@@ -982,6 +1000,7 @@ impl MessageHandler<PortfolioMessage, PortfolioMessageData<'_>> for PortfolioMes
9821000
}
9831001
}
9841002
}
1003+
9851004
PortfolioMessage::PasteImage {
9861005
name,
9871006
image,

0 commit comments

Comments
 (0)