mirror of
https://github.com/servo/servo.git
synced 2025-08-05 13:40:08 +01:00
Add transform to Pattern::Surface to properly draw images
This commit is contained in:
parent
b99b92d4c2
commit
7c8c230d93
1 changed files with 32 additions and 6 deletions
|
@ -124,6 +124,17 @@ pub enum Pattern<'a> {
|
||||||
Surface(SurfacePattern<'a>),
|
Surface(SurfacePattern<'a>),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'a> Pattern<'a> {
|
||||||
|
fn set_transform(&mut self, transform: Transform2D<f32>) {
|
||||||
|
match self {
|
||||||
|
Pattern::Surface(pattern) => pattern.set_transform(transform),
|
||||||
|
Pattern::LinearGradient(..) | Pattern::RadialGradient(..) | Pattern::Color(..) => {
|
||||||
|
warn!("transform not supported")
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct LinearGradientPattern {
|
pub struct LinearGradientPattern {
|
||||||
gradient: raqote::Gradient,
|
gradient: raqote::Gradient,
|
||||||
|
@ -174,6 +185,7 @@ pub struct SurfacePattern<'a> {
|
||||||
filter: raqote::FilterMode,
|
filter: raqote::FilterMode,
|
||||||
extend: raqote::ExtendMode,
|
extend: raqote::ExtendMode,
|
||||||
repeat: Repetition,
|
repeat: Repetition,
|
||||||
|
transform: Transform2D<f32>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> SurfacePattern<'a> {
|
impl<'a> SurfacePattern<'a> {
|
||||||
|
@ -189,8 +201,12 @@ impl<'a> SurfacePattern<'a> {
|
||||||
filter: filter,
|
filter: filter,
|
||||||
extend: extend,
|
extend: extend,
|
||||||
repeat: repeat,
|
repeat: repeat,
|
||||||
|
transform: Transform2D::identity(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
fn set_transform(&mut self, transform: Transform2D<f32>) {
|
||||||
|
self.transform = transform;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
|
@ -240,7 +256,7 @@ impl canvas_data::Pattern<'_> {
|
||||||
pattern.image,
|
pattern.image,
|
||||||
pattern.extend,
|
pattern.extend,
|
||||||
pattern.filter,
|
pattern.filter,
|
||||||
Transform2D::identity(),
|
pattern.transform,
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -426,6 +442,20 @@ impl GenericDrawTarget for raqote::DrawTarget {
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let mut pattern = Pattern::Surface(SurfacePattern::new(
|
||||||
|
image,
|
||||||
|
filter.to_raqote(),
|
||||||
|
Repetition::NoRepeat,
|
||||||
|
));
|
||||||
|
let transform =
|
||||||
|
raqote::Transform::create_translation(-dest.origin.x as f32, -dest.origin.y as f32)
|
||||||
|
.post_scale(
|
||||||
|
image.width as f32 / dest.size.width as f32,
|
||||||
|
image.height as f32 / dest.size.height as f32,
|
||||||
|
);
|
||||||
|
pattern.set_transform(transform);
|
||||||
|
|
||||||
let mut pb = raqote::PathBuilder::new();
|
let mut pb = raqote::PathBuilder::new();
|
||||||
pb.rect(
|
pb.rect(
|
||||||
dest.origin.x as f32,
|
dest.origin.x as f32,
|
||||||
|
@ -433,11 +463,7 @@ impl GenericDrawTarget for raqote::DrawTarget {
|
||||||
dest.size.width as f32,
|
dest.size.width as f32,
|
||||||
dest.size.height as f32,
|
dest.size.height as f32,
|
||||||
);
|
);
|
||||||
let pattern = Pattern::Surface(SurfacePattern::new(
|
|
||||||
image,
|
|
||||||
filter.to_raqote(),
|
|
||||||
Repetition::NoRepeat,
|
|
||||||
));
|
|
||||||
GenericDrawTarget::fill(
|
GenericDrawTarget::fill(
|
||||||
self,
|
self,
|
||||||
&Path::Raqote(pb.finish()),
|
&Path::Raqote(pb.finish()),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue