This repository has no description
0

Configure Feed

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

1use measure_time::debug_time; 2 3use crate::{ColorMapping, Filter, FilterType}; 4 5use super::{renderable::SVGRenderable, CSSRenderable}; 6 7impl SVGRenderable for Filter { 8 fn render_to_svg( 9 &self, 10 _colormap: crate::ColorMapping, 11 _cell_size: usize, 12 _object_sizes: crate::graphics::objects::ObjectSizes, 13 _id: &str, 14 ) -> anyhow::Result<svg::node::element::Element> { 15 { 16 debug_time!("render_to_svg/filter"); 17 Ok(match self.kind { 18 FilterType::Glow => { 19 // format!( 20 // r#" 21 // <filter id="glow"> 22 // <feGaussianBlur stdDeviation="{}" result="coloredBlur"/> 23 // <feMerge> 24 // <feMergeNode in="coloredBlur"/> 25 // <feMergeNode in="SourceGraphic"/> 26 // </feMerge> 27 // </filter> 28 // "#, 29 // 2.5 30 // ) // TODO parameterize stdDeviation 31 svg::node::element::Filter::new() 32 .add( 33 // TODO parameterize stdDeviation 34 svg::node::element::FilterEffectGaussianBlur::new() 35 .set("stdDeviation", self.parameter) 36 .set("result", "coloredBlur"), 37 ) 38 .add( 39 svg::node::element::FilterEffectMerge::new() 40 .add( 41 svg::node::element::FilterEffectMergeNode::new() 42 .set("in", "coloredBlur"), 43 ) 44 .add( 45 svg::node::element::FilterEffectMergeNode::new() 46 .set("in", "SourceGraphic"), 47 ), 48 ) 49 } 50 FilterType::NaturalShadow => { 51 /* 52 <filter id="natural-shadow-filter" x="0" y="0" width="2" height="2"> 53 <feOffset in="SourceGraphic" dx="3" dy="3" /> 54 <feGaussianBlur stdDeviation="12" result="blur" /> 55 <feMerge> 56 <feMergeNode in="blur" /> 57 <feMergeNode in="SourceGraphic" /> 58 </feMerge> 59 </filter> 60 */ 61 svg::node::element::Filter::new() 62 .add( 63 svg::node::element::FilterEffectOffset::new() 64 .set("in", "SourceGraphic") 65 .set("dx", self.parameter) 66 .set("dy", self.parameter), 67 ) 68 .add( 69 svg::node::element::FilterEffectGaussianBlur::new() 70 .set("stdDeviation", self.parameter * 4.0) 71 .set("result", "blur"), 72 ) 73 .add( 74 svg::node::element::FilterEffectMerge::new() 75 .add( 76 svg::node::element::FilterEffectMergeNode::new() 77 .set("in", "blur"), 78 ) 79 .add( 80 svg::node::element::FilterEffectMergeNode::new() 81 .set("in", "SourceGraphic"), 82 ), 83 ) 84 } 85 FilterType::Saturation => { 86 /* 87 <filter id="saturation"> 88 <feColorMatrix type="saturate" values="0.5"/> 89 </filter> 90 */ 91 svg::node::element::Filter::new().add( 92 svg::node::element::FilterEffectColorMatrix::new() 93 .set("type", "saturate") 94 .set("values", self.parameter), 95 ) 96 } 97 } 98 .set("id", self.id()) 99 .set("filterUnit", "userSpaceOnUse") 100 .into()) 101 } 102 } 103} 104 105impl CSSRenderable for Filter { 106 fn render_to_css_filled(&self, _colormap: &ColorMapping) -> String { 107 format!("filter: url(#{}); overflow: visible;", self.id()) 108 } 109 110 fn render_to_css_stroked(&self, colormap: &ColorMapping) -> String { 111 self.render_to_css_filled(colormap) 112 } 113}