aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/canvas/canvas_data.rs8
-rw-r--r--components/canvas/raqote_backend.rs37
2 files changed, 35 insertions, 10 deletions
diff --git a/components/canvas/canvas_data.rs b/components/canvas/canvas_data.rs
index d6abe8836f0..8288e823eea 100644
--- a/components/canvas/canvas_data.rs
+++ b/components/canvas/canvas_data.rs
@@ -352,11 +352,11 @@ pub enum Path {
}
#[derive(Clone)]
-pub enum Pattern {
+pub enum Pattern<'a> {
#[cfg(feature = "canvas2d-azure")]
Azure(azure::azure_hl::Pattern),
#[cfg(feature = "canvas2d-raqote")]
- Raqote(()),
+ Raqote(raqote::Source<'a>),
}
pub enum DrawSurfaceOptions {
@@ -1113,8 +1113,8 @@ impl<'a> Drop for CanvasData<'a> {
#[derive(Clone)]
pub struct CanvasPaintState<'a> {
pub draw_options: DrawOptions,
- pub fill_style: Pattern,
- pub stroke_style: Pattern,
+ pub fill_style: Pattern<'a>,
+ pub stroke_style: Pattern<'a>,
pub stroke_opts: StrokeOptions<'a>,
/// The current 2D transform matrix.
pub transform: Transform2D<f32>,
diff --git a/components/canvas/raqote_backend.rs b/components/canvas/raqote_backend.rs
index 18d69176d9a..a80443af4a2 100644
--- a/components/canvas/raqote_backend.rs
+++ b/components/canvas/raqote_backend.rs
@@ -72,10 +72,11 @@ impl Backend for RaqoteBackend {
impl<'a> CanvasPaintState<'a> {
pub fn new(_antialias: AntialiasMode) -> CanvasPaintState<'a> {
+ let solid_src = raqote::SolidSource { r: 0, g: 0, b: 0, a: 255 };
CanvasPaintState {
draw_options: DrawOptions::Raqote(raqote::DrawOptions::new()),
- fill_style: Pattern::Raqote(()),
- stroke_style: Pattern::Raqote(()),
+ fill_style: Pattern::Raqote(raqote::Source::Solid(solid_src)),
+ stroke_style: Pattern::Raqote(raqote::Source::Solid(solid_src)),
stroke_opts: StrokeOptions::Raqote(Default::default(), PhantomData),
transform: Transform2D::identity(),
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 {
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,
}
}
+ pub fn as_raqote(&self) -> &raqote::DrawOptions {
+ match self {
+ DrawOptions::Raqote(options) => options,
+ }
+ }
}
impl Path {
@@ -140,6 +151,12 @@ impl Path {
pub fn copy_to_builder(&self) -> Box<dyn GenericPathBuilder> {
unimplemented!()
}
+
+ pub fn as_raqote(&self) -> &raqote::Path {
+ match self {
+ Path::Raqote(p) => p,
+ }
+ }
}
impl GenericDrawTarget for raqote::DrawTarget {
@@ -200,8 +217,8 @@ impl GenericDrawTarget for raqote::DrawTarget {
) {
unimplemented!();
}
- fn fill(&mut self, _path: &Path, _pattern: Pattern, _draw_options: &DrawOptions) {
- unimplemented!();
+ fn fill(&mut self, path: &Path, pattern: Pattern, draw_options: &DrawOptions) {
+ self.fill(path.as_raqote(), pattern.as_raqote(), draw_options.as_raqote());
}
fn fill_rect(
&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!();
+ }
+}