Make ImageData::new return Fallible instead of panic

This commit is contained in:
Lucjan Suski 2017-03-20 21:16:55 +01:00
parent 17098ddc8f
commit c83ac31e71
2 changed files with 12 additions and 8 deletions

View file

@ -998,15 +998,15 @@ impl CanvasRenderingContext2DMethods for CanvasRenderingContext2D {
let sw = cmp::max(1, sw.abs().to_u32().unwrap()); let sw = cmp::max(1, sw.abs().to_u32().unwrap());
let sh = cmp::max(1, sh.abs().to_u32().unwrap()); let sh = cmp::max(1, sh.abs().to_u32().unwrap());
Ok(ImageData::new(&self.global(), sw, sh, None)) ImageData::new(&self.global(), sw, sh, None)
} }
// https://html.spec.whatwg.org/multipage/#dom-context-2d-createimagedata // https://html.spec.whatwg.org/multipage/#dom-context-2d-createimagedata
fn CreateImageData_(&self, imagedata: &ImageData) -> Fallible<Root<ImageData>> { fn CreateImageData_(&self, imagedata: &ImageData) -> Fallible<Root<ImageData>> {
Ok(ImageData::new(&self.global(), ImageData::new(&self.global(),
imagedata.Width(), imagedata.Width(),
imagedata.Height(), imagedata.Height(),
None)) None)
} }
// https://html.spec.whatwg.org/multipage/#dom-context-2d-getimagedata // https://html.spec.whatwg.org/multipage/#dom-context-2d-getimagedata
@ -1059,7 +1059,7 @@ impl CanvasRenderingContext2DMethods for CanvasRenderingContext2D {
chunk[2] = UNPREMULTIPLY_TABLE[256 * alpha + chunk[2] as usize]; chunk[2] = UNPREMULTIPLY_TABLE[256 * alpha + chunk[2] as usize];
} }
Ok(ImageData::new(&self.global(), sw, sh, Some(data))) ImageData::new(&self.global(), sw, sh, Some(data))
} }
// https://html.spec.whatwg.org/multipage/#dom-context-2d-putimagedata // https://html.spec.whatwg.org/multipage/#dom-context-2d-putimagedata

View file

@ -28,7 +28,11 @@ pub struct ImageData {
impl ImageData { impl ImageData {
#[allow(unsafe_code)] #[allow(unsafe_code)]
pub fn new(global: &GlobalScope, width: u32, height: u32, mut data: Option<Vec<u8>>) -> Root<ImageData> { pub fn new(global: &GlobalScope,
width: u32,
height: u32,
mut data: Option<Vec<u8>>)
-> Fallible<Root<ImageData>> {
let len = width * height * 4; let len = width * height * 4;
unsafe { unsafe {
let cx = global.get_cx(); let cx = global.get_cx();
@ -41,7 +45,7 @@ impl ImageData {
None => CreateWith::Length(len), None => CreateWith::Length(len),
}; };
Uint8ClampedArray::create(cx, data, js_object.handle_mut()).unwrap(); Uint8ClampedArray::create(cx, data, js_object.handle_mut()).unwrap();
Self::new_with_jsobject(global, width, Some(height), Some(js_object.get())).unwrap() Self::new_with_jsobject(global, width, Some(height), Some(js_object.get()))
} }
} }