diff options
Diffstat (limited to 'components/net')
-rw-r--r-- | components/net/Cargo.toml | 1 | ||||
-rw-r--r-- | components/net/image_cache.rs | 27 | ||||
-rw-r--r-- | components/net/lib.rs | 1 |
3 files changed, 4 insertions, 25 deletions
diff --git a/components/net/Cargo.toml b/components/net/Cargo.toml index ef58b6f018d..402044c1ecd 100644 --- a/components/net/Cargo.toml +++ b/components/net/Cargo.toml @@ -34,6 +34,7 @@ mime_guess = "1.8.0" msg = {path = "../msg"} net_traits = {path = "../net_traits"} openssl = "0.9" +pixels = {path = "../pixels"} profile_traits = {path = "../profile_traits"} serde = "1.0" serde_json = "1.0" diff --git a/components/net/image_cache.rs b/components/net/image_cache.rs index 40ef8041ef7..ba0d679b0e3 100644 --- a/components/net/image_cache.rs +++ b/components/net/image_cache.rs @@ -9,6 +9,7 @@ use net_traits::image::base::{Image, ImageMetadata, PixelFormat, load_from_memor use net_traits::image_cache::{CanRequestImages, ImageCache, ImageResponder}; use net_traits::image_cache::{ImageOrMetadataAvailable, ImageResponse, ImageState}; use net_traits::image_cache::{PendingImageId, UsePlaceholder}; +use pixels; use servo_url::ServoUrl; use std::collections::HashMap; use std::collections::hash_map::Entry::{Occupied, Vacant}; @@ -52,7 +53,7 @@ fn set_webrender_image_key(webrender_api: &webrender_api::RenderApi, image: &mut let is_opaque = match image.format { PixelFormat::BGRA8 => { bytes.extend_from_slice(&*image.bytes); - premultiply(bytes.as_mut_slice()) + pixels::premultiply_inplace(bytes.as_mut_slice()) } PixelFormat::RGB8 => { for bgr in image.bytes.chunks(3) { @@ -86,30 +87,6 @@ fn set_webrender_image_key(webrender_api: &webrender_api::RenderApi, image: &mut image.id = Some(image_key); } -// Returns true if the image was found to be -// completely opaque. -fn premultiply(data: &mut [u8]) -> bool { - let mut is_opaque = true; - let length = data.len(); - - let mut i = 0; - while i < length { - let b = data[i + 0] as u32; - let g = data[i + 1] as u32; - let r = data[i + 2] as u32; - let a = data[i + 3] as u32; - - data[i + 0] = (b * a / 255) as u8; - data[i + 1] = (g * a / 255) as u8; - data[i + 2] = (r * a / 255) as u8; - - i += 4; - is_opaque = is_opaque && a == 255; - } - - is_opaque -} - // ====================================================================== // Aux structs and enums. // ====================================================================== diff --git a/components/net/lib.rs b/components/net/lib.rs index ab5c3bc74a2..285a755a9e9 100644 --- a/components/net/lib.rs +++ b/components/net/lib.rs @@ -27,6 +27,7 @@ extern crate mime_guess; extern crate msg; extern crate net_traits; extern crate openssl; +extern crate pixels; #[macro_use] extern crate profile_traits; #[macro_use] extern crate serde; |