diff options
author | Jack Moffitt <jack@metajack.im> | 2014-08-27 08:49:40 -0600 |
---|---|---|
committer | Jack Moffitt <jack@metajack.im> | 2014-08-27 08:49:40 -0600 |
commit | b491f56e591ed8f90fa1bda1331cbb3b0507a71b (patch) | |
tree | c45ae4ed2830c5c1fb86e51e85e95654d92429d7 /src | |
parent | a081b9a56f8654d4a9796c0ea6b119bf700debeb (diff) | |
parent | c24287808d292b72f990a104c3c093b31bf1cd5a (diff) | |
download | servo-b491f56e591ed8f90fa1bda1331cbb3b0507a71b.tar.gz servo-b491f56e591ed8f90fa1bda1331cbb3b0507a71b.zip |
Merge pull request #3162 from SimonSapin/png-enum
Update to png::Image::pixels as an enum.
Diffstat (limited to 'src')
-rw-r--r-- | src/components/compositing/compositor.rs | 3 | ||||
-rw-r--r-- | src/components/gfx/render_context.rs | 12 | ||||
-rw-r--r-- | src/components/net/image/base.rs | 29 | ||||
m--------- | src/support/png/rust-png | 0 | ||||
-rw-r--r-- | src/test/harness/reftest/reftest.rs | 25 |
5 files changed, 36 insertions, 33 deletions
diff --git a/src/components/compositing/compositor.rs b/src/components/compositing/compositor.rs index eee16607106..95b822e02d5 100644 --- a/src/components/compositing/compositor.rs +++ b/src/components/compositing/compositor.rs @@ -895,8 +895,7 @@ impl IOCompositor { let mut img = png::Image { width: width as u32, height: height as u32, - color_type: png::RGB8, - pixels: pixels, + pixels: png::RGB8(pixels), }; let res = png::store_png(&mut img, &path); assert!(res.is_ok()); diff --git a/src/components/gfx/render_context.rs b/src/components/gfx/render_context.rs index 46fce494b43..31c68e7c34d 100644 --- a/src/components/gfx/render_context.rs +++ b/src/components/gfx/render_context.rs @@ -15,7 +15,7 @@ use geom::size::Size2D; use geom::side_offsets::SideOffsets2D; use libc::types::common::c99::uint16_t; use libc::size_t; -use png::{RGBA8, K8, KA8}; +use png::{RGB8, RGBA8, K8, KA8}; use servo_net::image::base::Image; use servo_util::geometry::Au; use servo_util::opts::Opts; @@ -100,17 +100,15 @@ impl<'a> RenderContext<'a> { pub fn draw_image(&self, bounds: Rect<Au>, image: Arc<Box<Image>>) { let size = Size2D(image.width as i32, image.height as i32); - let pixel_width = match image.color_type { - RGBA8 => 4, - K8 => 1, - KA8 => 2, - _ => fail!("color type not supported"), + let (pixel_width, pixels) = match image.pixels { + RGBA8(ref pixels) => (4, pixels.as_slice()), + RGB8(_) | K8(_) | KA8(_) => fail!("color type not supported"), }; let stride = image.width * pixel_width; self.draw_target.make_current(); let draw_target_ref = &self.draw_target; - let azure_surface = draw_target_ref.create_source_surface_from_data(image.pixels.as_slice(), + let azure_surface = draw_target_ref.create_source_surface_from_data(pixels, size, stride as i32, B8G8R8A8); diff --git a/src/components/net/image/base.rs b/src/components/net/image/base.rs index 5e865976f48..deda4ee8556 100644 --- a/src/components/net/image/base.rs +++ b/src/components/net/image/base.rs @@ -18,17 +18,12 @@ pub fn test_image_bin() -> Vec<u8> { } // TODO(pcwalton): Speed up with SIMD, or better yet, find some way to not do this. -fn byte_swap(color_type: png::ColorType, data: &mut [u8]) { - match color_type { - png::RGBA8 => { - let length = data.len(); - for i in range_step(0, length, 4) { - let r = data[i + 2]; - data[i + 2] = data[i + 0]; - data[i + 0] = r; - } - } - _ => {} +fn byte_swap(data: &mut [u8]) { + let length = data.len(); + for i in range_step(0, length, 4) { + let r = data[i + 2]; + data[i + 2] = data[i + 0]; + data[i + 0] = r; } } @@ -40,7 +35,12 @@ pub fn load_from_memory(buffer: &[u8]) -> Option<Image> { if png::is_png(buffer) { match png::load_png_from_memory(buffer) { Ok(mut png_image) => { - byte_swap(png_image.color_type, png_image.pixels.as_mut_slice()); + match png_image.pixels { + png::RGB8(ref mut data) | png::RGBA8(ref mut data) => { + byte_swap(data.as_mut_slice()); + } + _ => {} + } Some(png_image) } Err(_err) => None, @@ -53,12 +53,11 @@ pub fn load_from_memory(buffer: &[u8]) -> Option<Image> { match stb_image::load_from_memory_with_depth(buffer, FORCE_DEPTH, true) { stb_image::ImageU8(mut image) => { assert!(image.depth == 4); - byte_swap(png::RGBA8, image.data.as_mut_slice()); + byte_swap(image.data.as_mut_slice()); Some(png::Image { width: image.width as u32, height: image.height as u32, - color_type: png::RGBA8, - pixels: image.data + pixels: png::RGBA8(image.data) }) } stb_image::ImageF32(_image) => fail!("HDR images not implemented"), diff --git a/src/support/png/rust-png b/src/support/png/rust-png -Subproject 869ec5657a628a72cbe0fcf9969e6a28eba4bf1 +Subproject 0fae0f48754d1af9b33d208a87f9abc632dc2dc diff --git a/src/test/harness/reftest/reftest.rs b/src/test/harness/reftest/reftest.rs index 57738bbf517..3dfb4ae32c2 100644 --- a/src/test/harness/reftest/reftest.rs +++ b/src/test/harness/reftest/reftest.rs @@ -209,7 +209,7 @@ fn make_test(reftest: Reftest) -> TestDescAndFn { } } -fn capture(reftest: &Reftest, side: uint) -> png::Image { +fn capture(reftest: &Reftest, side: uint) -> (u32, u32, Vec<u8>) { let filename = format!("/tmp/servo-reftest-{:06u}-{:u}.png", reftest.id, side); let mut args = reftest.servo_args.clone(); // GPU rendering is the default @@ -228,14 +228,22 @@ fn capture(reftest: &Reftest, side: uint) -> png::Image { }; assert!(retval == ExitStatus(0)); - png::load_png(&from_str::<Path>(filename.as_slice()).unwrap()).unwrap() + let image = png::load_png(&from_str::<Path>(filename.as_slice()).unwrap()).unwrap(); + let rgba8_bytes = match image.pixels { + png::RGBA8(pixels) => pixels, + _ => fail!(), + }; + (image.width, image.height, rgba8_bytes) } fn check_reftest(reftest: Reftest) { - let left = capture(&reftest, 0); - let right = capture(&reftest, 1); + let (left_width, left_height, left_bytes) = capture(&reftest, 0); + let (right_width, right_height, right_bytes) = capture(&reftest, 1); + + assert_eq!(left_width, right_width); + assert_eq!(left_height, right_height); - let pixels = left.pixels.iter().zip(right.pixels.iter()).map(|(&a, &b)| { + let pixels = left_bytes.iter().zip(right_bytes.iter()).map(|(&a, &b)| { if a as i8 - b as i8 == 0 { // White for correct 0xFF @@ -253,10 +261,9 @@ fn check_reftest(reftest: Reftest) { let output = from_str::<Path>(output_str.as_slice()).unwrap(); let mut img = png::Image { - width: left.width, - height: left.height, - color_type: png::RGBA8, - pixels: pixels, + width: left_width, + height: left_height, + pixels: png::RGBA8(pixels), }; let res = png::store_png(&mut img, &output); assert!(res.is_ok()); |