1
0
Fork 0

Change AppWindow::create_context() to AppWindow::build()

This commit is contained in:
Billy Messenger 2020-09-05 17:29:36 -05:00
parent 93dfe909a8
commit 08390d6004
3 changed files with 15 additions and 24 deletions

View file

@ -10,24 +10,20 @@ fn main() {
parent: baseview::Parent::None,
};
let my_program = MyProgram {};
let (_app_message_tx, app_message_rx) = mpsc::channel::<()>();
// Send _app_message_tx to a separate thread, then send messages to the GUI thread.
let _ = baseview::Window::open(window_open_options, my_program, app_message_rx);
let _ = baseview::Window::<MyProgram>::open(window_open_options, app_message_rx);
}
struct MyProgram {}
impl baseview::AppWindow for MyProgram {
type AppMessage = ();
fn create_context(
&mut self,
_window: baseview::RawWindow,
_window_info: &baseview::WindowInfo,
) {
fn build(_window_handle: baseview::RawWindow, window_info: &baseview::WindowInfo) -> Self {
println!("Window info: {:?}", window_info);
Self {}
}
fn draw(&mut self) {}

View file

@ -36,7 +36,8 @@ pub struct WindowOpenOptions<'a> {
pub trait AppWindow {
type AppMessage;
fn create_context(&mut self, window: RawWindow, window_info: &WindowInfo);
fn build(window_handle: RawWindow, window_info: &WindowInfo) -> Self;
fn draw(&mut self);
fn on_event(&mut self, event: Event);
fn on_app_message(&mut self, message: Self::AppMessage);

View file

@ -17,11 +17,7 @@ pub struct Window<A: AppWindow> {
}
impl<A: AppWindow> Window<A> {
pub fn open(
options: WindowOpenOptions,
app_window: A,
app_message_rx: mpsc::Receiver<A::AppMessage>,
) -> Self {
pub fn open(options: WindowOpenOptions, app_message_rx: mpsc::Receiver<A::AppMessage>) -> Self {
// Convert the parent to a X11 window ID if we're given one
let parent = match options.parent {
Parent::None => None,
@ -112,6 +108,14 @@ impl<A: AppWindow> Window<A> {
.or(Some(1.0))
.unwrap();
let window_info = WindowInfo {
width: options.width as u32,
height: options.height as u32,
scale: scaling,
};
let app_window = A::build(raw_window, &window_info);
let mut x11_window = Self {
scaling,
xcb_connection,
@ -119,16 +123,6 @@ impl<A: AppWindow> Window<A> {
app_message_rx,
};
let window_info = WindowInfo {
width: options.width as u32,
height: options.height as u32,
scale: x11_window.scaling,
};
x11_window
.app_window
.create_context(raw_window, &window_info);
x11_window.run_event_loop();
x11_window