aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs159
1 files changed, 67 insertions, 92 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 2efe0af..bffdb6d 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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()
}
}