diff options
author | bors-servo <metajack+bors@gmail.com> | 2015-06-12 03:27:07 -0600 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2015-06-12 03:27:07 -0600 |
commit | f163f2bf0d32861ea20470d405bb517ed5b09e84 (patch) | |
tree | aa6a4d471ee1b1676bdc2e55314700584e8c21d7 /components/script/dom/canvasrenderingcontext2d.rs | |
parent | 85d839fb5c6ff023897828b0873caa8972842969 (diff) | |
parent | 473afdb196f5fa3eb4680c853e5a288f904d3f22 (diff) | |
download | servo-f163f2bf0d32861ea20470d405bb517ed5b09e84.tar.gz servo-f163f2bf0d32861ea20470d405bb517ed5b09e84.zip |
Auto merge of #6337 - hyowon:shadow_attrs, r=nox
The first step of the implementation for shadows in canvas.
r? @nox @jdm
cc @yichoi
<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/6337)
<!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom/canvasrenderingcontext2d.rs')
-rw-r--r-- | components/script/dom/canvasrenderingcontext2d.rs | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/components/script/dom/canvasrenderingcontext2d.rs b/components/script/dom/canvasrenderingcontext2d.rs index 5cda56f085d..4902bf6ed14 100644 --- a/components/script/dom/canvasrenderingcontext2d.rs +++ b/components/script/dom/canvasrenderingcontext2d.rs @@ -27,6 +27,7 @@ use geom::matrix2d::Matrix2D; use geom::point::Point2D; use geom::rect::Rect; use geom::size::Size2D; +use gfx_traits::color; use canvas_traits::{CanvasMsg, Canvas2dMsg, CanvasCommonMsg}; use canvas_traits::{FillOrStrokeStyle, LinearGradientStyle, RadialGradientStyle}; @@ -80,6 +81,10 @@ struct CanvasContextState { line_join: LineJoinStyle, miter_limit: f64, transform: Matrix2D<f32>, + shadow_offset_x: f64, + shadow_offset_y: f64, + shadow_blur: f64, + shadow_color: RGBA, } impl CanvasContextState { @@ -101,6 +106,10 @@ impl CanvasContextState { line_join: LineJoinStyle::Miter, miter_limit: 10.0, transform: Matrix2D::identity(), + shadow_offset_x: 0.0, + shadow_offset_y: 0.0, + shadow_blur: 0.0, + shadow_color: RGBA { red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0 }, // transparent black } } } @@ -1056,6 +1065,61 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> self.state.borrow_mut().miter_limit = limit; self.renderer.send(CanvasMsg::Canvas2d(Canvas2dMsg::SetMiterLimit(limit as f32))).unwrap() } + + // https://html.spec.whatwg.org/multipage/#dom-context-2d-shadowoffsetx + fn ShadowOffsetX(self) -> f64 { + self.state.borrow().shadow_offset_x + } + + // https://html.spec.whatwg.org/multipage/#dom-context-2d-shadowoffsetx + fn SetShadowOffsetX(self, value: f64) { + self.state.borrow_mut().shadow_offset_x = value; + self.renderer.send(CanvasMsg::Canvas2d(Canvas2dMsg::SetShadowOffsetX(value))).unwrap() + } + + // https://html.spec.whatwg.org/multipage/#dom-context-2d-shadowoffsety + fn ShadowOffsetY(self) -> f64 { + self.state.borrow().shadow_offset_y + } + + // https://html.spec.whatwg.org/multipage/#dom-context-2d-shadowoffsety + fn SetShadowOffsetY(self, value: f64) { + self.state.borrow_mut().shadow_offset_y = value; + self.renderer.send(CanvasMsg::Canvas2d(Canvas2dMsg::SetShadowOffsetY(value))).unwrap() + } + + // https://html.spec.whatwg.org/multipage/#dom-context-2d-shadowblur + fn ShadowBlur(self) -> f64 { + self.state.borrow().shadow_blur + } + + // https://html.spec.whatwg.org/multipage/#dom-context-2d-shadowblur + fn SetShadowBlur(self, value: f64) { + self.state.borrow_mut().shadow_blur = value; + self.renderer.send(CanvasMsg::Canvas2d(Canvas2dMsg::SetShadowBlur(value))).unwrap() + } + + // https://html.spec.whatwg.org/multipage/#dom-context-2d-shadowcolor + fn ShadowColor(self) -> DOMString { + let mut result = String::new(); + serialize(&self.state.borrow().shadow_color, &mut result).unwrap(); + result + } + + // https://html.spec.whatwg.org/multipage/#dom-context-2d-shadowcolor + fn SetShadowColor(self, value: DOMString) { + match parse_color(&value) { + Ok(rgba) => { + self.state.borrow_mut().shadow_color = rgba; + self.renderer.send(CanvasMsg::Canvas2d(Canvas2dMsg::SetShadowColor( + color::rgba(rgba.red, + rgba.green, + rgba.blue, + rgba.alpha)))).unwrap() + }, + _ => {} + } + } } impl Drop for CanvasRenderingContext2D { |