aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/canvasrenderingcontext2d.rs
diff options
context:
space:
mode:
authorbors-servo <metajack+bors@gmail.com>2015-06-12 03:27:07 -0600
committerbors-servo <metajack+bors@gmail.com>2015-06-12 03:27:07 -0600
commitf163f2bf0d32861ea20470d405bb517ed5b09e84 (patch)
treeaa6a4d471ee1b1676bdc2e55314700584e8c21d7 /components/script/dom/canvasrenderingcontext2d.rs
parent85d839fb5c6ff023897828b0873caa8972842969 (diff)
parent473afdb196f5fa3eb4680c853e5a288f904d3f22 (diff)
downloadservo-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.rs64
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 {