mirror of
https://github.com/italicsjenga/winit-sonoma-fix.git
synced 2025-01-11 21:31:29 +11:00
macOS: Implement Refresh
(#742)
* macOS: Implement Refresh * drawRect should take NSRect
This commit is contained in:
parent
33c8aa660f
commit
5a0b4dba47
|
@ -17,6 +17,7 @@
|
||||||
- On X11, `WindowBuilder::with_min_dimensions` and `WindowBuilder::with_max_dimensions` now correctly account for DPI.
|
- On X11, `WindowBuilder::with_min_dimensions` and `WindowBuilder::with_max_dimensions` now correctly account for DPI.
|
||||||
- Added support for generating dummy `DeviceId`s and `WindowId`s to better support unit testing.
|
- Added support for generating dummy `DeviceId`s and `WindowId`s to better support unit testing.
|
||||||
- On macOS, fixed unsoundness in drag-and-drop that could result in drops being rejected.
|
- On macOS, fixed unsoundness in drag-and-drop that could result in drops being rejected.
|
||||||
|
- On macOS, implemented `WindowEvent::Refresh`.
|
||||||
|
|
||||||
# Version 0.18.0 (2018-11-07)
|
# Version 0.18.0 (2018-11-07)
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ use cocoa::appkit::NSWindowStyleMask;
|
||||||
use cocoa::base::{id, nil};
|
use cocoa::base::{id, nil};
|
||||||
use cocoa::foundation::{NSRect, NSUInteger};
|
use cocoa::foundation::{NSRect, NSUInteger};
|
||||||
use core_graphics::display::CGDisplay;
|
use core_graphics::display::CGDisplay;
|
||||||
|
use objc::runtime::{Class, Object};
|
||||||
|
|
||||||
use platform::platform::ffi;
|
use platform::platform::ffi;
|
||||||
use platform::platform::window::IdRef;
|
use platform::platform::window::IdRef;
|
||||||
|
@ -39,6 +40,11 @@ pub unsafe fn toggle_style_mask(window: id, view: id, mask: NSWindowStyleMask, o
|
||||||
window.makeFirstResponder_(view);
|
window.makeFirstResponder_(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub unsafe fn superclass<'a>(this: &'a Object) -> &'a Class {
|
||||||
|
let superclass: id = msg_send![this, superclass];
|
||||||
|
&*(superclass as *const _)
|
||||||
|
}
|
||||||
|
|
||||||
pub unsafe fn create_input_context(view: id) -> IdRef {
|
pub unsafe fn create_input_context(view: id) -> IdRef {
|
||||||
let input_context: id = msg_send![class!(NSTextInputContext), alloc];
|
let input_context: id = msg_send![class!(NSTextInputContext), alloc];
|
||||||
let input_context: id = msg_send![input_context, initWithClient:view];
|
let input_context: id = msg_send![input_context, initWithClient:view];
|
||||||
|
|
|
@ -71,6 +71,10 @@ lazy_static! {
|
||||||
sel!(initWithWinit:),
|
sel!(initWithWinit:),
|
||||||
init_with_winit as extern fn(&Object, Sel, *mut c_void) -> id,
|
init_with_winit as extern fn(&Object, Sel, *mut c_void) -> id,
|
||||||
);
|
);
|
||||||
|
decl.add_method(
|
||||||
|
sel!(drawRect:),
|
||||||
|
draw_rect as extern fn(&Object, Sel, NSRect),
|
||||||
|
);
|
||||||
decl.add_method(sel!(hasMarkedText), has_marked_text as extern fn(&Object, Sel) -> BOOL);
|
decl.add_method(sel!(hasMarkedText), has_marked_text as extern fn(&Object, Sel) -> BOOL);
|
||||||
decl.add_method(
|
decl.add_method(
|
||||||
sel!(markedRange),
|
sel!(markedRange),
|
||||||
|
@ -154,6 +158,27 @@ extern fn init_with_winit(this: &Object, _sel: Sel, state: *mut c_void) -> id {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern fn draw_rect(this: &Object, _sel: Sel, rect: NSRect) {
|
||||||
|
unsafe {
|
||||||
|
let state_ptr: *mut c_void = *this.get_ivar("winitState");
|
||||||
|
let state = &mut *(state_ptr as *mut ViewState);
|
||||||
|
|
||||||
|
if let Some(shared) = state.shared.upgrade() {
|
||||||
|
let window_event = Event::WindowEvent {
|
||||||
|
window_id: WindowId(get_window_id(state.window)),
|
||||||
|
event: WindowEvent::Refresh,
|
||||||
|
};
|
||||||
|
shared.pending_events
|
||||||
|
.lock()
|
||||||
|
.unwrap()
|
||||||
|
.push_back(window_event);
|
||||||
|
}
|
||||||
|
|
||||||
|
let superclass = util::superclass(this);
|
||||||
|
let () = msg_send![super(this, superclass), drawRect:rect];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
extern fn has_marked_text(this: &Object, _sel: Sel) -> BOOL {
|
extern fn has_marked_text(this: &Object, _sel: Sel) -> BOOL {
|
||||||
//println!("hasMarkedText");
|
//println!("hasMarkedText");
|
||||||
unsafe {
|
unsafe {
|
||||||
|
|
Loading…
Reference in a new issue