зеркало из https://github.com/mozilla/gecko-dev.git
servo: Merge #5773 - Canvas: add clipping path support (from mmatyas:canvas_clip); r=jdm
Source-Repo: https://github.com/servo/servo Source-Revision: c4b7979450a3b884ed727e0c1d306897d255aef9
This commit is contained in:
Родитель
aa5d13a759
Коммит
ec0a941830
|
@ -24,8 +24,9 @@ pub enum Canvas2dMsg {
|
|||
DrawImageSelf(Size2D<f64>, Rect<f64>, Rect<f64>, bool),
|
||||
BeginPath,
|
||||
BezierCurveTo(Point2D<f32>, Point2D<f32>, Point2D<f32>),
|
||||
ClosePath,
|
||||
ClearRect(Rect<f32>),
|
||||
Clip,
|
||||
ClosePath,
|
||||
Fill,
|
||||
FillRect(Rect<f32>),
|
||||
GetImageData(Rect<f64>, Size2D<f64>, Sender<Vec<u8>>),
|
||||
|
|
|
@ -212,6 +212,7 @@ impl<'a> CanvasPaintTask<'a> {
|
|||
Canvas2dMsg::ClosePath => painter.close_path(),
|
||||
Canvas2dMsg::Fill => painter.fill(),
|
||||
Canvas2dMsg::Stroke => painter.stroke(),
|
||||
Canvas2dMsg::Clip => painter.clip(),
|
||||
Canvas2dMsg::DrawImage(imagedata, image_size, dest_rect, source_rect, smoothing_enabled) => {
|
||||
painter.draw_image(imagedata, image_size, dest_rect, source_rect, smoothing_enabled)
|
||||
}
|
||||
|
@ -271,6 +272,7 @@ impl<'a> CanvasPaintTask<'a> {
|
|||
if let Some(state) = self.saved_states.pop() {
|
||||
mem::replace(&mut self.state, state);
|
||||
self.drawtarget.set_transform(&self.state.transform);
|
||||
self.drawtarget.pop_clip();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -325,6 +327,10 @@ impl<'a> CanvasPaintTask<'a> {
|
|||
};
|
||||
}
|
||||
|
||||
fn clip(&self) {
|
||||
self.drawtarget.push_clip(&self.path_builder.finish());
|
||||
}
|
||||
|
||||
fn draw_image(&self, image_data: Vec<u8>, image_size: Size2D<f64>,
|
||||
dest_rect: Rect<f64>, source_rect: Rect<f64>, smoothing_enabled: bool) {
|
||||
// We round up the floating pixel values to draw the pixels
|
||||
|
|
|
@ -454,6 +454,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D>
|
|||
|
||||
// https://html.spec.whatwg.org/multipage/#dom-context-2d-fill
|
||||
fn Fill(self, _: CanvasWindingRule) {
|
||||
// TODO: Process winding rule
|
||||
self.renderer.send(CanvasMsg::Canvas2d(Canvas2dMsg::Fill)).unwrap();
|
||||
}
|
||||
|
||||
|
@ -462,6 +463,12 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D>
|
|||
self.renderer.send(CanvasMsg::Canvas2d(Canvas2dMsg::Stroke)).unwrap();
|
||||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/#dom-context-2d-clip
|
||||
fn Clip(self, _: CanvasWindingRule) {
|
||||
// TODO: Process winding rule
|
||||
self.renderer.send(CanvasMsg::Canvas2d(Canvas2dMsg::Clip)).unwrap();
|
||||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/#dom-context-2d-drawimage
|
||||
fn DrawImage(self, image: HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D,
|
||||
dx: f64, dy: f64) -> Fallible<()> {
|
||||
|
|
|
@ -90,7 +90,7 @@ interface CanvasRenderingContext2D {
|
|||
//boolean drawCustomFocusRing(Path2D path, Element element);
|
||||
//void scrollPathIntoView();
|
||||
//void scrollPathIntoView(Path2D path);
|
||||
//void clip(optional CanvasWindingRule fillRule = "nonzero");
|
||||
void clip(optional CanvasWindingRule fillRule = "nonzero");
|
||||
//void clip(Path2D path, optional CanvasWindingRule fillRule = "nonzero");
|
||||
//void resetClip();
|
||||
//boolean isPointInPath(unrestricted double x, unrestricted double y, optional CanvasWindingRule fillRule = "nonzero");
|
||||
|
|
Загрузка…
Ссылка в новой задаче