mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2025-08-04 13:30:48 +00:00
Allow multiple top output wires to come from layers (#2049)
* Allow multiple outputs from layer * Stable Ids for Flatten Vector Elements * Clippy
This commit is contained in:
parent
9d13a8f73b
commit
6b1356fe13
5 changed files with 121 additions and 109 deletions
|
@ -758,17 +758,27 @@ impl bezier_rs::Identifier for PointId {
|
|||
}
|
||||
|
||||
impl crate::vector::ConcatElement for super::VectorData {
|
||||
fn concat(&mut self, other: &Self, transform: glam::DAffine2) {
|
||||
let new_ids = other.point_domain.id.iter().filter(|id| self.point_domain.id.contains(id)).map(|&old| (old, PointId::generate()));
|
||||
fn concat(&mut self, other: &Self, transform: glam::DAffine2, node_id: u64) {
|
||||
let new_ids = other
|
||||
.point_domain
|
||||
.id
|
||||
.iter()
|
||||
.filter(|id| self.point_domain.id.contains(id))
|
||||
.map(|&old| (old, old.generate_from_hash(node_id)));
|
||||
let point_map = new_ids.collect::<HashMap<_, _>>();
|
||||
let new_ids = other
|
||||
.segment_domain
|
||||
.ids
|
||||
.iter()
|
||||
.filter(|id| self.segment_domain.ids.contains(id))
|
||||
.map(|&old| (old, SegmentId::generate()));
|
||||
.map(|&old| (old, old.generate_from_hash(node_id)));
|
||||
let segment_map = new_ids.collect::<HashMap<_, _>>();
|
||||
let new_ids = other.region_domain.ids.iter().filter(|id| self.region_domain.ids.contains(id)).map(|&old| (old, RegionId::generate()));
|
||||
let new_ids = other
|
||||
.region_domain
|
||||
.ids
|
||||
.iter()
|
||||
.filter(|id| self.region_domain.ids.contains(id))
|
||||
.map(|&old| (old, old.generate_from_hash(node_id)));
|
||||
let region_map = new_ids.collect::<HashMap<_, _>>();
|
||||
let id_map = IdMap {
|
||||
point_offset: self.point_domain.ids().len(),
|
||||
|
|
|
@ -178,11 +178,11 @@ impl SegmentModification {
|
|||
let Some(&stroke) = self.stroke.get(&add_id) else { continue };
|
||||
|
||||
let Some(start_index) = point_domain.resolve_id(start) else {
|
||||
warn!("invalid start id");
|
||||
warn!("invalid start id: {:#?}", start);
|
||||
continue;
|
||||
};
|
||||
let Some(end_index) = point_domain.resolve_id(end) else {
|
||||
warn!("invalid end id");
|
||||
warn!("invalid end id: {:#?}", end);
|
||||
continue;
|
||||
};
|
||||
|
||||
|
|
|
@ -548,10 +548,10 @@ async fn flatten_vector_elements<F: 'n + Send>(
|
|||
let graphic_group = graphic_group_input.eval(footprint).await;
|
||||
|
||||
fn concat_group(graphic_group: &GraphicGroup, current_transform: DAffine2, result: &mut VectorData) {
|
||||
for (element, _) in graphic_group.iter() {
|
||||
for (element, reference) in graphic_group.iter() {
|
||||
match element {
|
||||
GraphicElement::VectorData(vector_data) => {
|
||||
result.concat(vector_data, current_transform);
|
||||
result.concat(vector_data, current_transform, reference.map(|node_id| node_id.0).unwrap_or_default());
|
||||
}
|
||||
GraphicElement::GraphicGroup(graphic_group) => {
|
||||
concat_group(graphic_group, current_transform * graphic_group.transform, result);
|
||||
|
@ -565,15 +565,16 @@ async fn flatten_vector_elements<F: 'n + Send>(
|
|||
concat_group(&graphic_group, DAffine2::IDENTITY, &mut result);
|
||||
// TODO: This leads to incorrect stroke widths when flattening groups with different transforms.
|
||||
result.style.set_stroke_transform(DAffine2::IDENTITY);
|
||||
|
||||
result
|
||||
}
|
||||
|
||||
pub trait ConcatElement {
|
||||
fn concat(&mut self, other: &Self, transform: DAffine2);
|
||||
fn concat(&mut self, other: &Self, transform: DAffine2, node_id: u64);
|
||||
}
|
||||
|
||||
impl ConcatElement for GraphicGroup {
|
||||
fn concat(&mut self, other: &Self, transform: DAffine2) {
|
||||
fn concat(&mut self, other: &Self, transform: DAffine2, _node_id: u64) {
|
||||
// TODO: Decide if we want to keep this behavior whereby the layers are flattened
|
||||
for (mut element, footprint_mapping) in other.iter().cloned() {
|
||||
*element.transform_mut() = transform * element.transform() * other.transform();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue