mirror of
https://github.com/italicsjenga/winit-sonoma-fix.git
synced 2024-12-23 22:01:31 +11:00
Add API for monitors
This commit is contained in:
parent
8911e162ce
commit
db8955a9d8
48
examples/fullscreen.rs
Normal file
48
examples/fullscreen.rs
Normal file
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
31
src/lib.rs
31
src/lib.rs
|
@ -230,3 +230,34 @@ impl Window {
|
||||||
self.window.swap_buffers()
|
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())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -19,6 +19,14 @@ pub struct Window {
|
||||||
|
|
||||||
pub struct MonitorID(uint);
|
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.
|
/// Stores the list of all the windows.
|
||||||
/// Only available on callback thread.
|
/// Only available on callback thread.
|
||||||
local_data_key!(pub WINDOWS_LIST: Mutex<Vec<(ffi::HWND, Sender<Event>)>>)
|
local_data_key!(pub WINDOWS_LIST: Mutex<Vec<(ffi::HWND, Sender<Event>)>>)
|
||||||
|
|
|
@ -16,6 +16,14 @@ pub struct Window {
|
||||||
|
|
||||||
pub struct MonitorID(uint);
|
pub struct MonitorID(uint);
|
||||||
|
|
||||||
|
pub fn get_available_monitors() -> Vec<MonitorID> {
|
||||||
|
unimplemented!()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_primary_monitor() -> MonitorID {
|
||||||
|
unimplemented!()
|
||||||
|
}
|
||||||
|
|
||||||
impl Window {
|
impl Window {
|
||||||
pub fn new(dimensions: Option<(uint, uint)>, title: &str, hints: &Hints, _: Option<MonitorID>)
|
pub fn new(dimensions: Option<(uint, uint)>, title: &str, hints: &Hints, _: Option<MonitorID>)
|
||||||
-> Result<Window, String>
|
-> Result<Window, String>
|
||||||
|
|
Loading…
Reference in a new issue