diff options
author | 2020-06-02 22:43:21 +0200 | |
---|---|---|
committer | 2020-06-02 22:43:21 +0200 | |
commit | e7f0d3809b0648d1b05e85df61d943e0f2d4658d (patch) | |
tree | 5f6e286cea2dba3f4208b46cb512350cc698efbf /graphics/src/widget/canvas/fill.rs | |
parent | 94af34884667e78e231fb1904ae3e9fa785c9a7a (diff) | |
parent | ede4440e997191c947697ee7aab89f32b9d0b2ea (diff) | |
download | iced-e7f0d3809b0648d1b05e85df61d943e0f2d4658d.tar.gz iced-e7f0d3809b0648d1b05e85df61d943e0f2d4658d.tar.bz2 iced-e7f0d3809b0648d1b05e85df61d943e0f2d4658d.zip |
Merge pull request #379 from hecrj/canvas-fill-rule
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, + } } } |