aboutsummaryrefslogtreecommitdiffstats
path: root/src/api
diff options
context:
space:
mode:
Diffstat (limited to 'src/api')
-rw-r--r--src/api/caca/mod.rs2
-rw-r--r--src/api/cocoa/mod.rs11
-rw-r--r--src/api/emscripten/mod.rs39
-rw-r--r--src/api/osmesa/mod.rs2
-rw-r--r--src/api/x11/window.rs27
5 files changed, 59 insertions, 22 deletions
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/mod.rs b/src/api/cocoa/mod.rs
index 138a448..d35182e 100644
--- a/src/api/cocoa/mod.rs
+++ b/src/api/cocoa/mod.rs
@@ -837,9 +837,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 +879,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/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) {