aboutsummaryrefslogtreecommitdiffstats
path: root/components/canvas/raqote_backend.rs
diff options
context:
space:
mode:
authorpylbrecht <palbrecht@mailbox.org>2019-12-02 07:54:45 +0100
committerpylbrecht <palbrecht@mailbox.org>2019-12-17 19:52:00 +0100
commitda9b4c33cd68929437e1443f6ab23027b3f26ce0 (patch)
tree307255eb1ca3906059b16f3bca26095fb79a1cf2 /components/canvas/raqote_backend.rs
parent1597b956b89d12d3fd43b36ee9969e2be2e15342 (diff)
downloadservo-da9b4c33cd68929437e1443f6ab23027b3f26ce0.tar.gz
servo-da9b4c33cd68929437e1443f6ab23027b3f26ce0.zip
Make fill() handle all composition operations
Diffstat (limited to 'components/canvas/raqote_backend.rs')
-rw-r--r--components/canvas/raqote_backend.rs35
1 files changed, 5 insertions, 30 deletions
diff --git a/components/canvas/raqote_backend.rs b/components/canvas/raqote_backend.rs
index a7cf3bd1023..317703154c3 100644
--- a/components/canvas/raqote_backend.rs
+++ b/components/canvas/raqote_backend.rs
@@ -329,36 +329,11 @@ impl GenericDrawTarget for raqote::DrawTarget {
warn!("no support for drawing shadows");
}
fn fill(&mut self, path: &Path, pattern: Pattern, draw_options: &DrawOptions) {
- match draw_options.as_raqote().blend_mode {
- raqote::BlendMode::Src => {
- self.clear(raqote::SolidSource::from_unpremultiplied_argb(0, 0, 0, 0));
- self.fill(
- path.as_raqote(),
- pattern.as_raqote(),
- draw_options.as_raqote(),
- );
- },
- raqote::BlendMode::DstIn |
- raqote::BlendMode::DstAtop |
- raqote::BlendMode::SrcIn |
- raqote::BlendMode::SrcOut => {
- self.push_layer(1.);
- self.clear(raqote::SolidSource::from_unpremultiplied_argb(0, 0, 0, 0));
- self.fill(
- path.as_raqote(),
- pattern.as_raqote(),
- draw_options.as_raqote(),
- );
- self.pop_layer();
- },
- _ => {
- self.fill(
- path.as_raqote(),
- pattern.as_raqote(),
- draw_options.as_raqote(),
- );
- },
- }
+ let mut options = draw_options.as_raqote().clone();
+ self.push_layer_with_blend(1., options.blend_mode);
+ options.blend_mode = raqote::BlendMode::SrcOver;
+ self.fill(path.as_raqote(), pattern.as_raqote(), &options);
+ self.pop_layer();
}
fn fill_rect(
&mut self,