diff options
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 159 |
1 files changed, 67 insertions, 92 deletions
@@ -2,113 +2,88 @@ extern crate libc; +pub use events::{Event, PositionChanged, SizeChanged, Closed, CursorPositionChanged, Focused}; +pub use events::{Iconified, NeedRefresh, FramebufferSizeChanged}; +pub use hints::{Hints, ClientAPI, Profile}; + #[cfg(windows)] -pub use win32::Window; +use winimpl = win32; #[cfg(windows)] mod win32; -#[deriving(Clone,Show)] -pub enum Event { - /// The position of the window has changed. - PositionChanged(uint, uint), +mod events; +mod hints; - /// The size of the window has changed. - SizeChanged(uint, uint), +pub struct Window { + window: winimpl::Window +} - /// The window has been closed. - Closed, +impl Window { + #[inline] + pub fn new(dimensions: Option<(uint, uint)>, title: &str, hints: &Hints) + -> Result<Window, String> + { + let win = try!(winimpl::Window::new(dimensions, title, hints)); + Ok(Window{window: win}) + } - /// The cursor has moved on the window. - /// - /// The parameter are the (x,y) coords in pixels relative to the top-left corner of the window. - CursorPositionChanged(uint, uint), + /// Returns true if the window has been closed by the user. + #[inline] + pub fn should_close(&self) -> bool { + self.window.should_close() + } - /// The window gained or lost focus. - /// - /// The parameter is true if the window has gained focus, and false if it has lost focus. - Focused(bool), + /// Modifies the title of the window. + #[inline] + pub fn set_title(&self, title: &str) { + self.window.set_title(title) + } - /// The window has been turned into an icon or restored. - /// - /// The parameter is true if the window has been iconified, and false if it has been restored. - Iconified(bool), + #[inline] + pub fn get_position(&self) -> (uint, uint) { + self.window.get_position() + } - /// The system asked that the content of this window must be redrawn. - NeedRefresh, + #[inline] + pub fn set_position(&self, x: uint, y: uint) { + self.window.set_position(x, y) + } - /// The size of the framebuffer of the window has changed. - FramebufferSizeChanged(uint, uint), -} + #[inline] + pub fn get_size(&self) -> (uint, uint) { + self.window.get_size() + } -#[deriving(Clone,Show)] -pub struct Hints { - pub resizable: bool, - pub visible: bool, - pub decorated: bool, - pub red_bits: u8, - pub green_bits: u8, - pub blue_bits: u8, - pub alpha_bits: u8, - pub depth_bits: u8, - pub stencil_bits: u8, - pub accum_red_bits: u8, - pub accum_green_bits: u8, - pub accum_blue_bits: u8, - pub accum_alpha_bits: u8, - pub aux_buffers: u8, - pub samples: u8, - pub refresh_rate: u8, - pub stereo: bool, - pub srgb_capable: bool, - pub client_api: ClientAPI, - pub context_version: (u8, u8), - //pub robustness: , - pub opengl_forward_compat: bool, - pub opengl_debug_context: bool, - pub opengl_profile: Profile, -} + #[inline] + pub fn set_size(&self, x: uint, y: uint) { + self.window.set_size(x, y) + } -#[deriving(Clone, Show)] -pub enum ClientAPI { - OpenGL, - OpenGLES, -} + // TODO: return iterator + #[inline] + pub fn poll_events(&self) -> Vec<Event> { + self.window.poll_events() + } -#[deriving(Clone, Show)] -pub enum Profile { - AnyProfile, - CompatProfile, - CoreProfile, -} + // TODO: return iterator + #[inline] + pub fn wait_events(&self) -> Vec<Event> { + self.window.wait_events() + } + + #[inline] + pub fn make_current(&self) { + self.window.make_current() + } + + #[inline] + pub fn get_proc_address(&self, addr: &str) -> *const () { + self.window.get_proc_address(addr) + } -impl std::default::Default for Hints { - fn default() -> Hints { - Hints { - resizable: true, - visible: true, - decorated: true, - red_bits: 8, - green_bits: 8, - blue_bits: 8, - alpha_bits: 8, - depth_bits: 24, - stencil_bits: 8, - accum_red_bits: 0, - accum_green_bits: 0, - accum_blue_bits: 0, - accum_alpha_bits: 0, - aux_buffers: 0, - samples: 0, - refresh_rate: 0, - stereo: false, - srgb_capable: false, - client_api: OpenGL, - context_version: (1, 0), - //robustness: , - opengl_forward_compat: false, - opengl_debug_context: false, - opengl_profile: AnyProfile, - } + #[inline] + pub fn swap_buffers(&self) { + self.window.swap_buffers() } } |