diff options
author | 2020-06-02 02:21:07 +0200 | |
---|---|---|
committer | 2020-06-02 02:21:07 +0200 | |
commit | ede4440e997191c947697ee7aab89f32b9d0b2ea (patch) | |
tree | 166eac740a736d3effbd4054509a61ee12f58666 /graphics/src/widget/canvas/fill.rs | |
parent | b96d87ff6917e7dc75178e4c623d20d577ef583f (diff) | |
download | iced-ede4440e997191c947697ee7aab89f32b9d0b2ea.tar.gz iced-ede4440e997191c947697ee7aab89f32b9d0b2ea.tar.bz2 iced-ede4440e997191c947697ee7aab89f32b9d0b2ea.zip |
Introduce fill rule setting in `canvas`
Diffstat (limited to 'graphics/src/widget/canvas/fill.rs')
-rw-r--r-- | graphics/src/widget/canvas/fill.rs | 50 |
1 files changed, 45 insertions, 5 deletions
diff --git a/graphics/src/widget/canvas/fill.rs b/graphics/src/widget/canvas/fill.rs index a2010e45..56495435 100644 --- a/graphics/src/widget/canvas/fill.rs +++ b/graphics/src/widget/canvas/fill.rs @@ -2,19 +2,59 @@ use iced_native::Color; /// The style used to fill geometry. #[derive(Debug, Clone, Copy)] -pub enum Fill { - /// Fill with a color. - Color(Color), +pub struct Fill { + /// The color used to fill geometry. + /// + /// By default, it is set to `BLACK`. + pub color: Color, + + /// The fill rule defines how to determine what is inside and what is + /// outside of a shape. + /// + /// See the [SVG specification][1] for more details. + /// + /// By default, it is set to `NonZero`. + /// + /// [1]: https://www.w3.org/TR/SVG/painting.html#FillRuleProperty + pub rule: FillRule, } impl Default for Fill { fn default() -> Fill { - Fill::Color(Color::BLACK) + Fill { + color: Color::BLACK, + rule: FillRule::NonZero, + } } } impl From<Color> for Fill { fn from(color: Color) -> Fill { - Fill::Color(color) + Fill { + color, + ..Fill::default() + } + } +} + +/// The fill rule defines how to determine what is inside and what is outside of +/// a shape. +/// +/// See the [SVG specification][1]. +/// +/// [1]: https://www.w3.org/TR/SVG/painting.html#FillRuleProperty +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[allow(missing_docs)] +pub enum FillRule { + NonZero, + EvenOdd, +} + +impl From<FillRule> for lyon::tessellation::FillRule { + fn from(rule: FillRule) -> lyon::tessellation::FillRule { + match rule { + FillRule::NonZero => lyon::tessellation::FillRule::NonZero, + FillRule::EvenOdd => lyon::tessellation::FillRule::EvenOdd, + } } } |