diff options
author | Alan Jeffrey <ajeffrey@mozilla.com> | 2017-04-03 14:35:57 -0500 |
---|---|---|
committer | Alan Jeffrey <ajeffrey@mozilla.com> | 2017-06-07 13:49:30 -0500 |
commit | fd17dcd60442e71f75010a34c6bcfe1c04aca3e5 (patch) | |
tree | e367aa4202f2da0e6e0dac33fbdcd9ca48e2f92f /components/net/image_cache.rs | |
parent | 7e273d6c9b86d6ffbf216e84ae7326976888e5ef (diff) | |
download | servo-fd17dcd60442e71f75010a34c6bcfe1c04aca3e5.tar.gz servo-fd17dcd60442e71f75010a34c6bcfe1c04aca3e5.zip |
Implemented the plumbing for paint worklets.
Diffstat (limited to 'components/net/image_cache.rs')
-rw-r--r-- | components/net/image_cache.rs | 36 |
1 files changed, 15 insertions, 21 deletions
diff --git a/components/net/image_cache.rs b/components/net/image_cache.rs index b8467e5a461..d0c31eb23b5 100644 --- a/components/net/image_cache.rs +++ b/components/net/image_cache.rs @@ -57,9 +57,18 @@ fn get_placeholder_image(webrender_api: &webrender_traits::RenderApi, path: &Pat let mut image_data = vec![]; try!(file.read_to_end(&mut image_data)); let mut image = load_from_memory(&image_data).unwrap(); + set_webrender_image_key(webrender_api, &mut image); + Ok(Arc::new(image)) +} + +fn set_webrender_image_key(webrender_api: &webrender_traits::RenderApi, image: &mut Image) { + if image.id.is_some() { return; } let format = convert_format(image.format); let mut bytes = Vec::new(); bytes.extend_from_slice(&*image.bytes); + if format == webrender_traits::ImageFormat::RGBA8 { + premultiply(bytes.as_mut_slice()); + } let descriptor = webrender_traits::ImageDescriptor { width: image.width, height: image.height, @@ -72,7 +81,6 @@ fn get_placeholder_image(webrender_api: &webrender_traits::RenderApi, path: &Pat let image_key = webrender_api.generate_image_key(); webrender_api.add_image(image_key, descriptor, data, None); image.id = Some(image_key); - Ok(Arc::new(image)) } // TODO(gw): This is a port of the old is_image_opaque code from WR. @@ -338,26 +346,7 @@ impl ImageCacheStore { }; match load_result { - LoadResult::Loaded(ref mut image) => { - let format = convert_format(image.format); - let mut bytes = Vec::new(); - bytes.extend_from_slice(&*image.bytes); - if format == webrender_traits::ImageFormat::RGBA8 { - premultiply(bytes.as_mut_slice()); - } - let descriptor = webrender_traits::ImageDescriptor { - width: image.width, - height: image.height, - stride: None, - format: format, - offset: 0, - is_opaque: is_image_opaque(format, &bytes), - }; - let data = webrender_traits::ImageData::new(bytes); - let image_key = self.webrender_api.generate_image_key(); - self.webrender_api.add_image(image_key, descriptor, data, None); - image.id = Some(image_key); - } + LoadResult::Loaded(ref mut image) => set_webrender_image_key(&self.webrender_api, image), LoadResult::PlaceholderLoaded(..) | LoadResult::None => {} } @@ -576,4 +565,9 @@ impl ImageCache for ImageCacheImpl { } } } + + /// Ensure an image has a webrender key. + fn set_webrender_image_key(&self, image: &mut Image) { + set_webrender_image_key(&self.store.lock().unwrap().webrender_api, image); + } } |