aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/paintrenderingcontext2d.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/paintrenderingcontext2d.rs')
-rw-r--r--components/script/dom/paintrenderingcontext2d.rs359
1 files changed, 354 insertions, 5 deletions
diff --git a/components/script/dom/paintrenderingcontext2d.rs b/components/script/dom/paintrenderingcontext2d.rs
index a70e62a45ed..dd91ec0960e 100644
--- a/components/script/dom/paintrenderingcontext2d.rs
+++ b/components/script/dom/paintrenderingcontext2d.rs
@@ -2,28 +2,377 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+use app_units::Au;
+use canvas_traits::CanvasData;
+use canvas_traits::CanvasMsg;
+use canvas_traits::FromLayoutMsg;
+use dom::bindings::codegen::Bindings::CanvasRenderingContext2DBinding::CanvasFillRule;
+use dom::bindings::codegen::Bindings::CanvasRenderingContext2DBinding::CanvasLineCap;
+use dom::bindings::codegen::Bindings::CanvasRenderingContext2DBinding::CanvasLineJoin;
+use dom::bindings::codegen::Bindings::CanvasRenderingContext2DBinding::CanvasRenderingContext2DMethods;
use dom::bindings::codegen::Bindings::PaintRenderingContext2DBinding;
+use dom::bindings::codegen::Bindings::PaintRenderingContext2DBinding::PaintRenderingContext2DMethods;
+use dom::bindings::codegen::UnionTypes::HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D;
+use dom::bindings::codegen::UnionTypes::StringOrCanvasGradientOrCanvasPattern;
+use dom::bindings::error::ErrorResult;
+use dom::bindings::error::Fallible;
+use dom::bindings::inheritance::Castable;
use dom::bindings::js::Root;
-use dom::bindings::reflector::Reflector;
+use dom::bindings::num::Finite;
use dom::bindings::reflector::reflect_dom_object;
+use dom::bindings::str::DOMString;
+use dom::canvasgradient::CanvasGradient;
+use dom::canvaspattern::CanvasPattern;
+use dom::canvasrenderingcontext2d::CanvasRenderingContext2D;
use dom::paintworkletglobalscope::PaintWorkletGlobalScope;
use dom_struct::dom_struct;
+use euclid::Size2D;
+use ipc_channel::ipc::IpcSender;
#[dom_struct]
pub struct PaintRenderingContext2D {
- reflector: Reflector,
+ context: CanvasRenderingContext2D,
}
impl PaintRenderingContext2D {
- fn new_inherited() -> PaintRenderingContext2D {
+ fn new_inherited(global: &PaintWorkletGlobalScope) -> PaintRenderingContext2D {
+ let size = Size2D::zero();
PaintRenderingContext2D {
- reflector: Reflector::new(),
+ context: CanvasRenderingContext2D::new_inherited(global.upcast(), None, size),
}
}
pub fn new(global: &PaintWorkletGlobalScope) -> Root<PaintRenderingContext2D> {
- reflect_dom_object(box PaintRenderingContext2D::new_inherited(),
+ reflect_dom_object(box PaintRenderingContext2D::new_inherited(global),
global,
PaintRenderingContext2DBinding::Wrap)
}
+
+ pub fn send_data(&self, sender: IpcSender<CanvasData>) {
+ let msg = CanvasMsg::FromLayout(FromLayoutMsg::SendData(sender));
+ let _ = self.context.ipc_renderer().send(msg);
+ }
+
+ pub fn set_bitmap_dimensions(&self, size: Size2D<Au>) {
+ let size = Size2D::new(size.width.to_px(), size.height.to_px());
+ self.context.set_bitmap_dimensions(size);
+ }
+}
+
+impl PaintRenderingContext2DMethods for PaintRenderingContext2D {
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-save
+ fn Save(&self) {
+ self.context.Save()
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-restore
+ fn Restore(&self) {
+ self.context.Restore()
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-scale
+ fn Scale(&self, x: f64, y: f64) {
+ self.context.Scale(x, y)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-rotate
+ fn Rotate(&self, angle: f64) {
+ self.context.Rotate(angle)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-translate
+ fn Translate(&self, x: f64, y: f64) {
+ self.context.Translate(x, y)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-transform
+ fn Transform(&self, a: f64, b: f64, c: f64, d: f64, e: f64, f: f64) {
+ self.context.Transform(a, b, c, d, e, f)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-settransform
+ fn SetTransform(&self, a: f64, b: f64, c: f64, d: f64, e: f64, f: f64) {
+ self.context.SetTransform(a, b, c, d, e, f)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-resettransform
+ fn ResetTransform(&self) {
+ self.context.ResetTransform()
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-globalalpha
+ fn GlobalAlpha(&self) -> f64 {
+ self.context.GlobalAlpha()
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-globalalpha
+ fn SetGlobalAlpha(&self, alpha: f64) {
+ self.context.SetGlobalAlpha(alpha)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-globalcompositeoperation
+ fn GlobalCompositeOperation(&self) -> DOMString {
+ self.context.GlobalCompositeOperation()
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-globalcompositeoperation
+ fn SetGlobalCompositeOperation(&self, op_str: DOMString) {
+ self.context.SetGlobalCompositeOperation(op_str)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-fillrect
+ fn FillRect(&self, x: f64, y: f64, width: f64, height: f64) {
+ self.context.FillRect(x, y, width, height)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-clearrect
+ fn ClearRect(&self, x: f64, y: f64, width: f64, height: f64) {
+ self.context.ClearRect(x, y, width, height)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-strokerect
+ fn StrokeRect(&self, x: f64, y: f64, width: f64, height: f64) {
+ self.context.StrokeRect(x, y, width, height)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-beginpath
+ fn BeginPath(&self) {
+ self.context.BeginPath()
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-closepath
+ fn ClosePath(&self) {
+ self.context.ClosePath()
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-fill
+ fn Fill(&self, fill_rule: CanvasFillRule) {
+ self.context.Fill(fill_rule)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-stroke
+ fn Stroke(&self) {
+ self.context.Stroke()
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-clip
+ fn Clip(&self, fill_rule: CanvasFillRule) {
+ self.context.Clip(fill_rule)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-ispointinpath
+ fn IsPointInPath(&self, x: f64, y: f64, fill_rule: CanvasFillRule) -> bool {
+ self.context.IsPointInPath(x, y, fill_rule)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-drawimage
+ fn DrawImage(&self,
+ image: HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D,
+ dx: f64,
+ dy: f64)
+ -> ErrorResult {
+ self.context.DrawImage(image, dx, dy)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-drawimage
+ fn DrawImage_(&self,
+ image: HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D,
+ dx: f64,
+ dy: f64,
+ dw: f64,
+ dh: f64)
+ -> ErrorResult {
+ self.context.DrawImage_(image, dx, dy, dw, dh)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-drawimage
+ fn DrawImage__(&self,
+ image: HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D,
+ sx: f64,
+ sy: f64,
+ sw: f64,
+ sh: f64,
+ dx: f64,
+ dy: f64,
+ dw: f64,
+ dh: f64)
+ -> ErrorResult {
+ self.context.DrawImage__(image, sx, sy, sw, sh, dx, dy, dw, dh)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-moveto
+ fn MoveTo(&self, x: f64, y: f64) {
+ self.context.MoveTo(x, y)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-lineto
+ fn LineTo(&self, x: f64, y: f64) {
+ self.context.LineTo(x, y)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-rect
+ fn Rect(&self, x: f64, y: f64, width: f64, height: f64) {
+ self.context.Rect(x, y, width, height)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-quadraticcurveto
+ fn QuadraticCurveTo(&self, cpx: f64, cpy: f64, x: f64, y: f64) {
+ self.context.QuadraticCurveTo(cpx, cpy, x, y)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-beziercurveto
+ fn BezierCurveTo(&self, cp1x: f64, cp1y: f64, cp2x: f64, cp2y: f64, x: f64, y: f64) {
+ self.context.BezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-arc
+ fn Arc(&self, x: f64, y: f64, r: f64, start: f64, end: f64, ccw: bool) -> ErrorResult {
+ self.context.Arc(x, y, r, start, end, ccw)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-arcto
+ fn ArcTo(&self, cp1x: f64, cp1y: f64, cp2x: f64, cp2y: f64, r: f64) -> ErrorResult {
+ self.context.ArcTo(cp1x, cp1y, cp2x, cp2y, r)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-imagesmoothingenabled
+ fn ImageSmoothingEnabled(&self) -> bool {
+ self.context.ImageSmoothingEnabled()
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-imagesmoothingenabled
+ fn SetImageSmoothingEnabled(&self, value: bool) {
+ self.context.SetImageSmoothingEnabled(value)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-strokestyle
+ fn StrokeStyle(&self) -> StringOrCanvasGradientOrCanvasPattern {
+ self.context.StrokeStyle()
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-strokestyle
+ fn SetStrokeStyle(&self, value: StringOrCanvasGradientOrCanvasPattern) {
+ self.context.SetStrokeStyle(value)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-strokestyle
+ fn FillStyle(&self) -> StringOrCanvasGradientOrCanvasPattern {
+ self.context.FillStyle()
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-strokestyle
+ fn SetFillStyle(&self, value: StringOrCanvasGradientOrCanvasPattern) {
+ self.context.SetFillStyle(value)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-createlineargradient
+ fn CreateLinearGradient(&self,
+ x0: Finite<f64>,
+ y0: Finite<f64>,
+ x1: Finite<f64>,
+ y1: Finite<f64>)
+ -> Root<CanvasGradient> {
+ self.context.CreateLinearGradient(x0, y0, x1, y1)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-createradialgradient
+ fn CreateRadialGradient(&self,
+ x0: Finite<f64>,
+ y0: Finite<f64>,
+ r0: Finite<f64>,
+ x1: Finite<f64>,
+ y1: Finite<f64>,
+ r1: Finite<f64>)
+ -> Fallible<Root<CanvasGradient>> {
+ self.context.CreateRadialGradient(x0, y0, r0, x1, y1, r1)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-createpattern
+ fn CreatePattern(&self,
+ image: HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D,
+ repetition: DOMString)
+ -> Fallible<Root<CanvasPattern>> {
+ self.context.CreatePattern(image, repetition)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-linewidth
+ fn LineWidth(&self) -> f64 {
+ self.context.LineWidth()
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-linewidth
+ fn SetLineWidth(&self, width: f64) {
+ self.context.SetLineWidth(width)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-linecap
+ fn LineCap(&self) -> CanvasLineCap {
+ self.context.LineCap()
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-linecap
+ fn SetLineCap(&self, cap: CanvasLineCap) {
+ self.context.SetLineCap(cap)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-linejoin
+ fn LineJoin(&self) -> CanvasLineJoin {
+ self.context.LineJoin()
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-linejoin
+ fn SetLineJoin(&self, join: CanvasLineJoin) {
+ self.context.SetLineJoin(join)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-miterlimit
+ fn MiterLimit(&self) -> f64 {
+ self.context.MiterLimit()
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-miterlimit
+ fn SetMiterLimit(&self, limit: f64) {
+ self.context.SetMiterLimit(limit)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-shadowoffsetx
+ fn ShadowOffsetX(&self) -> f64 {
+ self.context.ShadowOffsetX()
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-shadowoffsetx
+ fn SetShadowOffsetX(&self, value: f64) {
+ self.context.SetShadowOffsetX(value)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-shadowoffsety
+ fn ShadowOffsetY(&self) -> f64 {
+ self.context.ShadowOffsetY()
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-shadowoffsety
+ fn SetShadowOffsetY(&self, value: f64) {
+ self.context.SetShadowOffsetY(value)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-shadowblur
+ fn ShadowBlur(&self) -> f64 {
+ self.context.ShadowBlur()
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-shadowblur
+ fn SetShadowBlur(&self, value: f64) {
+ self.context.SetShadowBlur(value)
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-shadowcolor
+ fn ShadowColor(&self) -> DOMString {
+ self.context.ShadowColor()
+ }
+
+ // https://html.spec.whatwg.org/multipage/#dom-context-2d-shadowcolor
+ fn SetShadowColor(&self, value: DOMString) {
+ self.context.SetShadowColor(value)
+ }
+
}