1 use super::color::{Color, RGBAColor}; 2 use plotters_backend::{BackendColor, BackendStyle}; 3 4 /// Style for any shape 5 #[derive(Copy, Clone)] 6 pub struct ShapeStyle { 7 /// Specification of the color. 8 pub color: RGBAColor, 9 /// Whether the style is filled with color. 10 pub filled: bool, 11 /// Stroke width. 12 pub stroke_width: u32, 13 } 14 15 impl ShapeStyle { 16 /** 17 Returns a filled style with the same color and stroke width. 18 19 # Example 20 21 ``` 22 use plotters::prelude::*; 23 let original_style = ShapeStyle { 24 color: BLUE.mix(0.6), 25 filled: false, 26 stroke_width: 2, 27 }; 28 let filled_style = original_style.filled(); 29 let drawing_area = SVGBackend::new("shape_style_filled.svg", (400, 200)).into_drawing_area(); 30 drawing_area.fill(&WHITE).unwrap(); 31 drawing_area.draw(&Circle::new((150, 100), 90, original_style)); 32 drawing_area.draw(&Circle::new((250, 100), 90, filled_style)); 33 ``` 34 35 The result is a figure with two circles, one of them filled: 36 37 ![](https://cdn.jsdelivr.net/gh/facorread/plotters-doc-data@b0b94d5/apidoc/shape_style_filled.svg) 38 */ filled(&self) -> Self39 pub fn filled(&self) -> Self { 40 Self { 41 color: self.color.to_rgba(), 42 filled: true, 43 stroke_width: self.stroke_width, 44 } 45 } 46 47 /** 48 Returns a new style with the same color and the specified stroke width. 49 50 # Example 51 52 ``` 53 use plotters::prelude::*; 54 let original_style = ShapeStyle { 55 color: BLUE.mix(0.6), 56 filled: false, 57 stroke_width: 2, 58 }; 59 let new_style = original_style.stroke_width(5); 60 let drawing_area = SVGBackend::new("shape_style_stroke_width.svg", (400, 200)).into_drawing_area(); 61 drawing_area.fill(&WHITE).unwrap(); 62 drawing_area.draw(&Circle::new((150, 100), 90, original_style)); 63 drawing_area.draw(&Circle::new((250, 100), 90, new_style)); 64 ``` 65 66 The result is a figure with two circles, one of them thicker than the other: 67 68 ![](https://cdn.jsdelivr.net/gh/facorread/plotters-doc-data@b0b94d5/apidoc/shape_style_stroke_width.svg) 69 */ stroke_width(&self, width: u32) -> Self70 pub fn stroke_width(&self, width: u32) -> Self { 71 Self { 72 color: self.color.to_rgba(), 73 filled: self.filled, 74 stroke_width: width, 75 } 76 } 77 } 78 79 impl<T: Color> From<T> for ShapeStyle { from(f: T) -> Self80 fn from(f: T) -> Self { 81 ShapeStyle { 82 color: f.to_rgba(), 83 filled: false, 84 stroke_width: 1, 85 } 86 } 87 } 88 89 impl BackendStyle for ShapeStyle { 90 /// Returns the color as interpreted by the backend. color(&self) -> BackendColor91 fn color(&self) -> BackendColor { 92 self.color.to_backend_color() 93 } 94 /// Returns the stroke width. stroke_width(&self) -> u3295 fn stroke_width(&self) -> u32 { 96 self.stroke_width 97 } 98 } 99