Introduce fill rule setting in canvas

This commit is contained in:
Héctor Ramón Jiménez 2020-06-02 02:21:07 +02:00
parent b96d87ff69
commit ede4440e99
3 changed files with 57 additions and 24 deletions

View file

@ -92,29 +92,22 @@ impl Frame {
BuffersBuilder, FillOptions, FillTessellator,
};
let Fill { color, rule } = fill.into();
let mut buffers = BuffersBuilder::new(
&mut self.buffers,
FillVertex(match fill.into() {
Fill::Color(color) => color.into_linear(),
}),
FillVertex(color.into_linear()),
);
let mut tessellator = FillTessellator::new();
let options = FillOptions::default().with_fill_rule(rule.into());
let result = if self.transforms.current.is_identity {
tessellator.tessellate_path(
path.raw(),
&FillOptions::default(),
&mut buffers,
)
tessellator.tessellate_path(path.raw(), &options, &mut buffers)
} else {
let path = path.transformed(&self.transforms.current.raw);
tessellator.tessellate_path(
path.raw(),
&FillOptions::default(),
&mut buffers,
)
tessellator.tessellate_path(path.raw(), &options, &mut buffers)
};
let _ = result.expect("Tessellate path");
@ -132,11 +125,11 @@ impl Frame {
) {
use lyon::tessellation::{BuffersBuilder, FillOptions};
let Fill { color, rule } = fill.into();
let mut buffers = BuffersBuilder::new(
&mut self.buffers,
FillVertex(match fill.into() {
Fill::Color(color) => color.into_linear(),
}),
FillVertex(color.into_linear()),
);
let top_left =
@ -151,7 +144,7 @@ impl Frame {
let _ = lyon::tessellation::basic_shapes::fill_rectangle(
&lyon::math::Rect::new(top_left, size.into()),
&FillOptions::default(),
&FillOptions::default().with_fill_rule(rule.into()),
&mut buffers,
)
.expect("Fill rectangle");