diff options
author | 2020-07-08 11:44:40 +0200 | |
---|---|---|
committer | 2020-07-08 11:44:40 +0200 | |
commit | f3dfaa2c43bad16fc91660b2b73cb9173549e7ec (patch) | |
tree | 353365f4dd1e3136bc651ac8c1572f62fff1304b /glutin | |
parent | 072ec69d53d2708d8fd1693151bcec7305efccf8 (diff) | |
parent | 5c4f5ae5ecb36703a95cafb2cd58692529c9466d (diff) | |
download | iced-f3dfaa2c43bad16fc91660b2b73cb9173549e7ec.tar.gz iced-f3dfaa2c43bad16fc91660b2b73cb9173549e7ec.tar.bz2 iced-f3dfaa2c43bad16fc91660b2b73cb9173549e7ec.zip |
Merge branch 'master' into feature/pane-grid-titlebar
Diffstat (limited to 'glutin')
-rw-r--r-- | glutin/src/application.rs | 52 |
1 files changed, 50 insertions, 2 deletions
diff --git a/glutin/src/application.rs b/glutin/src/application.rs index c777a13b..3be9b65f 100644 --- a/glutin/src/application.rs +++ b/glutin/src/application.rs @@ -47,6 +47,8 @@ pub fn run<A, E, C>( let mut title = application.title(); let mut mode = application.mode(); + let mut background_color = application.background_color(); + let mut scale_factor = application.scale_factor(); let context = { let builder = settings.window.into_builder( @@ -68,13 +70,14 @@ pub fn run<A, E, C>( }; let clipboard = Clipboard::new(&context.window()); + let mut cursor_position = glutin::dpi::PhysicalPosition::new(-1.0, -1.0); let mut mouse_interaction = mouse::Interaction::default(); let mut modifiers = glutin::event::ModifiersState::default(); let physical_size = context.window().inner_size(); let mut viewport = Viewport::with_physical_size( Size::new(physical_size.width, physical_size.height), - context.window().scale_factor(), + context.window().scale_factor() * scale_factor, ); let mut resized = false; @@ -88,6 +91,7 @@ pub fn run<A, E, C>( let mut state = program::State::new( application, viewport.logical_size(), + conversion::cursor_position(cursor_position, viewport.scale_factor()), &mut renderer, &mut debug, ); @@ -95,10 +99,18 @@ pub fn run<A, E, C>( event_loop.run(move |event, _, control_flow| match event { event::Event::MainEventsCleared => { + if state.is_queue_empty() { + return; + } + let command = runtime.enter(|| { state.update( - clipboard.as_ref().map(|c| c as _), viewport.logical_size(), + conversion::cursor_position( + cursor_position, + viewport.scale_factor(), + ), + clipboard.as_ref().map(|c| c as _), &mut renderer, &mut debug, ) @@ -134,6 +146,39 @@ pub fn run<A, E, C>( mode = new_mode; } + + // Update background color + background_color = program.background_color(); + + // Update scale factor + let new_scale_factor = program.scale_factor(); + + if scale_factor != new_scale_factor { + let size = context.window().inner_size(); + + viewport = Viewport::with_physical_size( + Size::new(size.width, size.height), + context.window().scale_factor() * new_scale_factor, + ); + + // We relayout the UI with the new logical size. + // The queue is empty, therefore this will never produce + // a `Command`. + // + // TODO: Properly queue `WindowResized` + let _ = state.update( + viewport.logical_size(), + conversion::cursor_position( + cursor_position, + viewport.scale_factor(), + ), + clipboard.as_ref().map(|c| c as _), + &mut renderer, + &mut debug, + ); + + scale_factor = new_scale_factor; + } } context.window().request_redraw(); @@ -160,6 +205,7 @@ pub fn run<A, E, C>( let new_mouse_interaction = compositor.draw( &mut renderer, &viewport, + background_color, state.primitive(), &debug.overlay(), ); @@ -186,7 +232,9 @@ pub fn run<A, E, C>( application::handle_window_event( &window_event, context.window(), + scale_factor, control_flow, + &mut cursor_position, &mut modifiers, &mut viewport, &mut resized, |