mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2025-08-31 18:27:20 +00:00
Add Table<Color> as a graphical type (#3033)
* Reduce code duplication in bounding box impls on Table * Working Table<Color> rendering in the graph * Implement color and fix other rendering with Vello and polish
This commit is contained in:
parent
81abfe147a
commit
2f4aef34e5
24 changed files with 462 additions and 198 deletions
|
@ -8,6 +8,7 @@ use graphene_core::math::bbox::Bbox;
|
|||
use graphene_core::raster::image::Image;
|
||||
use graphene_core::raster_types::{CPU, Raster};
|
||||
use graphene_core::table::Table;
|
||||
#[cfg(target_family = "wasm")]
|
||||
use graphene_core::transform::Footprint;
|
||||
use graphene_core::vector::Vector;
|
||||
use graphene_core::{Color, Context, Ctx, ExtractFootprint, Graphic, OwnedContextImpl, WasmNotSend};
|
||||
|
@ -137,7 +138,9 @@ fn decode_image(_: impl Ctx, data: Arc<[u8]>) -> Table<Raster<CPU>> {
|
|||
Table::new_from_element(Raster::new_cpu(image))
|
||||
}
|
||||
|
||||
fn render_svg(data: impl Render, mut render: SvgRender, render_params: RenderParams, footprint: Footprint) -> RenderOutputType {
|
||||
fn render_svg(data: impl Render, mut render: SvgRender, render_params: RenderParams) -> RenderOutputType {
|
||||
let footprint = render_params.footprint;
|
||||
|
||||
if !data.contains_artboard() && !render_params.hide_artboards {
|
||||
render.leaf_tag("rect", |attributes| {
|
||||
attributes.push("x", "0");
|
||||
|
@ -217,6 +220,7 @@ async fn rasterize<T: WasmNotSend + 'n>(
|
|||
Table<Vector>,
|
||||
Table<Raster<CPU>>,
|
||||
Table<Graphic>,
|
||||
Table<Color>,
|
||||
)]
|
||||
mut data: Table<T>,
|
||||
footprint: Footprint,
|
||||
|
@ -237,7 +241,7 @@ where
|
|||
let size = aabb.size();
|
||||
let resolution = footprint.resolution;
|
||||
let render_params = RenderParams {
|
||||
culling_bounds: None,
|
||||
footprint,
|
||||
for_export: true,
|
||||
..Default::default()
|
||||
};
|
||||
|
@ -282,11 +286,11 @@ async fn render<'a: 'n, T: 'n + Render + WasmNotSend>(
|
|||
render_config: RenderConfig,
|
||||
editor_api: impl Node<Context<'static>, Output = &'a WasmEditorApi>,
|
||||
#[implementations(
|
||||
Context -> Table<Artboard>,
|
||||
Context -> Table<Graphic>,
|
||||
Context -> Table<Vector>,
|
||||
Context -> Table<Raster<CPU>>,
|
||||
Context -> Table<Graphic>,
|
||||
Context -> Table<Artboard>,
|
||||
Context -> Artboard,
|
||||
Context -> Table<Color>,
|
||||
Context -> Option<Color>,
|
||||
Context -> Vec<Color>,
|
||||
Context -> bool,
|
||||
|
@ -308,7 +312,7 @@ async fn render<'a: 'n, T: 'n + Render + WasmNotSend>(
|
|||
let RenderConfig { hide_artboards, for_export, .. } = render_config;
|
||||
let render_params = RenderParams {
|
||||
view_mode: render_config.view_mode,
|
||||
culling_bounds: None,
|
||||
footprint,
|
||||
thumbnail: false,
|
||||
hide_artboards,
|
||||
for_export,
|
||||
|
@ -333,7 +337,7 @@ async fn render<'a: 'n, T: 'n + Render + WasmNotSend>(
|
|||
|
||||
let output_format = render_config.export_format;
|
||||
let data = match output_format {
|
||||
ExportFormat::Svg => render_svg(data, SvgRender::new(), render_params, footprint),
|
||||
ExportFormat::Svg => render_svg(data, SvgRender::new(), render_params),
|
||||
ExportFormat::Canvas => {
|
||||
if use_vello && editor_api.application_io.as_ref().unwrap().gpu_executor().is_some() {
|
||||
#[cfg(all(feature = "vello", not(test)))]
|
||||
|
@ -342,9 +346,9 @@ async fn render<'a: 'n, T: 'n + Render + WasmNotSend>(
|
|||
metadata,
|
||||
};
|
||||
#[cfg(any(not(feature = "vello"), test))]
|
||||
render_svg(data, SvgRender::new(), render_params, footprint)
|
||||
render_svg(data, SvgRender::new(), render_params)
|
||||
} else {
|
||||
render_svg(data, SvgRender::new(), render_params, footprint)
|
||||
render_svg(data, SvgRender::new(), render_params)
|
||||
}
|
||||
}
|
||||
_ => todo!("Non-SVG render output for {output_format:?}"),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue