aboutsummaryrefslogtreecommitdiffstats
path: root/src/osx
diff options
context:
space:
mode:
authorSam Ward <github@ward.io>2015-01-10 01:56:47 -0800
committerSam Ward <github@ward.io>2015-01-10 01:56:47 -0800
commit879f61dbbc1300efc36553b5b25ab8913d5d290b (patch)
tree82eff255ea25d4e5a741c539bf5781d306dadfce /src/osx
parentf72b09bcb7efee96b05dbcfc34b4a5fd72ef37aa (diff)
downloadglutin-879f61dbbc1300efc36553b5b25ab8913d5d290b.tar.gz
glutin-879f61dbbc1300efc36553b5b25ab8913d5d290b.zip
OSX compatibility for Rust 1.0 alpha
Diffstat (limited to 'src/osx')
-rw-r--r--src/osx/mod.rs32
-rw-r--r--src/osx/monitor.rs4
2 files changed, 20 insertions, 16 deletions
diff --git a/src/osx/mod.rs b/src/osx/mod.rs
index 8e8b194..df62089 100644
--- a/src/osx/mod.rs
+++ b/src/osx/mod.rs
@@ -18,10 +18,13 @@ use core_foundation::string::CFString;
use core_foundation::bundle::{CFBundleGetBundleWithIdentifier, CFBundleGetFunctionPointerForName};
use std::cell::Cell;
-use std::c_str::CString;
+use std::ffi::{CString, c_str_to_bytes};
use std::mem;
use std::ptr;
use std::collections::RingBuf;
+use std::str::FromStr;
+use std::str::from_utf8;
+use std::ascii::AsciiExt;
use events::Event::{MouseInput, MouseMoved, ReceivedCharacter, KeyboardInput, MouseWheel};
use events::ElementState::{Pressed, Released};
@@ -170,9 +173,9 @@ impl Window {
let delegate = unsafe {
// Create a delegate class, add callback methods and store InternalState as user data.
let delegate = objc_allocateClassPair(ns_object, DELEGATE_NAME.as_ptr() as *const i8, 0);
- class_addMethod(delegate, selector("windowShouldClose:"), window_should_close, "B@:@".to_c_str().as_ptr());
- class_addMethod(delegate, selector("windowDidResize:"), window_did_resize, "V@:@".to_c_str().as_ptr());
- class_addIvar(delegate, DELEGATE_STATE_IVAR.as_ptr() as *const i8, ptr_size, 3, "?".to_c_str().as_ptr());
+ class_addMethod(delegate, selector("windowShouldClose:"), window_should_close, CString::from_slice("B@:@".as_bytes()).as_ptr());
+ class_addMethod(delegate, selector("windowDidResize:"), window_did_resize, CString::from_slice("V@:@".as_bytes()).as_ptr());
+ class_addIvar(delegate, DELEGATE_STATE_IVAR.as_ptr() as *const i8, ptr_size, 3, CString::from_slice("?".as_bytes()).as_ptr());
objc_registerClassPair(delegate);
let del_obj = msg_send()(delegate, selector("alloc"));
@@ -268,12 +271,12 @@ impl Window {
fn create_context(view: id, vsync: bool) -> Option<id> {
unsafe {
let attributes = [
- NSOpenGLPFADoubleBuffer as uint,
- NSOpenGLPFAClosestPolicy as uint,
- NSOpenGLPFAColorSize as uint, 24,
- NSOpenGLPFAAlphaSize as uint, 8,
- NSOpenGLPFADepthSize as uint, 24,
- NSOpenGLPFAStencilSize as uint, 8,
+ NSOpenGLPFADoubleBuffer as u32,
+ NSOpenGLPFAClosestPolicy as u32,
+ NSOpenGLPFAColorSize as u32, 24,
+ NSOpenGLPFAAlphaSize as u32, 8,
+ NSOpenGLPFADepthSize as u32, 24,
+ NSOpenGLPFAStencilSize as u32, 8,
0
];
@@ -381,8 +384,9 @@ impl Window {
events.push_back(MouseMoved((view_point.x as int, view_point.y as int)));
},
NSKeyDown => {
- let received_str = CString::new(event.characters().UTF8String(), false);
- for received_char in received_str.as_str().unwrap().chars() {
+ let received_c_str = event.characters().UTF8String();
+ let received_str = CString::from_slice(c_str_to_bytes(&received_c_str));
+ for received_char in from_utf8(received_str.as_bytes()).unwrap().chars() {
if received_char.is_ascii() {
events.push_back(ReceivedCharacter(received_char));
}
@@ -461,8 +465,8 @@ impl Window {
}
pub fn get_proc_address(&self, _addr: &str) -> *const () {
- let symbol_name: CFString = from_str(_addr).unwrap();
- let framework_name: CFString = from_str("com.apple.opengl").unwrap();
+ let symbol_name: CFString = FromStr::from_str(_addr).unwrap();
+ let framework_name: CFString = FromStr::from_str("com.apple.opengl").unwrap();
let framework = unsafe {
CFBundleGetBundleWithIdentifier(framework_name.as_concrete_TypeRef())
};
diff --git a/src/osx/monitor.rs b/src/osx/monitor.rs
index 3fb1d74..e23336f 100644
--- a/src/osx/monitor.rs
+++ b/src/osx/monitor.rs
@@ -3,11 +3,11 @@ use std::collections::RingBuf;
pub struct MonitorID(u32);
-pub fn get_available_monitors() -> Vec<MonitorID> {
+pub fn get_available_monitors() -> RingBuf<MonitorID> {
let mut monitors = RingBuf::new();
unsafe {
let max_displays = 10u32;
- let mut active_displays = [0u32, ..10];
+ let mut active_displays = [0u32; 10];
let mut display_count = 0;
display::CGGetActiveDisplayList(max_displays,
&mut active_displays[0],