diff options
author | David Zbarsky <dzbarsky@gmail.com> | 2015-08-09 19:43:09 -0400 |
---|---|---|
committer | David Zbarsky <dzbarsky@gmail.com> | 2015-11-21 11:59:19 -0800 |
commit | 8408891ec5d2c7d455e52bef4181adbb276413a5 (patch) | |
tree | ae1dcef884a13039bf17b9b040e698329ac7caad /components/script/dom/canvasgradient.rs | |
parent | ea690a2dff64d1cb4eb668473d62f1bbcb19f7c8 (diff) | |
download | servo-8408891ec5d2c7d455e52bef4181adbb276413a5.tar.gz servo-8408891ec5d2c7d455e52bef4181adbb276413a5.zip |
Parse currentColor as Canvas2D color
Diffstat (limited to 'components/script/dom/canvasgradient.rs')
-rw-r--r-- | components/script/dom/canvasgradient.rs | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/components/script/dom/canvasgradient.rs b/components/script/dom/canvasgradient.rs index 1721e5e976a..b2d3f846c89 100644 --- a/components/script/dom/canvasgradient.rs +++ b/components/script/dom/canvasgradient.rs @@ -3,6 +3,8 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use canvas_traits::{CanvasGradientStop, FillOrStrokeStyle, LinearGradientStyle, RadialGradientStyle}; +use cssparser::Color as CSSColor; +use cssparser::{Parser, RGBA}; use dom::bindings::cell::DOMRefCell; use dom::bindings::codegen::Bindings::CanvasGradientBinding; use dom::bindings::codegen::Bindings::CanvasGradientBinding::CanvasGradientMethods; @@ -11,7 +13,6 @@ use dom::bindings::global::GlobalRef; use dom::bindings::js::Root; use dom::bindings::num::Finite; use dom::bindings::reflector::{Reflector, reflect_dom_object}; -use dom::canvasrenderingcontext2d::parse_color; use util::str::DOMString; // https://html.spec.whatwg.org/multipage/#canvasgradient @@ -51,9 +52,16 @@ impl CanvasGradientMethods for CanvasGradient { return Err(Error::IndexSize); } - let color = match parse_color(&color) { - Ok(color) => color, - _ => return Err(Error::Syntax), + let mut parser = Parser::new(&color); + let color = CSSColor::parse(&mut parser); + let color = if parser.is_exhausted() { + match color { + Ok(CSSColor::RGBA(rgba)) => rgba, + Ok(CSSColor::CurrentColor) => RGBA { red: 0.0, green: 0.0, blue: 0.0, alpha: 1.0 }, + _ => return Err(Error::Syntax) + } + } else { + return Err(Error::Syntax) }; self.stops.borrow_mut().push(CanvasGradientStop { |