From e5d91cdbda6118f855b4de4f50ff1b71d949a115 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=B3di=20Bal=C3=A1zs?= Date: Wed, 8 Oct 2014 15:08:26 +0200 Subject: [PATCH] cleaner and safer code --- src/sdl2/render.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/sdl2/render.rs b/src/sdl2/render.rs index 988e9aa0..d138587a 100644 --- a/src/sdl2/render.rs +++ b/src/sdl2/render.rs @@ -702,14 +702,13 @@ impl Texture { else { Err(get_error()) } } - pub fn lock(&self, rect: Option) -> SdlResult<(CVec, i32)> { + fn unsafe_lock(&self, rect: Option) -> SdlResult<(CVec, i32)> { let q = try!(self.query()); unsafe { let actual_rect = match rect { Some(ref rect) => rect as *const _, None => ptr::null() }; - let pixels : *const c_void = ptr::null(); let pitch = 0i32; let ret = ll::SDL_LockTexture(self.raw, actual_rect, &pixels, &pitch); @@ -722,6 +721,17 @@ impl Texture { } } + pub fn lock(&self, rect: Option, func: |CVec, i32| -> ()) -> SdlResult<()> { + match self.unsafe_lock(rect) { + Ok((cvec, pitch)) => { + func(cvec, pitch); + self.unlock(); + Ok(()) + } + Err(e) => Err(e), + } + } + pub fn unlock(&self) { unsafe { ll::SDL_UnlockTexture(self.raw) } }