Implement fill() for raqote::DrawTarget

This commit is contained in:
pylbrecht 2019-07-07 20:26:10 +02:00 committed by Bastien Orivel
parent 4e51caeb7e
commit 398929ffef
2 changed files with 35 additions and 10 deletions

View file

@ -352,11 +352,11 @@ pub enum Path {
} }
#[derive(Clone)] #[derive(Clone)]
pub enum Pattern { pub enum Pattern<'a> {
#[cfg(feature = "canvas2d-azure")] #[cfg(feature = "canvas2d-azure")]
Azure(azure::azure_hl::Pattern), Azure(azure::azure_hl::Pattern),
#[cfg(feature = "canvas2d-raqote")] #[cfg(feature = "canvas2d-raqote")]
Raqote(()), Raqote(raqote::Source<'a>),
} }
pub enum DrawSurfaceOptions { pub enum DrawSurfaceOptions {
@ -1113,8 +1113,8 @@ impl<'a> Drop for CanvasData<'a> {
#[derive(Clone)] #[derive(Clone)]
pub struct CanvasPaintState<'a> { pub struct CanvasPaintState<'a> {
pub draw_options: DrawOptions, pub draw_options: DrawOptions,
pub fill_style: Pattern, pub fill_style: Pattern<'a>,
pub stroke_style: Pattern, pub stroke_style: Pattern<'a>,
pub stroke_opts: StrokeOptions<'a>, pub stroke_opts: StrokeOptions<'a>,
/// The current 2D transform matrix. /// The current 2D transform matrix.
pub transform: Transform2D<f32>, pub transform: Transform2D<f32>,

View file

@ -72,10 +72,11 @@ impl Backend for RaqoteBackend {
impl<'a> CanvasPaintState<'a> { impl<'a> CanvasPaintState<'a> {
pub fn new(_antialias: AntialiasMode) -> CanvasPaintState<'a> { pub fn new(_antialias: AntialiasMode) -> CanvasPaintState<'a> {
let solid_src = raqote::SolidSource { r: 0, g: 0, b: 0, a: 255 };
CanvasPaintState { CanvasPaintState {
draw_options: DrawOptions::Raqote(raqote::DrawOptions::new()), draw_options: DrawOptions::Raqote(raqote::DrawOptions::new()),
fill_style: Pattern::Raqote(()), fill_style: Pattern::Raqote(raqote::Source::Solid(solid_src)),
stroke_style: Pattern::Raqote(()), stroke_style: Pattern::Raqote(raqote::Source::Solid(solid_src)),
stroke_opts: StrokeOptions::Raqote(Default::default(), PhantomData), stroke_opts: StrokeOptions::Raqote(Default::default(), PhantomData),
transform: Transform2D::identity(), transform: Transform2D::identity(),
shadow_offset_x: 0.0, shadow_offset_x: 0.0,
@ -86,10 +87,15 @@ impl<'a> CanvasPaintState<'a> {
} }
} }
impl Pattern { impl Pattern<'_> {
pub fn is_zero_size_gradient(&self) -> bool { pub fn is_zero_size_gradient(&self) -> bool {
match *self { match *self {
Pattern::Raqote(()) => unimplemented!(), Pattern::Raqote(_) => unimplemented!(),
}
}
pub fn as_raqote(&self) -> &raqote::Source {
match self {
Pattern::Raqote(p) => p,
} }
} }
} }
@ -123,6 +129,11 @@ impl DrawOptions {
DrawOptions::Raqote(draw_options) => draw_options.alpha = _val, DrawOptions::Raqote(draw_options) => draw_options.alpha = _val,
} }
} }
pub fn as_raqote(&self) -> &raqote::DrawOptions {
match self {
DrawOptions::Raqote(options) => options,
}
}
} }
impl Path { impl Path {
@ -140,6 +151,12 @@ impl Path {
pub fn copy_to_builder(&self) -> Box<dyn GenericPathBuilder> { pub fn copy_to_builder(&self) -> Box<dyn GenericPathBuilder> {
unimplemented!() unimplemented!()
} }
pub fn as_raqote(&self) -> &raqote::Path {
match self {
Path::Raqote(p) => p,
}
}
} }
impl GenericDrawTarget for raqote::DrawTarget { impl GenericDrawTarget for raqote::DrawTarget {
@ -200,8 +217,8 @@ impl GenericDrawTarget for raqote::DrawTarget {
) { ) {
unimplemented!(); unimplemented!();
} }
fn fill(&mut self, _path: &Path, _pattern: Pattern, _draw_options: &DrawOptions) { fn fill(&mut self, path: &Path, pattern: Pattern, draw_options: &DrawOptions) {
unimplemented!(); self.fill(path.as_raqote(), pattern.as_raqote(), draw_options.as_raqote());
} }
fn fill_rect( fn fill_rect(
&mut self, &mut self,
@ -363,3 +380,11 @@ impl ToRaqoteStyle for LineCapStyle {
} }
} }
} }
// TODO(pylbrecht)
#[cfg(feature = "raqote_backend")]
impl Clone for Pattern<'_> {
fn clone(&self) -> Self {
unimplemented!();
}
}