This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

1use itertools::Itertools; 2use measure_time::debug_time; 3 4use crate::Object; 5 6use super::{ 7 CSSRenderable, SVGAttributesRenderable, renderable::SVGRenderable, svg, 8}; 9 10impl SVGRenderable for Object { 11 fn render_to_svg( 12 &self, 13 colormap: crate::ColorMapping, 14 cell_size: usize, 15 object_sizes: crate::graphics::objects::ObjectSizes, 16 id: &str, 17 ) -> anyhow::Result<svg::Node> { 18 debug_time!("render_to_svg/colored_object"); 19 let plain_obj = self.shape.render_to_svg( 20 colormap.clone(), 21 cell_size, 22 object_sizes, 23 id, 24 )?; 25 26 let mut css = self 27 .fill 28 .render_to_css(&colormap.clone(), !self.shape.fillable()); 29 30 let object_svg = if !self.transformations.is_empty() 31 || !self.filters.is_empty() 32 { 33 // transform-box is not supported by resvg yet 34 // css += "transform-box: fill-box; transform-origin: 50% 50%;"; 35 36 let (center_x, center_y) = 37 self.shape.region().center_coords(cell_size); 38 39 css += &format!("transform-origin: {center_x}px {center_y}px;"); 40 41 css += self 42 .filters 43 .iter() 44 .map(|f| f.render_to_css_filled(&colormap)) 45 .join(" ") 46 .as_ref(); 47 48 svg::tag("g") 49 .dataset("object", id) 50 .with_attributes(self.transformations.render_to_svg_attributes( 51 colormap, 52 cell_size, 53 object_sizes, 54 id, 55 )?) 56 .wrapping(vec![plain_obj]) 57 .attr("style", &css) 58 .into() 59 } else { 60 match plain_obj { 61 svg::Node::Element(el) => el.attr("style", &css).into(), 62 _ => plain_obj, 63 } 64 }; 65 66 if let Some(region) = &self.clip_to { 67 Ok(svg::tag("g") 68 .attr("clip-path", region.clip_path_id()) 69 .child(object_svg) 70 .into()) 71 } else { 72 Ok(object_svg) 73 } 74 } 75}