diff --git a/src/sdl/event.rs b/src/sdl/event.rs index c0d50ee..c9c9f58 100644 --- a/src/sdl/event.rs +++ b/src/sdl/event.rs @@ -225,7 +225,7 @@ pub enum RepeatInterval { CustomRepeatInterval(int) } -#[deriving(PartialEq, Eq, FromPrimitive, PartialOrd, Ord)] +#[deriving(PartialEq, Eq, FromPrimitive, PartialOrd, Ord, Clone)] pub enum Key { UnknownKey = 0, BackspaceKey = 8, diff --git a/src/sdl/video.rs b/src/sdl/video.rs index 97fdede..5e00744 100644 --- a/src/sdl/video.rs +++ b/src/sdl/video.rs @@ -190,6 +190,21 @@ impl Drop for Surface { } } +impl Clone for Surface { + fn clone(&self) -> Surface { + if !self.owned { + Surface{ raw: self.raw, owned: false } + } + else { + let raw = unsafe { ll::SDL_ConvertSurface(self.raw, (*self.raw).format, (*self.raw).flags) }; + if raw.is_null() { // this should never happen, since self.raw, format and flags are proven correct + fail!("couldn't clone surface: {}", get_error()); + } + Surface{ raw: raw, owned: true } + } + } +} + #[deriving(PartialEq)] #[allow(raw_pointer_deriving)] pub struct Palette {