1
0
Fork 0

Add small wrapper for RawWindowHandle

This commit is contained in:
Billy Messenger 2020-09-05 15:22:23 -05:00
parent f3ba681877
commit c7d9d7d107
3 changed files with 21 additions and 8 deletions

View file

@ -25,7 +25,7 @@ impl baseview::AppWindow for MyProgram {
fn create_context( fn create_context(
&mut self, &mut self,
_window: raw_window_handle::RawWindowHandle, _window: baseview::RawWindow,
_window_info: &baseview::WindowInfo, _window_info: &baseview::WindowInfo,
) { ) {
} }

View file

@ -36,12 +36,20 @@ pub struct WindowOpenOptions<'a> {
pub trait AppWindow { pub trait AppWindow {
type AppMessage; type AppMessage;
fn create_context( fn create_context(&mut self, window: RawWindow, window_info: &WindowInfo);
&mut self,
window: raw_window_handle::RawWindowHandle,
window_info: &WindowInfo,
);
fn draw(&mut self); fn draw(&mut self);
fn on_event(&mut self, event: Event); fn on_event(&mut self, event: Event);
fn on_app_message(&mut self, message: Self::AppMessage); fn on_app_message(&mut self, message: Self::AppMessage);
} }
/// A wrapper for a `RawWindowHandle`. Some context creators expect an `&impl HasRawWindowHandle`.
#[derive(Debug, Copy, Clone)]
pub struct RawWindow {
pub raw_window_handle: raw_window_handle::RawWindowHandle,
}
unsafe impl raw_window_handle::HasRawWindowHandle for RawWindow {
fn raw_window_handle(&self) -> raw_window_handle::RawWindowHandle {
self.raw_window_handle
}
}

View file

@ -6,7 +6,9 @@ use ::x11::xlib;
// use xcb::dri2; // needed later // use xcb::dri2; // needed later
use super::XcbConnection; use super::XcbConnection;
use crate::{AppWindow, Event, MouseButtonID, MouseScroll, Parent, WindowInfo, WindowOpenOptions}; use crate::{
AppWindow, Event, MouseButtonID, MouseScroll, Parent, RawWindow, WindowInfo, WindowOpenOptions,
};
use raw_window_handle::RawWindowHandle; use raw_window_handle::RawWindowHandle;
@ -130,6 +132,9 @@ impl<A: AppWindow> Window<A> {
connection: xcb_connection.conn.get_raw_conn() as *mut c_void, connection: xcb_connection.conn.get_raw_conn() as *mut c_void,
..raw_window_handle::unix::XcbHandle::empty() ..raw_window_handle::unix::XcbHandle::empty()
}); });
let raw_window = RawWindow {
raw_window_handle: raw_handle,
};
let scaling = { let scaling = {
let maybe_scaling = let maybe_scaling =
@ -158,7 +163,7 @@ impl<A: AppWindow> Window<A> {
x11_window x11_window
.app_window .app_window
.create_context(raw_handle, &window_info); .create_context(raw_window, &window_info);
x11_window.run_event_loop(); x11_window.run_event_loop();