Skip to content

Commit 69b42cc

Browse files
mTvare6Keavon
authored andcommitted
Only move if none within viewport
1 parent 134e191 commit 69b42cc

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};
@@ -915,16 +915,29 @@ impl MessageHandler<PortfolioMessage, PortfolioMessageData<'_>> for PortfolioMes
915915
}
916916
}
917917
PortfolioMessage::CenterPastedLayers { layers } => {
918-
use crate::messages::portfolio::document::graph_operation::transform_utils;
919918
if let Some(document) = self.active_document_mut() {
920919
let viewport_bounds = Quad::from_box_at_zero(ipp.viewport_bounds.size());
921920
let viewport_center = viewport_bounds.center();
921+
let transform = document.metadata().document_to_viewport;
922+
923+
let viewport_points = Quad::from_box_at_zero(ipp.viewport_bounds.size()).0;
924+
925+
let inv_transform = transform.inverse();
926+
let doc_viewport_points = viewport_points.map(|p| inv_transform.transform_point2(p));
927+
let viewport_in_doc_space = Quad(doc_viewport_points);
922928

923929
let mut positions = Vec::new();
924930

925931
for &layer in &layers {
926932
if document.network_interface.is_artboard(&layer.to_node(), &[]) {
927933
if let Some(bounds) = document.metadata().bounding_box_document(layer) {
934+
let artboard_quad = Quad::from_box(bounds);
935+
936+
// Only center if nothing is in the viewport
937+
if artboard_quad.intersects(viewport_in_doc_space) {
938+
return;
939+
}
940+
928941
positions.push((layer, bounds[0], true));
929942
}
930943
} else {
@@ -933,6 +946,12 @@ impl MessageHandler<PortfolioMessage, PortfolioMessageData<'_>> for PortfolioMes
933946
if let Some(network) = modify_inputs.network_interface.network(&[]) {
934947
if let Some(node) = network.nodes.get(&transform_node_id) {
935948
let current_transform = transform_utils::get_current_transform(&node.inputs);
949+
950+
// Only center if nothing is in the viewport
951+
if viewport_in_doc_space.contains(current_transform.translation) {
952+
return;
953+
}
954+
936955
positions.push((layer, current_transform.translation, false));
937956
}
938957
}
@@ -943,7 +962,6 @@ impl MessageHandler<PortfolioMessage, PortfolioMessageData<'_>> for PortfolioMes
943962

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

948966
for (layer, pos, is_artboard) in positions {
949967
let offset_from_center = pos - mean_pos;
@@ -974,6 +992,7 @@ impl MessageHandler<PortfolioMessage, PortfolioMessageData<'_>> for PortfolioMes
974992
}
975993
}
976994
}
995+
977996
PortfolioMessage::PasteImage {
978997
name,
979998
image,

0 commit comments

Comments
 (0)