diff options
author | Hyowon Kim <hw1008.kim@samsung.com> | 2015-06-02 15:11:03 +0900 |
---|---|---|
committer | Hyowon Kim <hw1008.kim@samsung.com> | 2015-06-03 09:11:24 +0900 |
commit | 5d05ffc4175b1c4d28a3ab9ef5e3e70b970c14c8 (patch) | |
tree | 9973b981ecc66688d5f7e32e92e2ee19b461f265 /components/script/dom/canvasrenderingcontext2d.rs | |
parent | ec79881471bf3e952f40ee7021b561532a9020c6 (diff) | |
download | servo-5d05ffc4175b1c4d28a3ab9ef5e3e70b970c14c8.tar.gz servo-5d05ffc4175b1c4d28a3ab9ef5e3e70b970c14c8.zip |
Serialize colors for fill and stroke styles in canvas.
Diffstat (limited to 'components/script/dom/canvasrenderingcontext2d.rs')
-rw-r--r-- | components/script/dom/canvasrenderingcontext2d.rs | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/components/script/dom/canvasrenderingcontext2d.rs b/components/script/dom/canvasrenderingcontext2d.rs index 0fa401db399..9898f1d501d 100644 --- a/components/script/dom/canvasrenderingcontext2d.rs +++ b/components/script/dom/canvasrenderingcontext2d.rs @@ -22,7 +22,7 @@ use dom::imagedata::{ImageData, ImageDataHelpers}; use dom::node::{window_from_node, NodeHelpers, NodeDamage}; use cssparser::Color as CSSColor; -use cssparser::{Parser, RGBA, ToCss}; +use cssparser::{Parser, RGBA}; use geom::matrix2d::Matrix2D; use geom::point::Point2D; use geom::rect::Rect; @@ -39,6 +39,7 @@ use png::PixelsByColorType; use num::{Float, ToPrimitive}; use std::borrow::ToOwned; use std::cell::RefCell; +use std::fmt; use std::sync::mpsc::{channel, Sender}; use util::str::DOMString; @@ -772,11 +773,8 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> // https://html.spec.whatwg.org/multipage/#dom-context-2d-strokestyle fn StrokeStyle(self) -> StringOrCanvasGradientOrCanvasPattern { - // FIXME(pcwalton, #4761): This is not spec-compliant. See: - // - // https://html.spec.whatwg.org/multipage/#serialisation-of-a-colour let mut result = String::new(); - self.state.borrow().stroke_color.to_css(&mut result).unwrap(); + serialize(&self.state.borrow().stroke_color, &mut result).unwrap(); StringOrCanvasGradientOrCanvasPattern::eString(result) } @@ -802,11 +800,8 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> // https://html.spec.whatwg.org/multipage/#dom-context-2d-strokestyle fn FillStyle(self) -> StringOrCanvasGradientOrCanvasPattern { - // FIXME(pcwalton, #4761): This is not spec-compliant. See: - // - // https://html.spec.whatwg.org/multipage/#serialisation-of-a-colour let mut result = String::new(); - self.state.borrow().stroke_color.to_css(&mut result).unwrap(); + serialize(&self.state.borrow().fill_color, &mut result).unwrap(); StringOrCanvasGradientOrCanvasPattern::eString(result) } @@ -1048,3 +1043,20 @@ pub fn parse_color(string: &str) -> Result<RGBA,()> { fn is_rect_valid(rect: Rect<f64>) -> bool { rect.size.width > 0.0 && rect.size.height > 0.0 } + +// https://html.spec.whatwg.org/multipage/#serialisation-of-a-colour +fn serialize<W>(color: &RGBA, dest: &mut W) -> fmt::Result where W: fmt::Write { + let red = (color.red * 255.).round() as u8; + let green = (color.green * 255.).round() as u8; + let blue = (color.blue * 255.).round() as u8; + + if color.alpha == 1f32 { + write!(dest, "#{:x}{:x}{:x}{:x}{:x}{:x}", + red >> 4, red & 0xF, + green >> 4, green & 0xF, + blue >> 4, blue & 0xF) + } else { + write!(dest, "rgba({}, {}, {}, {})", + red, green, blue, color.alpha) + } +} |