aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Cargo.toml14
-rw-r--r--examples/support/mod.rs4
-rw-r--r--src/api/android/mod.rs12
-rw-r--r--src/api/caca/mod.rs2
-rw-r--r--src/api/cocoa/headless.rs7
-rw-r--r--src/api/cocoa/mod.rs21
-rw-r--r--src/api/emscripten/mod.rs39
-rw-r--r--src/api/ios/mod.rs6
-rw-r--r--src/api/osmesa/mod.rs2
-rw-r--r--src/api/x11/window.rs27
-rw-r--r--src/headless.rs7
-rw-r--r--src/lib.rs2
-rw-r--r--src/os/unix.rs11
-rw-r--r--src/os/windows.rs11
-rw-r--r--src/platform/emscripten/mod.rs16
-rw-r--r--src/platform/ios/mod.rs9
-rw-r--r--src/platform/linux/api_dispatch.rs6
-rw-r--r--src/platform/linux/mod.rs8
-rw-r--r--src/platform/mod.rs5
-rw-r--r--src/platform/windows/mod.rs11
-rw-r--r--src/window.rs6
21 files changed, 176 insertions, 50 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 825267a..3cce0ee 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,7 +1,7 @@
[package]
name = "glutin"
-version = "0.4.6"
-authors = ["tomaka <pierre.krieger1708@gmail.com>"]
+version = "0.4.8"
+authors = ["The glutin contributors, Pierre Krieger <pierre.krieger1708@gmail.com>"]
description = "Cross-platform OpenGL context provider."
keywords = ["windowing", "opengl"]
license = "Apache-2.0"
@@ -19,9 +19,6 @@ shared_library = "0.1.0"
gl_generator = "0.4"
khronos_api = "1.0"
-[dev-dependencies]
-clock_ticks = "0.1.0"
-
[target.arm-linux-androideabi.dependencies.android_glue]
version = "0.1"
@@ -107,6 +104,13 @@ wayland-kbd = "0.3.3"
wayland-window = "0.2.2"
x11-dl = "~2.3"
+[target.armv7-unknown-linux-gnueabihf.dependencies]
+osmesa-sys = "0.0.5"
+wayland-client = { version = "0.5.4", features = ["egl", "dlopen"] }
+wayland-kbd = "0.3.3"
+wayland-window = "0.2.2"
+x11-dl = "~2.3"
+
[target.aarch64-unknown-linux-gnu.dependencies]
osmesa-sys = "0.0.5"
wayland-client = { version = "0.5.4", features = ["egl", "dlopen"] }
diff --git a/examples/support/mod.rs b/examples/support/mod.rs
index ebbe379..a51ca24 100644
--- a/examples/support/mod.rs
+++ b/examples/support/mod.rs
@@ -24,11 +24,11 @@ pub fn load(window: &glutin::Window) -> Context {
unsafe {
let vs = gl.CreateShader(gl::VERTEX_SHADER);
- gl.ShaderSource(vs, 1, [VS_SRC.as_ptr() as *const i8].as_ptr(), ptr::null());
+ gl.ShaderSource(vs, 1, [VS_SRC.as_ptr() as *const _].as_ptr(), ptr::null());
gl.CompileShader(vs);
let fs = gl.CreateShader(gl::FRAGMENT_SHADER);
- gl.ShaderSource(fs, 1, [FS_SRC.as_ptr() as *const i8].as_ptr(), ptr::null());
+ gl.ShaderSource(fs, 1, [FS_SRC.as_ptr() as *const _].as_ptr(), ptr::null());
gl.CompileShader(fs);
let program = gl.CreateProgram();
diff --git a/src/api/android/mod.rs b/src/api/android/mod.rs
index f42caeb..433472c 100644
--- a/src/api/android/mod.rs
+++ b/src/api/android/mod.rs
@@ -65,6 +65,11 @@ impl MonitorId {
}
}
+#[derive(Default)]
+pub struct PlatformSpecificWindowBuilderAttributes;
+#[derive(Default)]
+pub struct PlatformSpecificHeadlessBuilderAttributes;
+
pub struct PollEventsIterator<'a> {
window: &'a Window,
}
@@ -116,7 +121,8 @@ impl<'a> Iterator for WaitEventsIterator<'a> {
impl Window {
pub fn new(win_attribs: &WindowAttributes, pf_reqs: &PixelFormatRequirements,
- opengl: &GlAttributes<&Window>) -> Result<Window, CreationError>
+ opengl: &GlAttributes<&Window>, _: &PlatformSpecificWindowBuilderAttributes)
+ -> Result<Window, CreationError>
{
use std::{mem, ptr};
@@ -302,7 +308,9 @@ pub struct HeadlessContext(EglContext);
impl HeadlessContext {
/// See the docs in the crate root file.
pub fn new(dimensions: (u32, u32), pf_reqs: &PixelFormatRequirements,
- opengl: &GlAttributes<&HeadlessContext>) -> Result<HeadlessContext, CreationError>
+ opengl: &GlAttributes<&HeadlessContext>,
+ _: &PlatformSpecificHeadlessBuilderAttributes)
+ -> Result<HeadlessContext, CreationError>
{
let opengl = opengl.clone().map_sharing(|c| &c.0);
let context = try!(EglContext::new(egl::ffi::egl::Egl, pf_reqs, &opengl,
diff --git a/src/api/caca/mod.rs b/src/api/caca/mod.rs
index 687c66f..e73fa6c 100644
--- a/src/api/caca/mod.rs
+++ b/src/api/caca/mod.rs
@@ -1,4 +1,4 @@
-#![cfg(any(target_os = "linux", target_os = "freebsd"))]
+#![cfg(any(target_os = "linux", target_os = "dragonfly", target_os = "freebsd"))]
#![allow(unused_variables, dead_code)]
use libc;
diff --git a/src/api/cocoa/headless.rs b/src/api/cocoa/headless.rs
index 7fe2046..ac6c4e0 100644
--- a/src/api/cocoa/headless.rs
+++ b/src/api/cocoa/headless.rs
@@ -13,6 +13,9 @@ use cocoa::appkit::*;
use PixelFormat;
use api::cocoa::helpers;
+#[derive(Default)]
+pub struct PlatformSpecificHeadlessBuilderAttributes;
+
pub struct HeadlessContext {
width: u32,
height: u32,
@@ -21,7 +24,9 @@ pub struct HeadlessContext {
impl HeadlessContext {
pub fn new((width, height): (u32, u32), pf_reqs: &PixelFormatRequirements,
- opengl: &GlAttributes<&HeadlessContext>) -> Result<HeadlessContext, CreationError>
+ opengl: &GlAttributes<&HeadlessContext>,
+ _: &PlatformSpecificHeadlessBuilderAttributes)
+ -> Result<HeadlessContext, CreationError>
{
let context = unsafe {
diff --git a/src/api/cocoa/mod.rs b/src/api/cocoa/mod.rs
index 138a448..4502405 100644
--- a/src/api/cocoa/mod.rs
+++ b/src/api/cocoa/mod.rs
@@ -1,7 +1,5 @@
#![cfg(target_os = "macos")]
-pub use self::headless::HeadlessContext;
-
use {CreationError, Event, MouseCursor, CursorState};
use CreationError::OsError;
use libc;
@@ -50,6 +48,8 @@ use events::MouseButton;
use events;
pub use self::monitor::{MonitorId, get_available_monitors, get_primary_monitor};
+pub use self::headless::HeadlessContext;
+pub use self::headless::PlatformSpecificHeadlessBuilderAttributes;
mod monitor;
mod event;
@@ -179,6 +179,9 @@ impl Drop for WindowDelegate {
}
}
+#[derive(Default)]
+pub struct PlatformSpecificWindowBuilderAttributes;
+
pub struct Window {
view: IdRef,
window: IdRef,
@@ -264,7 +267,8 @@ impl<'a> Iterator for WaitEventsIterator<'a> {
impl Window {
pub fn new(win_attribs: &WindowAttributes, pf_reqs: &PixelFormatRequirements,
- opengl: &GlAttributes<&Window>) -> Result<Window, CreationError>
+ opengl: &GlAttributes<&Window>, _: &PlatformSpecificWindowBuilderAttributes)
+ -> Result<Window, CreationError>
{
if opengl.sharing.is_some() {
unimplemented!()
@@ -837,9 +841,7 @@ unsafe fn NSEventToEvent(window: &Window, nsevent: id) -> Option<Event> {
let received_c_str = nsevent.characters().UTF8String();
let received_str = CStr::from_ptr(received_c_str);
for received_char in from_utf8(received_str.to_bytes()).unwrap().chars() {
- if received_char.is_ascii() {
- events.push_back(ReceivedCharacter(received_char));
- }
+ events.push_back(ReceivedCharacter(received_char));
}
let vkey = event::vkeycode_to_element(NSEvent::keyCode(nsevent));
@@ -881,10 +883,13 @@ unsafe fn NSEventToEvent(window: &Window, nsevent: id) -> Option<Event> {
},
NSScrollWheel => {
use events::MouseScrollDelta::{LineDelta, PixelDelta};
+ let scale_factor = window.hidpi_factor();
let delta = if nsevent.hasPreciseScrollingDeltas() == YES {
- PixelDelta(nsevent.scrollingDeltaX() as f32, nsevent.scrollingDeltaY() as f32)
+ PixelDelta(scale_factor * nsevent.scrollingDeltaX() as f32,
+ scale_factor * nsevent.scrollingDeltaY() as f32)
} else {
- LineDelta(nsevent.scrollingDeltaX() as f32, nsevent.scrollingDeltaY() as f32)
+ LineDelta(scale_factor * nsevent.scrollingDeltaX() as f32,
+ scale_factor * nsevent.scrollingDeltaY() as f32)
};
Some(MouseWheel(delta))
},
diff --git a/src/api/emscripten/mod.rs b/src/api/emscripten/mod.rs
index 61d8c8c..67f57d1 100644
--- a/src/api/emscripten/mod.rs
+++ b/src/api/emscripten/mod.rs
@@ -2,11 +2,17 @@
use std::ffi::CString;
use libc;
-use {Event, BuilderAttribs, CreationError, MouseCursor};
use Api;
-use PixelFormat;
+use Event;
+use CreationError;
use ContextError;
+use CursorState;
+use GlAttributes;
use GlContext;
+use MouseCursor;
+use PixelFormat;
+use PixelFormatRequirements;
+use WindowAttributes;
use std::collections::VecDeque;
@@ -52,6 +58,7 @@ impl WindowProxy {
}
}
+#[derive(Clone)]
pub struct MonitorId;
#[inline]
@@ -73,13 +80,20 @@ impl MonitorId {
}
#[inline]
+ pub fn get_native_identifier(&self) -> ::native_monitor::NativeMonitorId {
+ ::native_monitor::NativeMonitorId::Unavailable
+ }
+
+ #[inline]
pub fn get_dimensions(&self) -> (u32, u32) {
unimplemented!()
}
}
impl Window {
- pub fn new(builder: BuilderAttribs) -> Result<Window, CreationError> {
+ pub fn new(window: &WindowAttributes, pf_reqs: &PixelFormatRequirements,
+ opengl: &GlAttributes<&Window>) -> Result<Window, CreationError>
+ {
// getting the default values of attributes
let mut attributes = unsafe {
use std::mem;
@@ -198,14 +212,23 @@ impl Window {
}
#[inline]
- pub fn set_cursor(&self, _cursor: MouseCursor) {
- unimplemented!()
+ pub fn set_cursor(&self, cursor: MouseCursor) {
+ }
+
+ #[inline]
+ pub fn set_cursor_state(&self, state: CursorState) -> Result<(), String> {
+ Ok(())
}
#[inline]
pub fn hidpi_factor(&self) -> f32 {
1.0
}
+
+ #[inline]
+ pub fn set_cursor_position(&self, x: i32, y: i32) -> Result<(), ()> {
+ Ok(())
+ }
}
impl GlContext for Window {
@@ -222,11 +245,11 @@ impl GlContext for Window {
}
fn get_proc_address(&self, addr: &str) -> *const () {
- let addr = CString::new(addr.as_bytes()).unwrap();
- let addr = addr.as_ptr();
+ let addr = CString::new(addr).unwrap();
unsafe {
- ffi::emscripten_GetProcAddress(addr) as *const _
+ // FIXME: if `as_ptr()` is used, then wrong data is passed to emscripten
+ ffi::emscripten_GetProcAddress(addr.into_raw() as *const _) as *const _
}
}
diff --git a/src/api/ios/mod.rs b/src/api/ios/mod.rs
index 852d97c..afcc6f4 100644
--- a/src/api/ios/mod.rs
+++ b/src/api/ios/mod.rs
@@ -177,10 +177,14 @@ impl MonitorId {
}
}
+#[derive(Default)]
+pub struct PlatformSpecificWindowBuilderAttributes;
impl Window {
- pub fn new(builder: &WindowAttributes, _: &PixelFormatRequirements, _: &GlAttributes<&Window>) -> Result<Window, CreationError> {
+ pub fn new(builder: &WindowAttributes, _: &PixelFormatRequirements, _: &GlAttributes<&Window>,
+ _: &PlatformSpecificWindowBuilderAttributes) -> Result<Window, CreationError>
+ {
unsafe {
if setjmp(mem::transmute(&mut jmpbuf)) != 0 {
let app: id = msg_send![Class::get("UIApplication").unwrap(), sharedApplication];
diff --git a/src/api/osmesa/mod.rs b/src/api/osmesa/mod.rs
index 02c43a1..7ef243a 100644
--- a/src/api/osmesa/mod.rs
+++ b/src/api/osmesa/mod.rs
@@ -1,4 +1,4 @@
-#![cfg(any(target_os = "linux", target_os = "freebsd", target_os = "dragonfly"))]
+#![cfg(any(target_os = "linux", target_os = "dragonfly", target_os = "freebsd"))]
extern crate osmesa_sys;
diff --git a/src/api/x11/window.rs b/src/api/x11/window.rs
index 4b78c4a..8cae2be 100644
--- a/src/api/x11/window.rs
+++ b/src/api/x11/window.rs
@@ -469,10 +469,6 @@ impl Window {
display.check_errors().expect("Failed to call XInternAtom");
(display.xlib.XSetWMProtocols)(display.display, window, &mut wm_delete_window, 1);
display.check_errors().expect("Failed to call XSetWMProtocols");
- with_c_str(&*window_attrs.title, |title| {;
- (display.xlib.XStoreName)(display.display, window, title);
- });
- display.check_errors().expect("Failed to call XStoreName");
(display.xlib.XFlush)(display.display);
display.check_errors().expect("Failed to call XFlush");
@@ -636,6 +632,8 @@ impl Window {
input_handler: Mutex::new(XInputEventHandler::new(display, window, ic, window_attrs))
};
+ window.set_title(&window_attrs.title);
+
if window_attrs.visible {
unsafe {
let ref x_window: &XWindow = window.x.borrow();
@@ -669,12 +667,27 @@ impl Window {
}
pub fn set_title(&self, title: &str) {
- with_c_str(title, |title| unsafe {
- (self.x.display.xlib.XStoreName)(self.x.display.display, self.x.window, title);
+ let wm_name = unsafe {
+ (self.x.display.xlib.XInternAtom)(self.x.display.display, b"_NET_WM_NAME\0".as_ptr() as *const _, 0)
+ };
+ self.x.display.check_errors().expect("Failed to call XInternAtom");
+
+ let wm_utf8_string = unsafe {
+ (self.x.display.xlib.XInternAtom)(self.x.display.display, b"UTF8_STRING\0".as_ptr() as *const _, 0)
+ };
+ self.x.display.check_errors().expect("Failed to call XInternAtom");
+
+ with_c_str(title, |c_title| unsafe {
+ (self.x.display.xlib.XStoreName)(self.x.display.display, self.x.window, c_title);
+
+ let len = title.as_bytes().len();
+ (self.x.display.xlib.XChangeProperty)(self.x.display.display, self.x.window,
+ wm_name, wm_utf8_string, 8, ffi::PropModeReplace,
+ c_title as *const u8, len as libc::c_int);
(self.x.display.xlib.XFlush)(self.x.display.display);
});
+ self.x.display.check_errors().expect("Failed to set window title");
- self.x.display.check_errors().expect("Failed to call XStoreName");
}
pub fn show(&self) {
diff --git a/src/headless.rs b/src/headless.rs
index 67ea8da..8ea4141 100644
--- a/src/headless.rs
+++ b/src/headless.rs
@@ -20,6 +20,9 @@ pub struct HeadlessRendererBuilder<'a> {
// Should be made public once it's stabilized.
pf_reqs: PixelFormatRequirements,
+
+ /// Platform-specific configuration.
+ platform_specific: platform::PlatformSpecificHeadlessBuilderAttributes,
}
impl<'a> HeadlessRendererBuilder<'a> {
@@ -30,6 +33,7 @@ impl<'a> HeadlessRendererBuilder<'a> {
dimensions: (width, height),
pf_reqs: Default::default(),
opengl: Default::default(),
+ platform_specific: Default::default(),
}
}
@@ -63,7 +67,8 @@ impl<'a> HeadlessRendererBuilder<'a> {
/// out of memory, etc.
#[inline]
pub fn build(self) -> Result<HeadlessContext, CreationError> {
- platform::HeadlessContext::new(self.dimensions, &self.pf_reqs, &self.opengl)
+ platform::HeadlessContext::new(self.dimensions, &self.pf_reqs, &self.opengl,
+ &self.platform_specific)
.map(|w| HeadlessContext { context: w })
}
diff --git a/src/lib.rs b/src/lib.rs
index 2bd7fe3..a27aa72 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -54,7 +54,7 @@ extern crate cocoa;
extern crate core_foundation;
#[cfg(target_os = "macos")]
extern crate core_graphics;
-#[cfg(any(target_os = "linux", target_os = "freebsd", target_os = "dragonfly"))]
+#[cfg(any(target_os = "linux", target_os = "dragonfly", target_os = "freebsd"))]
extern crate x11_dl;
#[cfg(any(target_os = "linux", target_os = "freebsd", target_os = "dragonfly"))]
#[macro_use(wayland_env)]
diff --git a/src/os/unix.rs b/src/os/unix.rs
index d206351..f42b3c6 100644
--- a/src/os/unix.rs
+++ b/src/os/unix.rs
@@ -3,8 +3,9 @@
use libc;
use Window;
use platform::Window as LinuxWindow;
+use WindowBuilder;
-/// Additional methods on `Window` that are specific to unix.
+/// Additional methods on `Window` that are specific to Unix.
pub trait WindowExt {
/// Returns a pointer to the `Window` object of xlib that is used by this window.
///
@@ -38,3 +39,11 @@ impl WindowExt for Window {
}
}
}
+
+/// Additional methods on `WindowBuilder` that are specific to Unix.
+pub trait WindowBuilderExt {
+
+}
+
+impl<'a> WindowBuilderExt for WindowBuilder<'a> {
+}
diff --git a/src/os/windows.rs b/src/os/windows.rs
index e9ab056..02a76e2 100644
--- a/src/os/windows.rs
+++ b/src/os/windows.rs
@@ -2,8 +2,9 @@
use libc;
use Window;
+use WindowBuilder;
-/// Additional methods on `Window` that are specific to unix.
+/// Additional methods on `Window` that are specific to Windows.
pub trait WindowExt {
/// Returns a pointer to the `Window` object of xlib that is used by this window.
///
@@ -19,3 +20,11 @@ impl WindowExt for Window {
self.window.platform_window()
}
}
+
+/// Additional methods on `WindowBuilder` that are specific to Windows.
+pub trait WindowBuilderExt {
+
+}
+
+impl<'a> WindowBuilderExt for WindowBuilder<'a> {
+}
diff --git a/src/platform/emscripten/mod.rs b/src/platform/emscripten/mod.rs
index 270cdaf..ce8d201 100644
--- a/src/platform/emscripten/mod.rs
+++ b/src/platform/emscripten/mod.rs
@@ -1,7 +1,12 @@
#![cfg(target_os = "emscripten")]
+use Api;
use ContextError;
+use CreationError;
+use GlAttributes;
use GlContext;
+use PixelFormat;
+use PixelFormatRequirements;
pub use api::emscripten::{Window, WindowProxy, MonitorId, get_available_monitors};
pub use api::emscripten::{get_primary_monitor, WaitEventsIterator, PollEventsIterator};
@@ -11,8 +16,10 @@ pub struct HeadlessContext(Window);
impl HeadlessContext {
/// See the docs in the crate root file.
#[inline]
- pub fn new(builder: BuilderAttribs) -> Result<HeadlessContext, CreationError> {
- Window::new(builder).map(|w| HeadlessContext(w))
+ pub fn new(_: (u32, u32), _: &PixelFormatRequirements, _: &GlAttributes<&HeadlessContext>)
+ -> Result<HeadlessContext, CreationError>
+ {
+ unimplemented!()
}
}
@@ -50,3 +57,8 @@ impl GlContext for HeadlessContext {
unsafe impl Send for HeadlessContext {}
unsafe impl Sync for HeadlessContext {}
+
+#[derive(Default)]
+pub struct PlatformSpecificWindowBuilderAttributes;
+#[derive(Default)]
+pub struct PlatformSpecificHeadlessBuilderAttributes;
diff --git a/src/platform/ios/mod.rs b/src/platform/ios/mod.rs
index aeaebc3..2e6fbec 100644
--- a/src/platform/ios/mod.rs
+++ b/src/platform/ios/mod.rs
@@ -8,12 +8,17 @@ use ContextError;
pub use api::ios::*;
+#[derive(Default)]
+pub struct PlatformSpecificHeadlessBuilderAttributes;
+
pub struct HeadlessContext(i32);
impl HeadlessContext {
/// See the docs in the crate root file.
- pub fn new(_: (u32, u32), _: &PixelFormatRequirements, _: &GlAttributes<&HeadlessContext>)
- -> Result<HeadlessContext, CreationError> {
+ pub fn new(_: (u32, u32), _: &PixelFormatRequirements, _: &GlAttributes<&HeadlessContext>,
+ _: &PlatformSpecificHeadlessBuilderAttributes)
+ -> Result<HeadlessContext, CreationError>
+ {
unimplemented!()
}
diff --git a/src/platform/linux/api_dispatch.rs b/src/platform/linux/api_dispatch.rs
index 2373770..2e135e2 100644
--- a/src/platform/linux/api_dispatch.rs
+++ b/src/platform/linux/api_dispatch.rs
@@ -22,6 +22,9 @@ use api::x11::XConnection;
use api::x11::XError;
use api::x11::XNotSupported;
+#[derive(Default)]
+pub struct PlatformSpecificWindowBuilderAttributes;
+
enum Backend {
X(Arc<XConnection>),
Wayland,
@@ -172,7 +175,8 @@ impl<'a> Iterator for WaitEventsIterator<'a> {
impl Window {
#[inline]
pub fn new(window: &WindowAttributes, pf_reqs: &PixelFormatRequirements,
- opengl: &GlAttributes<&Window>) -> Result<Window, CreationError>
+ opengl: &GlAttributes<&Window>, _: &PlatformSpecificWindowBuilderAttributes)
+ -> Result<Window, CreationError>
{
match *BACKEND {
Backend::Wayland => {
diff --git a/src/platform/linux/mod.rs b/src/platform/linux/mod.rs
index d010a89..9a9eb3f 100644
--- a/src/platform/linux/mod.rs
+++ b/src/platform/linux/mod.rs
@@ -12,13 +12,19 @@ use api::osmesa::{self, OsMesaContext};
pub use self::api_dispatch::{Window, WindowProxy, MonitorId, get_available_monitors, get_primary_monitor};
pub use self::api_dispatch::{WaitEventsIterator, PollEventsIterator};
+pub use self::api_dispatch::PlatformSpecificWindowBuilderAttributes;
mod api_dispatch;
+#[derive(Default)]
+pub struct PlatformSpecificHeadlessBuilderAttributes;
+
pub struct HeadlessContext(OsMesaContext);
impl HeadlessContext {
pub fn new(dimensions: (u32, u32), pf_reqs: &PixelFormatRequirements,
- opengl: &GlAttributes<&HeadlessContext>) -> Result<HeadlessContext, CreationError>
+ opengl: &GlAttributes<&HeadlessContext>,
+ _: &PlatformSpecificHeadlessBuilderAttributes)
+ -> Result<HeadlessContext, CreationError>
{
let opengl = opengl.clone().map_sharing(|c| &c.0);
diff --git a/src/platform/mod.rs b/src/platform/mod.rs
index 4855765..8527da2 100644
--- a/src/platform/mod.rs
+++ b/src/platform/mod.rs
@@ -15,8 +15,11 @@ mod platform;
#[cfg(target_os = "ios")]
#[path="ios/mod.rs"]
mod platform;
+#[cfg(target_os = "emscripten")]
+#[path="emscripten/mod.rs"]
+mod platform;
#[cfg(all(not(target_os = "ios"), not(target_os = "windows"), not(target_os = "linux"),
not(target_os = "macos"), not(target_os = "android"), not(target_os = "dragonfly"),
- not(target_os = "freebsd")))]
+ not(target_os = "freebsd"), not(target_os = "emscripten")))]
use this_platform_is_not_supported;
diff --git a/src/platform/windows/mod.rs b/src/platform/windows/mod.rs
index 246ca51..0c78322 100644
--- a/src/platform/windows/mod.rs
+++ b/src/platform/windows/mod.rs
@@ -51,6 +51,10 @@ lazy_static! {
};
}
+#[derive(Default)]
+pub struct PlatformSpecificWindowBuilderAttributes;
+#[derive(Default)]
+pub struct PlatformSpecificHeadlessBuilderAttributes;
/// The Win32 implementation of the main `Window` object.
pub struct Window(win32::Window);
@@ -59,7 +63,8 @@ impl Window {
/// See the docs in the crate root file.
#[inline]
pub fn new(window: &WindowAttributes, pf_reqs: &PixelFormatRequirements,
- opengl: &GlAttributes<&Window>) -> Result<Window, CreationError>
+ opengl: &GlAttributes<&Window>, _: &PlatformSpecificWindowBuilderAttributes)
+ -> Result<Window, CreationError>
{
win32::Window::new(window, pf_reqs, &opengl.clone().map_sharing(|w| &w.0),
EGL.as_ref().map(|w| &w.0)).map(|w| Window(w))
@@ -92,7 +97,9 @@ pub enum HeadlessContext {
impl HeadlessContext {
pub fn new(dimensions: (u32, u32), pf_reqs: &PixelFormatRequirements,
- opengl: &GlAttributes<&HeadlessContext>) -> Result<HeadlessContext, CreationError>
+ opengl: &GlAttributes<&HeadlessContext>,
+ _: &PlatformSpecificHeadlessBuilderAttributes)
+ -> Result<HeadlessContext, CreationError>
{
// if EGL is available, we try using EGL first
// if EGL returns an error, we try the hidden window method
diff --git a/src/window.rs b/src/window.rs
index f672ed5..6d2f0d3 100644
--- a/src/window.rs
+++ b/src/window.rs
@@ -31,6 +31,9 @@ pub struct WindowBuilder<'a> {
// Should be made public once it's stabilized.
pf_reqs: PixelFormatRequirements,
+
+ /// Platform-specific configuration.
+ platform_specific: platform::PlatformSpecificWindowBuilderAttributes,
}
impl<'a> WindowBuilder<'a> {
@@ -41,6 +44,7 @@ impl<'a> WindowBuilder<'a> {
pf_reqs: Default::default(),
window: Default::default(),
opengl: Default::default(),
+ platform_specific: Default::default(),
}
}
@@ -227,7 +231,7 @@ impl<'a> WindowBuilder<'a> {
}
// building
- platform::Window::new(&self.window, &self.pf_reqs, &self.opengl)
+ platform::Window::new(&self.window, &self.pf_reqs, &self.opengl, &self.platform_specific)
.map(|w| Window { window: w })
}