diff --git a/src/servo/gfx/renderer.rs b/src/servo/gfx/renderer.rs index f4981a60cd8..ad4d53fdfb8 100644 --- a/src/servo/gfx/renderer.rs +++ b/src/servo/gfx/renderer.rs @@ -130,20 +130,7 @@ fn draw_image(draw_target: &DrawTarget, item: dl::display_item, image: arc<~Imag let size = Size2D(image.width as i32, image.height as i32); let stride = image.width * 4; - // Do color space conversion :( - let data = do vec::from_fn(image.width * image.height * 4) |i| { - let color = i % 4; - let pixel = i / 4; - match color { - 0 => image.data[pixel * 3 + 2], - 1 => image.data[pixel * 3 + 1], - 2 => image.data[pixel * 3 + 0], - 3 => 0xffu8, - _ => fail - } - }; - - let azure_surface = draw_target.create_source_surface_from_data(data, size, stride as i32, + let azure_surface = draw_target.create_source_surface_from_data(image.data, size, stride as i32, B8G8R8A8); let source_rect = Rect(Point2D(0 as AzFloat, 0 as AzFloat), Size2D(image.width as AzFloat, image.height as AzFloat)); diff --git a/src/servo/image/base.rs b/src/servo/image/base.rs index dff51b78af2..791a4617772 100644 --- a/src/servo/image/base.rs +++ b/src/servo/image/base.rs @@ -4,15 +4,35 @@ export load; export load_from_memory; export test_image_bin; -import stb_image::image::{image, load, load_from_memory}; +import stb_image = stb_image::image; // FIXME: Images must not be copied every frame. Instead we should atomically // reference count them. -type Image = image; +type Image = stb_image::image; const TEST_IMAGE: [u8 * 4962] = #include_bin("test.jpeg"); fn test_image_bin() -> ~[u8] { return vec::from_fn(4962, |i| TEST_IMAGE[i]); } + +fn load_from_memory(buffer: &[u8]) -> option { + do stb_image::load_from_memory(buffer).map |image| { + + // Do color space conversion :( + let data = do vec::from_fn(image.width * image.height * 4) |i| { + let color = i % 4; + let pixel = i / 4; + match color { + 0 => image.data[pixel * 3 + 2], + 1 => image.data[pixel * 3 + 1], + 2 => image.data[pixel * 3 + 0], + 3 => 0xffu8, + _ => fail + } + }; + + stb_image::image(image.width, image.height, image.depth, data) + } +} diff --git a/src/servo/layout/base.rs b/src/servo/layout/base.rs index d6bd9e2dc6f..60379e4de9c 100644 --- a/src/servo/layout/base.rs +++ b/src/servo/layout/base.rs @@ -9,7 +9,7 @@ import gfx::geometry::{au, zero_size_au}; import geom::point::Point2D; import geom::rect::Rect; import geom::size::Size2D; -import image::base::{Image, load}; +import image::base::Image; import util::tree; import util::color::Color; import text::TextBox; diff --git a/src/servo/layout/display_list_builder.rs b/src/servo/layout/display_list_builder.rs index 044e4ce2e7c..6fda77b23f9 100644 --- a/src/servo/layout/display_list_builder.rs +++ b/src/servo/layout/display_list_builder.rs @@ -10,7 +10,6 @@ import geom::rect::Rect; import geom::size::Size2D; import gfx::geometry::{au, au_to_px, box, px_to_au}; import gfx::renderer; -import image::base::load; import util::tree; import dvec::dvec; diff --git a/src/servo/layout/style/apply.rs b/src/servo/layout/style/apply.rs index 575cbf145f5..191cb81e67e 100644 --- a/src/servo/layout/style/apply.rs +++ b/src/servo/layout/style/apply.rs @@ -3,7 +3,6 @@ import dom::base::{Element, HTMLImageElement, Node}; import dom::style::{Percent, Mm, Pt, Px, Auto, PtToPx, MmToPx}; import gfx::geometry::au_to_px; -import image::base::load; import base::{Box, BTree, NTree, LayoutData, SpecifiedStyle, ImageHolder, BlockBox, InlineBox, IntrinsicBox, TextBox}; import traverse::{top_down_traversal};