diff --git a/layers.rs b/layers.rs index 69cf947..2748127 100644 --- a/layers.rs +++ b/layers.rs @@ -177,7 +177,7 @@ impl ContainerLayer { assert!(container.deref() as *ContainerLayer == pseudo_self.deref() as *ContainerLayer); }, - _ => fail!(~"Invalid parent of child in layer tree"), + _ => fail!("Invalid parent of child in layer tree"), } match child_common.next_sibling { diff --git a/platform/android/surface.rs b/platform/android/surface.rs index 6c6b467..808a33b 100644 --- a/platform/android/surface.rs +++ b/platform/android/surface.rs @@ -20,7 +20,7 @@ use libc::c_void; use std::cast; use std::mem; use std::ptr; -use std::slice; +use std::vec::Vec; /// FIXME(Aydin Kim) :Currently, native surface is consist of 2 types of hybrid image buffer. EGLImageKHR is used to GPU rendering and vector is used to CPU rendering. EGL extension seems not provide simple way to accessing its bitmap directly. In the future, we need to find out the way to integrate them. @@ -81,11 +81,11 @@ impl NativeSurfaceMethods for NativeSurface { fn new(_native_context: &NativePaintingGraphicsContext, size: Size2D, _stride: i32) -> NativeSurface { unsafe { let len = size.width * size.height * 4; - let bitmap = slice::from_elem::(len as uint, 0); + let bitmap: Vec = Vec::from_elem(len as uint, 0 as u8); NativeSurface { image: None, - bitmap: cast::transmute(bitmap), + bitmap: cast::transmute(bitmap.as_ptr()), will_leak : true, } } diff --git a/platform/macos/surface.rs b/platform/macos/surface.rs index cad74d9..246ad6b 100644 --- a/platform/macos/surface.rs +++ b/platform/macos/surface.rs @@ -25,8 +25,8 @@ use opengles::cgl::{CGLPixelFormatObj, CORE_BOOLEAN_ATTRIBUTES, CORE_INTEGER_ATT use opengles::cgl::{kCGLNoError}; use opengles::gl2::GLint; use collections::HashMap; -use std::local_data; use std::ptr; +use std::vec::Vec; use platform::surface::NativeSurfaceMethods; use texturegl::Texture; @@ -50,7 +50,7 @@ impl NativeGraphicsMetadata { pub fn from_descriptor(descriptor: &NativeGraphicsMetadataDescriptor) -> NativeGraphicsMetadata { unsafe { - let mut attributes = ~[]; + let mut attributes = Vec::new(); for (i, &set) in descriptor.boolean_attributes.iter().enumerate() { if set { attributes.push(CORE_BOOLEAN_ATTRIBUTES[i]); @@ -63,7 +63,7 @@ impl NativeGraphicsMetadata { attributes.push(0); let mut pixel_format = ptr::null(); let mut count = 0; - assert!(CGLChoosePixelFormat(&attributes[0], &mut pixel_format, &mut count) == + assert!(CGLChoosePixelFormat(attributes.as_ptr(), &mut pixel_format, &mut count) == kCGLNoError); assert!(pixel_format != ptr::null()); assert!(count > 0); @@ -79,16 +79,16 @@ impl NativeGraphicsMetadata { /// pixel format object. #[deriving(Clone, Decodable, Encodable)] pub struct NativeGraphicsMetadataDescriptor { - boolean_attributes: ~[bool], - integer_attributes: ~[GLint], + boolean_attributes: Vec, + integer_attributes: Vec, } impl NativeGraphicsMetadataDescriptor { pub fn from_metadata(metadata: NativeGraphicsMetadata) -> NativeGraphicsMetadataDescriptor { unsafe { let mut descriptor = NativeGraphicsMetadataDescriptor { - boolean_attributes: ~[], - integer_attributes: ~[], + boolean_attributes: Vec::new(), + integer_attributes: Vec::new(), }; for &attribute in CORE_BOOLEAN_ATTRIBUTES.iter() { let mut value = 0; @@ -150,14 +150,14 @@ impl NativeSurface { let id = io_surface.get_id(); let mut io_surface = Some(io_surface); - local_data::modify(io_surface_repository, |opt_repository| { - let mut repository = match opt_repository { - None => HashMap::new(), - Some(repository) => repository, - }; - repository.insert(id, io_surface.take().unwrap()); - Some(repository) - }); + + let opt_repository = io_surface_repository.replace(None); + let mut repository = match opt_repository { + None => HashMap::new(), + Some(repository) => repository, + }; + repository.insert(id, io_surface.take().unwrap()); + io_surface_repository.replace(Some(repository)); NativeSurface { io_surface_id: Some(id), @@ -219,9 +219,11 @@ impl NativeSurfaceMethods for NativeSurface { } fn destroy(&mut self, _: &NativePaintingGraphicsContext) { - local_data::get_mut(io_surface_repository, |opt_repository| { - opt_repository.unwrap().remove(&self.io_surface_id.unwrap()) - }); + // There is no mutable borrow of items in local data. + let opt_repository = io_surface_repository.replace(None); + let mut repo = opt_repository.unwrap(); + repo.remove(&self.io_surface_id.unwrap()); + io_surface_repository.replace(Some(repo)); self.io_surface_id = None; self.mark_wont_leak() } diff --git a/util.rs b/util.rs index 0b672a7..36a27e3 100644 --- a/util.rs +++ b/util.rs @@ -9,11 +9,9 @@ // Miscellaneous utilities. -use std::slice; - -pub fn convert_rgb32_to_rgb24(buffer: ~[u8]) -> ~[u8] { +pub fn convert_rgb32_to_rgb24(buffer: &[u8]) -> Vec { let mut i = 0; - slice::from_fn(buffer.len() * 3 / 4, |j| { + Vec::from_fn(buffer.len() * 3 / 4, |j| { match j % 3 { 0 => { buffer[i + 2]