aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/htmlcanvaselement.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/htmlcanvaselement.rs')
-rw-r--r--components/script/dom/htmlcanvaselement.rs28
1 files changed, 10 insertions, 18 deletions
diff --git a/components/script/dom/htmlcanvaselement.rs b/components/script/dom/htmlcanvaselement.rs
index 09114a95d0a..8f572336573 100644
--- a/components/script/dom/htmlcanvaselement.rs
+++ b/components/script/dom/htmlcanvaselement.rs
@@ -7,14 +7,12 @@ use canvas_traits::canvas::{CanvasMsg, CanvasId, FromScriptMsg};
use canvas_traits::webgl::WebGLVersion;
use dom::attr::Attr;
use dom::bindings::cell::DomRefCell;
-use dom::bindings::codegen::Bindings::CanvasRenderingContext2DBinding::CanvasRenderingContext2DMethods;
use dom::bindings::codegen::Bindings::HTMLCanvasElementBinding;
use dom::bindings::codegen::Bindings::HTMLCanvasElementBinding::{HTMLCanvasElementMethods, RenderingContext};
use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGLContextAttributes;
use dom::bindings::conversions::ConversionResult;
use dom::bindings::error::{Error, Fallible};
use dom::bindings::inheritance::Castable;
-use dom::bindings::num::Finite;
use dom::bindings::reflector::DomObject;
use dom::bindings::root::{Dom, DomRoot, LayoutDom};
use dom::bindings::str::{DOMString, USVString};
@@ -28,7 +26,7 @@ use dom::virtualmethods::VirtualMethods;
use dom::webgl2renderingcontext::WebGL2RenderingContext;
use dom::webglrenderingcontext::{LayoutCanvasWebGLRenderingContextHelpers, WebGLRenderingContext};
use dom_struct::dom_struct;
-use euclid::Size2D;
+use euclid::{Rect, Size2D};
use html5ever::{LocalName, Prefix};
use image::ColorType;
use image::png::PNGEncoder;
@@ -355,10 +353,8 @@ impl HTMLCanvasElementMethods for HTMLCanvasElement {
_quality: HandleValue,
) -> Fallible<USVString> {
// Step 1.
- if let Some(CanvasContext::Context2d(ref context)) = *self.context.borrow() {
- if !context.origin_is_clean() {
- return Err(Error::Security);
- }
+ if !self.origin_is_clean() {
+ return Err(Error::Security);
}
// Step 2.
@@ -367,24 +363,18 @@ impl HTMLCanvasElementMethods for HTMLCanvasElement {
}
// Step 3.
- let raw_data = match *self.context.borrow() {
+ let file = match *self.context.borrow() {
Some(CanvasContext::Context2d(ref context)) => {
- let image_data = context.GetImageData(
- Finite::wrap(0f64),
- Finite::wrap(0f64),
- Finite::wrap(self.Width() as f64),
- Finite::wrap(self.Height() as f64),
- )?;
- image_data.get_data_array()
+ context.get_rect(Rect::from_size(self.get_size()))
},
Some(CanvasContext::WebGL(ref context)) => {
- match context.get_image_data(self.Width(), self.Height()) {
+ match context.get_image_data(self.get_size()) {
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()) {
+ match context.base_context().get_image_data(self.get_size()) {
Some(data) => data,
None => return Ok(USVString("data:,".into())),
}
@@ -397,8 +387,10 @@ impl HTMLCanvasElementMethods for HTMLCanvasElement {
// FIXME: Only handle image/png for now.
let mut png = Vec::new();
+ // FIXME(nox): https://github.com/PistonDevelopers/image-png/issues/86
+ // FIXME(nox): https://github.com/PistonDevelopers/image-png/issues/87
PNGEncoder::new(&mut png)
- .encode(&raw_data, self.Width(), self.Height(), ColorType::RGBA(8))
+ .encode(&file, 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?