aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Cargo.toml1
-rw-r--r--examples/cursor.rs2
-rw-r--r--examples/fullscreen.rs1
-rw-r--r--examples/grabbing.rs2
-rw-r--r--examples/multiwindow.rs6
-rw-r--r--examples/transparent.rs4
-rw-r--r--examples/vsync.rs4
-rw-r--r--examples/window.rs2
-rw-r--r--src/api/cocoa/mod.rs23
-rw-r--r--src/api/glx/mod.rs6
-rw-r--r--src/lib.rs2
11 files changed, 42 insertions, 11 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 07e99be..1643abd 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -32,6 +32,7 @@ version = "0"
[target.x86_64-apple-darwin.dependencies]
objc = "0.1"
+cgl = "0"
cocoa = "0"
core-foundation = "0"
core-graphics = "0"
diff --git a/examples/cursor.rs b/examples/cursor.rs
index d3beb84..8b0d818 100644
--- a/examples/cursor.rs
+++ b/examples/cursor.rs
@@ -17,7 +17,7 @@ fn main() { println!("This example requires glutin to be compiled with the `wind
#[cfg(feature = "window")]
fn main() {
- let window = glutin::Window::new().unwrap();
+ let window = glutin::WindowBuilder::new().with_gl_profile(glutin::GlProfile::Compatibility).build().unwrap();
window.set_title("A fantastic window!");
unsafe { window.make_current() };
diff --git a/examples/fullscreen.rs b/examples/fullscreen.rs
index d64224b..246a162 100644
--- a/examples/fullscreen.rs
+++ b/examples/fullscreen.rs
@@ -35,6 +35,7 @@ fn main() {
};
let window = glutin::WindowBuilder::new()
+ .with_gl_profile(glutin::GlProfile::Compatibility)
.with_title("Hello world!".to_string())
.with_fullscreen(monitor)
.build()
diff --git a/examples/grabbing.rs b/examples/grabbing.rs
index 8a46750..738a939 100644
--- a/examples/grabbing.rs
+++ b/examples/grabbing.rs
@@ -16,7 +16,7 @@ fn main() { println!("This example requires glutin to be compiled with the `wind
#[cfg(feature = "window")]
fn main() {
- let window = glutin::Window::new().unwrap();
+ let window = glutin::WindowBuilder::new().with_gl_profile(glutin::GlProfile::Compatibility).build().unwrap();
window.set_title("glutin - Cursor grabbing test");
unsafe { window.make_current() };
diff --git a/examples/multiwindow.rs b/examples/multiwindow.rs
index a9a5bac..503e0a0 100644
--- a/examples/multiwindow.rs
+++ b/examples/multiwindow.rs
@@ -16,9 +16,9 @@ fn main() { println!("This example requires glutin to be compiled with the `wind
#[cfg(feature = "window")]
fn main() {
- let window1 = glutin::Window::new().unwrap();
- let window2 = glutin::Window::new().unwrap();
- let window3 = glutin::Window::new().unwrap();
+ let window1 = glutin::WindowBuilder::new().with_gl_profile(glutin::GlProfile::Compatibility).build().unwrap();
+ let window2 = glutin::WindowBuilder::new().with_gl_profile(glutin::GlProfile::Compatibility).build().unwrap();
+ let window3 = glutin::WindowBuilder::new().with_gl_profile(glutin::GlProfile::Compatibility).build().unwrap();
let t1 = thread::spawn(move || {
run(window1, (0.0, 1.0, 0.0, 1.0));
diff --git a/examples/transparent.rs b/examples/transparent.rs
index 553c16d..01c084a 100644
--- a/examples/transparent.rs
+++ b/examples/transparent.rs
@@ -19,7 +19,9 @@ fn resize_callback(width: u32, height: u32) {
#[cfg(feature = "window")]
fn main() {
- let mut window = glutin::WindowBuilder::new().with_decorations(false).with_transparency(true)
+ let mut window = glutin::WindowBuilder::new().with_gl_profile(glutin::GlProfile::Compatibility)
+ .with_decorations(false)
+ .with_transparency(true)
.build().unwrap();
window.set_title("A fantastic window!");
window.set_window_resize_callback(Some(resize_callback as fn(u32, u32)));
diff --git a/examples/vsync.rs b/examples/vsync.rs
index ec9ea79..4ae2598 100644
--- a/examples/vsync.rs
+++ b/examples/vsync.rs
@@ -23,7 +23,9 @@ fn main() {
println!("Vsync example. This example may panic if your driver or your system forces \
you out of vsync. This is intended when `build_strict` is used.");
- let mut window = glutin::WindowBuilder::new().with_vsync().build_strict().unwrap();
+ let mut window = glutin::WindowBuilder::new().with_gl_profile(glutin::GlProfile::Compatibility)
+ .with_vsync()
+ .build_strict().unwrap();
window.set_window_resize_callback(Some(resize_callback as fn(u32, u32)));
unsafe { window.make_current() };
diff --git a/examples/window.rs b/examples/window.rs
index 4077399..d4e1a8d 100644
--- a/examples/window.rs
+++ b/examples/window.rs
@@ -19,7 +19,7 @@ fn resize_callback(width: u32, height: u32) {
#[cfg(feature = "window")]
fn main() {
- let mut window = glutin::Window::new().unwrap();
+ let mut window = glutin::WindowBuilder::new().with_gl_profile(glutin::GlProfile::Compatibility).build().unwrap();
window.set_title("A fantastic window!");
window.set_window_resize_callback(Some(resize_callback as fn(u32, u32)));
unsafe { window.make_current() };
diff --git a/src/api/cocoa/mod.rs b/src/api/cocoa/mod.rs
index aa408ff..5cb7edb 100644
--- a/src/api/cocoa/mod.rs
+++ b/src/api/cocoa/mod.rs
@@ -18,6 +18,10 @@ use native_monitor::NativeMonitorId;
use objc::runtime::{Class, Object, Sel, BOOL, YES, NO};
use objc::declare::ClassDecl;
+use cgl;
+use cgl::{CGLEnable, kCGLCECrashOnRemovedFunctions, CGLSetParameter, kCGLCPSurfaceOpacity};
+use cgl::CGLContextObj as CGL_CGLContextObj;
+
use cocoa::base::{id, nil};
use cocoa::foundation::{NSAutoreleasePool, NSDate, NSDefaultRunLoopMode, NSPoint, NSRect, NSSize,
NSString, NSUInteger};
@@ -354,6 +358,21 @@ impl Window {
};
unsafe {
+ if builder.transparent {
+ let clear_col = {
+ let cls = Class::get("NSColor").unwrap();
+
+ msg_send![cls, clearColor]
+ };
+ window.setOpaque_(NO);
+ window.setBackgroundColor_(clear_col);
+
+ let obj = context.CGLContextObj();
+
+ let mut opacity = 0;
+ CGLSetParameter(obj, kCGLCPSurfaceOpacity, &mut opacity);
+ }
+
app.activateIgnoringOtherApps_(YES);
if builder.visible {
window.makeKeyAndOrderFront_(nil);
@@ -434,7 +453,7 @@ impl Window {
}
};
- let masks = if screen.is_some() {
+ let masks = if screen.is_some() || !builder.decorations {
NSBorderlessWindowMask as NSUInteger
} else {
NSTitledWindowMask as NSUInteger |
@@ -573,6 +592,8 @@ impl Window {
let value = if builder.vsync { 1 } else { 0 };
cxt.setValues_forParameter_(&value, NSOpenGLContextParameter::NSOpenGLCPSwapInterval);
+ CGLEnable(cxt.CGLContextObj(), kCGLCECrashOnRemovedFunctions);
+
Ok((cxt, pf))
} else {
Err(CreationError::NotSupported)
diff --git a/src/api/glx/mod.rs b/src/api/glx/mod.rs
index 4ba99ca..455f6a5 100644
--- a/src/api/glx/mod.rs
+++ b/src/api/glx/mod.rs
@@ -182,8 +182,10 @@ unsafe impl Sync for Context {}
impl Drop for Context {
fn drop(&mut self) {
unsafe {
- // we don't call MakeCurrent(0, 0) because we are not sure that the context
- // is still the current one
+ if self.is_current() {
+ self.glx.MakeCurrent(self.display as *mut _, 0, ptr::null_mut());
+ }
+
self.glx.DestroyContext(self.display as *mut _, self.context);
}
}
diff --git a/src/lib.rs b/src/lib.rs
index b567916..068b9b8 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -46,6 +46,8 @@ extern crate dwmapi;
#[macro_use]
extern crate objc;
#[cfg(target_os = "macos")]
+extern crate cgl;
+#[cfg(target_os = "macos")]
extern crate cocoa;
#[cfg(target_os = "macos")]
extern crate core_foundation;