mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-30 12:28:12 +08:00
Render groups through the legacy conversion
This commit is contained in:
@@ -553,7 +553,7 @@ impl Render for Graphic {
|
|||||||
Graphic::Color(list) => list.render_svg(render, render_params),
|
Graphic::Color(list) => list.render_svg(render, render_params),
|
||||||
Graphic::Gradient(list) => list.render_svg(render, render_params),
|
Graphic::Gradient(list) => list.render_svg(render, render_params),
|
||||||
Graphic::Text(list) => list.render_svg(render, render_params),
|
Graphic::Text(list) => list.render_svg(render, render_params),
|
||||||
Graphic::Group(_) => (),
|
Graphic::Group(group) => graphic_types::graphic::group_to_legacy_list(group).render_svg(render, render_params),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -566,14 +566,16 @@ impl Render for Graphic {
|
|||||||
Graphic::Color(list) => list.render_to_vello(scene, transform, context, render_params),
|
Graphic::Color(list) => list.render_to_vello(scene, transform, context, render_params),
|
||||||
Graphic::Gradient(list) => list.render_to_vello(scene, transform, context, render_params),
|
Graphic::Gradient(list) => list.render_to_vello(scene, transform, context, render_params),
|
||||||
Graphic::Text(list) => list.render_to_vello(scene, transform, context, render_params),
|
Graphic::Text(list) => list.render_to_vello(scene, transform, context, render_params),
|
||||||
Graphic::Group(_) => (),
|
Graphic::Group(group) => graphic_types::graphic::group_to_legacy_list(group).render_to_vello(scene, transform, context, render_params),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn collect_metadata(&self, metadata: &mut RenderMetadata, footprint: Footprint, element_id: Option<NodeId>) {
|
fn collect_metadata(&self, metadata: &mut RenderMetadata, footprint: Footprint, element_id: Option<NodeId>) {
|
||||||
if let Some(element_id) = element_id {
|
if let Some(element_id) = element_id {
|
||||||
match self {
|
match self {
|
||||||
Graphic::Group(_) => {}
|
Graphic::Group(_) => {
|
||||||
|
metadata.upstream_footprints.insert(element_id, footprint);
|
||||||
|
}
|
||||||
Graphic::Graphic(_) => {
|
Graphic::Graphic(_) => {
|
||||||
metadata.upstream_footprints.insert(element_id, footprint);
|
metadata.upstream_footprints.insert(element_id, footprint);
|
||||||
}
|
}
|
||||||
@@ -640,7 +642,7 @@ impl Render for Graphic {
|
|||||||
Graphic::Color(list) => list.collect_metadata(metadata, footprint, element_id),
|
Graphic::Color(list) => list.collect_metadata(metadata, footprint, element_id),
|
||||||
Graphic::Gradient(list) => list.collect_metadata(metadata, footprint, element_id),
|
Graphic::Gradient(list) => list.collect_metadata(metadata, footprint, element_id),
|
||||||
Graphic::Text(list) => list.collect_metadata(metadata, footprint, element_id),
|
Graphic::Text(list) => list.collect_metadata(metadata, footprint, element_id),
|
||||||
Graphic::Group(_) => (),
|
Graphic::Group(group) => graphic_types::graphic::group_to_legacy_list(group).collect_metadata(metadata, footprint, element_id),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -653,7 +655,7 @@ impl Render for Graphic {
|
|||||||
Graphic::Color(list) => list.add_upstream_click_targets(click_targets),
|
Graphic::Color(list) => list.add_upstream_click_targets(click_targets),
|
||||||
Graphic::Gradient(list) => list.add_upstream_click_targets(click_targets),
|
Graphic::Gradient(list) => list.add_upstream_click_targets(click_targets),
|
||||||
Graphic::Text(list) => list.add_upstream_click_targets(click_targets),
|
Graphic::Text(list) => list.add_upstream_click_targets(click_targets),
|
||||||
Graphic::Group(_) => (),
|
Graphic::Group(group) => graphic_types::graphic::group_to_legacy_list(group).add_upstream_click_targets(click_targets),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -666,7 +668,7 @@ impl Render for Graphic {
|
|||||||
Graphic::Color(list) => list.add_upstream_outline_targets(outlines),
|
Graphic::Color(list) => list.add_upstream_outline_targets(outlines),
|
||||||
Graphic::Gradient(list) => list.add_upstream_outline_targets(outlines),
|
Graphic::Gradient(list) => list.add_upstream_outline_targets(outlines),
|
||||||
Graphic::Text(list) => list.add_upstream_outline_targets(outlines),
|
Graphic::Text(list) => list.add_upstream_outline_targets(outlines),
|
||||||
Graphic::Group(_) => (),
|
Graphic::Group(group) => graphic_types::graphic::group_to_legacy_list(group).add_upstream_outline_targets(outlines),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -631,6 +631,37 @@ mod tests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn a_group_converts_to_its_legacy_list() {
|
||||||
|
let arena = Arena::new(1 << 16).unwrap();
|
||||||
|
let generations = [];
|
||||||
|
let scope = scope_fixture(&generations, &arena);
|
||||||
|
let ctx = ContextImpl::root(&scope);
|
||||||
|
|
||||||
|
let layout = graphic_layout();
|
||||||
|
let rows = vec![(text("a"), translation(1.)), (text("b"), translation(2.))];
|
||||||
|
let node = install(
|
||||||
|
WrapNode::new(RecordSource::new(GraphicSource { layout: layout.clone(), rows, }, &layout, &layout), &layout),
|
||||||
|
wrap_layout_meta(),
|
||||||
|
&[Some(&layout)],
|
||||||
|
);
|
||||||
|
let out = Node::<ContextImpl>::layout(&node).clone();
|
||||||
|
let head = ctx.index_head();
|
||||||
|
let GPoll::Final(value) = node.eval(&ctx.promoted(&head, 0)) else {
|
||||||
|
panic!("expected a final record");
|
||||||
|
};
|
||||||
|
let Graphic::Group(group) = (unsafe { record::borrow_element::<Graphic>(out.rec(&value)) }) else {
|
||||||
|
panic!("expected a group element");
|
||||||
|
};
|
||||||
|
|
||||||
|
let legacy = graphic_types::graphic::group_to_legacy_list(group);
|
||||||
|
assert_eq!(legacy.len(), 2);
|
||||||
|
for (index, (label, x)) in [("a", 1.), ("b", 2.)].into_iter().enumerate() {
|
||||||
|
assert_eq!(text_of(legacy.element(index).unwrap()), label, "item {index}");
|
||||||
|
assert_eq!(legacy.attribute_cloned_or_default::<DAffine2>(ATTR_TRANSFORM, index).translation.x, x, "item {index}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn flatten_reverses_wrap() {
|
fn flatten_reverses_wrap() {
|
||||||
let arena = Arena::new(1 << 16).unwrap();
|
let arena = Arena::new(1 << 16).unwrap();
|
||||||
|
|||||||
Reference in New Issue
Block a user