diff options
Diffstat (limited to 'components/script/dom/htmlcanvaselement.rs')
-rw-r--r-- | components/script/dom/htmlcanvaselement.rs | 40 |
1 files changed, 18 insertions, 22 deletions
diff --git a/components/script/dom/htmlcanvaselement.rs b/components/script/dom/htmlcanvaselement.rs index 00b04db7ee8..09114a95d0a 100644 --- a/components/script/dom/htmlcanvaselement.rs +++ b/components/script/dom/htmlcanvaselement.rs @@ -98,8 +98,8 @@ impl HTMLCanvasElement { } } - pub fn get_size(&self) -> Size2D<i32> { - Size2D::new(self.Width() as i32, self.Height() as i32) + pub fn get_size(&self) -> Size2D<u32> { + Size2D::new(self.Width(), self.Height()) } pub fn origin_is_clean(&self) -> bool { @@ -277,7 +277,7 @@ impl HTMLCanvasElement { self.Height() != 0 && self.Width() != 0 } - pub fn fetch_all_data(&self) -> Option<(Vec<u8>, Size2D<i32>)> { + pub fn fetch_all_data(&self) -> Option<(Vec<u8>, Size2D<u32>)> { let size = self.get_size(); if size.width == 0 || size.height == 0 { @@ -383,12 +383,11 @@ impl HTMLCanvasElementMethods for HTMLCanvasElement { None => return Ok(USVString("data:,".into())), } }, - Some(CanvasContext::WebGL2(ref context)) => match context - .base_context() - .get_image_data(self.Width(), self.Height()) - { - Some(data) => data, - None => return Ok(USVString("data:,".into())), + Some(CanvasContext::WebGL2(ref context)) => { + match context.base_context().get_image_data(self.Width(), self.Height()) { + Some(data) => data, + None => return Ok(USVString("data:,".into())), + } }, None => { // Each pixel is fully-transparent black. @@ -396,19 +395,16 @@ impl HTMLCanvasElementMethods for HTMLCanvasElement { }, }; - // Only handle image/png for now. - let mime_type = "image/png"; - - let mut encoded = Vec::new(); - { - let encoder: PNGEncoder<&mut Vec<u8>> = PNGEncoder::new(&mut encoded); - encoder - .encode(&raw_data, self.Width(), self.Height(), ColorType::RGBA(8)) - .unwrap(); - } - - let encoded = base64::encode(&encoded); - Ok(USVString(format!("data:{};base64,{}", mime_type, encoded))) + // FIXME: Only handle image/png for now. + let mut png = Vec::new(); + PNGEncoder::new(&mut png) + .encode(&raw_data, self.Width(), self.Height(), ColorType::RGBA(8)) + .unwrap(); + let mut url = "data:image/png;base64,".to_owned(); + // FIXME(nox): Should this use base64::URL_SAFE? + // FIXME(nox): https://github.com/alicemaz/rust-base64/pull/56 + base64::encode_config_buf(&png, base64::STANDARD, &mut url); + Ok(USVString(url)) } } |