diff options
| -rw-r--r-- | src/cocoa/mod.rs | 51 | 
1 files changed, 24 insertions, 27 deletions
diff --git a/src/cocoa/mod.rs b/src/cocoa/mod.rs index f4b2726..62eedc6 100644 --- a/src/cocoa/mod.rs +++ b/src/cocoa/mod.rs @@ -456,10 +456,7 @@ impl Window {                  NSBackingStoreBuffered,                  NO,              )); - -            if *window == nil { -                None -            } else { +            window.non_nil().map(|window| {                  let title = IdRef::new(NSString::alloc(nil).init_str(title));                  window.setTitle_(*title);                  window.setAcceptsMouseMovedEvents_(YES); @@ -469,21 +466,19 @@ impl Window {                  else {                      window.center();                  } -                Some(window) -            } +                window +            })          }      }      fn create_view(window: id) -> Option<IdRef> {          unsafe {              let view = IdRef::new(NSView::alloc(nil).init()); -            if *view == nil { -                None -            } else { +            view.non_nil().map(|view| {                  view.setWantsBestResolutionOpenGLSurface_(YES);                  window.setContentView_(*view); -                Some(view) -            } +                view +            })          }      } @@ -513,21 +508,17 @@ impl Window {              ];              let pixelformat = IdRef::new(NSOpenGLPixelFormat::alloc(nil).initWithAttributes_(&attributes)); -            if *pixelformat == nil { -                return None; -            } - -            let context = IdRef::new(NSOpenGLContext::alloc(nil).initWithFormat_shareContext_(*pixelformat, nil)); -            if *context == nil { -                None -            } else { -                context.setView_(view); -                if vsync { -                    let value = 1; -                    context.setValues_forParameter_(&value, NSOpenGLContextParameter::NSOpenGLCPSwapInterval); -                } -                Some(context) -            } +            pixelformat.non_nil().map(|pixelformat| { +                let context = IdRef::new(NSOpenGLContext::alloc(nil).initWithFormat_shareContext_(*pixelformat, nil)); +                context.non_nil().map(|context| { +                    context.setView_(view); +                    if vsync { +                        let value = 1; +                        context.setValues_forParameter_(&value, NSOpenGLContextParameter::NSOpenGLCPSwapInterval); +                    } +                    context +                }) +            }).unwrap_or(None)          }      } @@ -715,9 +706,15 @@ impl IdRef {      }      fn retain(i: id) -> IdRef { -        unsafe { msg_send::<()>()(i, selector("retain")) }; +        if i != nil { +            unsafe { msg_send::<()>()(i, selector("retain")) }; +        }          IdRef(i)      } + +    fn non_nil(self) -> Option<IdRef> { +        if self.0 == nil { None } else { Some(self) } +    }  }  impl Drop for IdRef {  | 
