aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/events.rs33
-rw-r--r--src/hints.rs73
-rw-r--r--src/lib.rs159
3 files changed, 173 insertions, 92 deletions
diff --git a/src/events.rs b/src/events.rs
new file mode 100644
index 0000000..f66e6a2
--- /dev/null
+++ b/src/events.rs
@@ -0,0 +1,33 @@
+
+#[deriving(Clone,Show)]
+pub enum Event {
+ /// The position of the window has changed.
+ PositionChanged(uint, uint),
+
+ /// The size of the window has changed.
+ SizeChanged(uint, uint),
+
+ /// The window has been closed.
+ Closed,
+
+ /// 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),
+
+ /// 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),
+
+ /// 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),
+
+ /// The system asked that the content of this window must be redrawn.
+ NeedRefresh,
+
+ /// The size of the framebuffer of the window has changed.
+ FramebufferSizeChanged(uint, uint),
+}
diff --git a/src/hints.rs b/src/hints.rs
new file mode 100644
index 0000000..530fdc9
--- /dev/null
+++ b/src/hints.rs
@@ -0,0 +1,73 @@
+use std::default::Default;
+
+#[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,
+}
+
+#[deriving(Clone, Show)]
+pub enum ClientAPI {
+ OpenGL,
+ OpenGLES,
+}
+
+#[deriving(Clone, Show)]
+pub enum Profile {
+ AnyProfile,
+ CompatProfile,
+ CoreProfile,
+}
+
+impl 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,
+ }
+ }
+}
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()
}
}