summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJovansonlee Cesar <ivanceras@gmail.com>2021-07-05 07:32:53 +0800
committerJovansonlee Cesar <ivanceras@gmail.com>2021-07-05 07:32:53 +0800
commit98ad45f90aa6252c191aee3f25f6b4f1e18107fc (patch)
treee56fe41d82fc017994847c497a72b662a99b7f1f
parent941f3b07e776e9ac31fb380527e8c2bf1ead88d0 (diff)
refactor group_node_and_fragments to clearly group the fragments first, as this will be used to test for fragment hit test
-rw-r--r--svgbob/src/buffer/cell_buffer.rs34
1 files changed, 25 insertions, 9 deletions
diff --git a/svgbob/src/buffer/cell_buffer.rs b/svgbob/src/buffer/cell_buffer.rs
index d14c13a..c0f4d73 100644
--- a/svgbob/src/buffer/cell_buffer.rs
+++ b/svgbob/src/buffer/cell_buffer.rs
@@ -192,11 +192,11 @@ impl CellBuffer {
svg_node
}
- /// group nodes that can be group and the rest will be fragments
- fn group_nodes_and_fragments<MSG>(
+ /// returns (single_member, grouped, rest of the fragments
+ fn group_single_members_from_other_fragments(
&self,
settings: &Settings,
- ) -> (Vec<Node<MSG>>, Vec<Fragment>) {
+ ) -> (Vec<Fragment>, Vec<Vec<Fragment>>, Vec<Fragment>) {
// vec_fragments are the fragment result of successful endorsement
//
// vec_groups are not endorsed, but are still touching, these will be grouped together in
@@ -223,11 +223,28 @@ impl CellBuffer {
.flat_map(|contact| contact.0)
.collect();
- let group_nodes: Vec<Node<MSG>> = vec_groups
+ let vec_groups: Vec<Vec<Fragment>> =
+ vec_groups.into_iter().map(|contact| contact.0).collect();
+
+ let vec_fragments: Vec<Fragment> =
+ vec_fragments.into_iter().flatten().collect();
+
+ (single_member_fragments, vec_groups, vec_fragments)
+ }
+
+ /// group nodes that can be group and the rest will be fragments
+ fn group_nodes_and_fragments<MSG>(
+ &self,
+ settings: &Settings,
+ ) -> (Vec<Node<MSG>>, Vec<Fragment>) {
+ let (single_member_fragments, vec_group_fragments, vec_fragments) =
+ self.group_single_members_from_other_fragments(settings);
+
+ // grouped fragments will be rendered as svg groups
+ let group_nodes: Vec<Node<MSG>> = vec_group_fragments
.into_iter()
- .map(|contact| contact.0)
- .map(move |contacts| {
- let group_members = contacts
+ .map(move |fragments| {
+ let group_members = fragments
.iter()
.map(move |gfrag| {
let scaled = gfrag.scale(settings.scale);
@@ -239,8 +256,7 @@ impl CellBuffer {
})
.collect();
- let mut fragments: Vec<Fragment> =
- vec_fragments.into_iter().flatten().collect();
+ let mut fragments: Vec<Fragment> = vec_fragments;
fragments.extend(single_member_fragments);
fragments.extend(self.escaped_text_nodes());