Skip to content

Commit

Permalink
Add click targets for Graphic Groups
Browse files Browse the repository at this point in the history
  • Loading branch information
TrueDoctor committed Jan 23, 2024
1 parent b53cac0 commit ac09e0f
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -226,16 +226,23 @@ impl DocumentMetadata {
impl DocumentMetadata {
/// Update the cached click targets of the layers
pub fn update_click_targets(&mut self, new_click_targets: HashMap<LayerNodeIdentifier, Vec<ClickTarget>>) {
log::debug!("click_targets: {:?}", new_click_targets);
self.click_targets = new_click_targets;
}

/// Get the bounding box of the click target of the specified layer in the specified transform space
pub fn bounding_box_with_transform(&self, layer: LayerNodeIdentifier, transform: DAffine2) -> Option<[DVec2; 2]> {
self.click_targets
// log::debug!("click_target: {:?}", self.click_targets.get(&layer));

let bbox = self
.click_targets
.get(&layer)?
.iter()
.filter_map(|click_target| click_target.subpath.bounding_box_with_transform(transform))
.reduce(Quad::combine_bounds)
.reduce(Quad::combine_bounds);

// log::debug!("bounding_boux: {:?}", bbox);
bbox
}

/// Calculate the corners of the bounding box but with a nonzero size.
Expand Down
2 changes: 1 addition & 1 deletion editor/src/messages/tool/common_functionality/pivot.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ pub struct Pivot {
impl Default for Pivot {
fn default() -> Self {
Self {
pivot: Some(DVec2::ONE),
pivot: None,
viewport_pos: DVec2::ZERO,
}
}
Expand Down
5 changes: 5 additions & 0 deletions editor/src/messages/tool/tool_messages/select_tool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -388,6 +388,7 @@ impl Fsm for SelectToolFsmState {
let selected_layers_count = document.selected_nodes.selected_layers(document.metadata()).count();
tool_data.selected_layers_changed = selected_layers_count != tool_data.selected_layers_count;
tool_data.selected_layers_count = selected_layers_count;
log::debug!("selected_layers: {}", selected_layers_count);

// Outline selected layers
for layer in document.selected_nodes.selected_visible_layers(document.network(), document.metadata()) {
Expand All @@ -407,6 +408,7 @@ impl Fsm for SelectToolFsmState {
.selected_visible_layers(document.network(), document.metadata())
.next()
.map(|layer| document.metadata().transform_to_viewport(layer));
log::debug!("transform: {:?}", transform);
let transform = transform.unwrap_or(DAffine2::IDENTITY);
let bounds = document
.selected_nodes
Expand All @@ -417,6 +419,7 @@ impl Fsm for SelectToolFsmState {
.bounding_box_with_transform(layer, transform.inverse() * document.metadata().transform_to_viewport(layer))
})
.reduce(graphene_core::renderer::Quad::combine_bounds);
log::debug!("bounds: {:?}", bounds);
if let Some(bounds) = bounds {
let bounding_box_manager = tool_data.bounding_box_manager.get_or_insert(BoundingBoxManager::default());

Expand Down Expand Up @@ -506,6 +509,7 @@ impl Fsm for SelectToolFsmState {
&ToolType::Select,
);
bounds.center_of_transformation = selected.mean_average_of_pivots();
tool_data.pivot.set_viewport_position(bounds.center_of_transformation, document, responses);
}
tool_data.get_snap_candidates(document, input);

Expand All @@ -527,6 +531,7 @@ impl Fsm for SelectToolFsmState {
);

bounds.center_of_transformation = selected.mean_average_of_pivots();
tool_data.pivot.set_viewport_position(bounds.center_of_transformation, document, responses);
}

tool_data.layers_dragging = selected;
Expand Down
12 changes: 11 additions & 1 deletion node-graph/gcore/src/graphic_element/renderer.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
mod quad;

use crate::raster::{BlendMode, Image, ImageFrame};
use crate::transform::{Transform, TransformMut};
use crate::uuid::{generate_uuid, ManipulatorGroupId};
use crate::{vector::VectorData, Artboard, Color, GraphicElement, GraphicGroup};
pub use quad::Quad;
Expand Down Expand Up @@ -262,7 +263,16 @@ impl GraphicElementRendered for GraphicGroup {
self.iter().filter_map(|element| element.bounding_box(transform * self.transform)).reduce(Quad::combine_bounds)
}

fn add_click_targets(&self, _click_targets: &mut Vec<ClickTarget>) {}
fn add_click_targets(&self, click_targets: &mut Vec<ClickTarget>) {
for mut element in self.elements.iter().cloned() {
let mut new_click_targets = Vec::new();
element.add_click_targets(&mut new_click_targets);
for click_target in new_click_targets.iter_mut() {
click_target.subpath.apply_transform(element.transform())
}
click_targets.extend(new_click_targets);
}
}

fn to_usvg_node(&self) -> usvg::Node {
let root_node = usvg::Node::new(usvg::NodeKind::Group(usvg::Group::default()));
Expand Down

0 comments on commit ac09e0f

Please sign in to comment.