aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomaka17 <pierre.krieger1708@gmail.com>2014-07-31 09:56:53 +0200
committerTomaka17 <pierre.krieger1708@gmail.com>2014-07-31 10:02:01 +0200
commitdb8955a9d85d7e44e63dd3fd7634230bc1aed635 (patch)
tree43c376d6b61fc824a2b8f678e7137f245bda16e3
parent8911e162ce526dd8025b7740fd643041d5624a54 (diff)
downloadglutin-db8955a9d85d7e44e63dd3fd7634230bc1aed635.tar.gz
glutin-db8955a9d85d7e44e63dd3fd7634230bc1aed635.zip
Add API for monitors
-rw-r--r--examples/fullscreen.rs48
-rw-r--r--src/lib.rs31
-rw-r--r--src/win32/mod.rs8
-rw-r--r--src/x11/mod.rs8
4 files changed, 95 insertions, 0 deletions
diff --git a/examples/fullscreen.rs b/examples/fullscreen.rs
new file mode 100644
index 0000000..cfbc35c
--- /dev/null
+++ b/examples/fullscreen.rs
@@ -0,0 +1,48 @@
+extern crate init = "gl-init-rs";
+extern crate libc;
+extern crate gl;
+
+use std::io::stdio::stdin;
+
+fn main() {
+ use std::default::Default;
+
+ // enumerating monitors
+ let monitor = {
+ for (num, monitor) in init::get_available_monitors().enumerate() {
+ println!("Monitor #{}: {}", num, monitor.get_name());
+ }
+
+ print!("Please write the number of the monitor to use: ");
+ let num = from_str(stdin().read_line().unwrap().as_slice()).unwrap();
+ let monitor = init::get_available_monitors().nth(num).unwrap();
+
+ println!("Using {}", monitor.get_name());
+
+ monitor
+ };
+
+ let window = init::Window::new(None, "Hello world!", &Default::default(),
+ Some(monitor)).unwrap();
+
+ unsafe { window.make_current() };
+
+ gl::load_with(|symbol| window.get_proc_address(symbol) as *const libc::c_void);
+
+ let version = {
+ use std::c_str::CString;
+ unsafe { CString::new(gl::GetString(gl::VERSION) as *const i8, false) }
+ };
+
+ println!("OpenGL version {}", version.as_str().unwrap());
+
+ gl::ClearColor(0.0, 1.0, 0.0, 1.0);
+
+ while !window.is_closed() {
+ println!("{}", window.wait_events());
+
+ gl::Clear(gl::COLOR_BUFFER_BIT);
+
+ window.swap_buffers();
+ }
+}
diff --git a/src/lib.rs b/src/lib.rs
index 061f85a..ab35774 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -230,3 +230,34 @@ impl Window {
self.window.swap_buffers()
}
}
+
+/// An iterator for the list of available monitors.
+// Implementation note: we retreive the list once, then serve each element by one by one.
+// This may change in the future.
+pub struct AvailableMonitorsIter {
+ data: Vec<winimpl::MonitorID>,
+}
+
+impl Iterator<MonitorID> for AvailableMonitorsIter {
+ fn next(&mut self) -> Option<MonitorID> {
+ self.data.remove(0).map(|id| MonitorID(id))
+ }
+}
+
+/// Returns the list of all available monitors.
+pub fn get_available_monitors() -> AvailableMonitorsIter {
+ let data = winimpl::get_available_monitors();
+ AvailableMonitorsIter{ data: data }
+}
+
+/// Returns the primary monitor of the system.
+pub fn get_primary_monitor() -> MonitorID {
+ MonitorID(winimpl::get_primary_monitor())
+}
+
+impl MonitorID {
+ /// Returns a human-readable name of the monitor.
+ pub fn get_name(&self) -> Option<String> {
+ Some("<Unknown>".to_string())
+ }
+}
diff --git a/src/win32/mod.rs b/src/win32/mod.rs
index a5df94c..232f0e5 100644
--- a/src/win32/mod.rs
+++ b/src/win32/mod.rs
@@ -19,6 +19,14 @@ pub struct Window {
pub struct MonitorID(uint);
+pub fn get_available_monitors() -> Vec<MonitorID> {
+ unimplemented!()
+}
+
+pub fn get_primary_monitor() -> MonitorID {
+ unimplemented!()
+}
+
/// Stores the list of all the windows.
/// Only available on callback thread.
local_data_key!(pub WINDOWS_LIST: Mutex<Vec<(ffi::HWND, Sender<Event>)>>)
diff --git a/src/x11/mod.rs b/src/x11/mod.rs
index e00dc50..9d08d4a 100644
--- a/src/x11/mod.rs
+++ b/src/x11/mod.rs
@@ -16,6 +16,14 @@ pub struct Window {
pub struct MonitorID(uint);
+pub fn get_available_monitors() -> Vec<MonitorID> {
+ unimplemented!()
+}
+
+pub fn get_primary_monitor() -> MonitorID {
+ unimplemented!()
+}
+
impl Window {
pub fn new(dimensions: Option<(uint, uint)>, title: &str, hints: &Hints, _: Option<MonitorID>)
-> Result<Window, String>