summaryrefslogtreecommitdiffstats
path: root/winit/src/application.rs
diff options
context:
space:
mode:
Diffstat (limited to 'winit/src/application.rs')
-rw-r--r--winit/src/application.rs74
1 files changed, 39 insertions, 35 deletions
diff --git a/winit/src/application.rs b/winit/src/application.rs
index 10c5a7ac..a712632e 100644
--- a/winit/src/application.rs
+++ b/winit/src/application.rs
@@ -1,8 +1,8 @@
use crate::{
- container, conversion,
+ conversion,
input::{keyboard, mouse},
- subscription, window, Cache, Clipboard, Command, Container, Debug, Element,
- Event, Length, MouseCursor, Settings, Subscription, UserInterface,
+ subscription, window, Cache, Clipboard, Command, Debug, Element, Event,
+ MouseCursor, Settings, Size, Subscription, UserInterface,
};
/// An interactive, native cross-platform application.
@@ -17,7 +17,7 @@ pub trait Application: Sized {
/// The renderer to use to draw the [`Application`].
///
/// [`Application`]: trait.Application.html
- type Renderer: window::Renderer + container::Renderer;
+ type Renderer: window::Renderer;
/// The type of __messages__ your [`Application`] will produce.
///
@@ -152,13 +152,13 @@ pub trait Application: Sized {
)
};
- debug.layout_started();
- let user_interface = UserInterface::build(
- document(&mut application, size, &mut debug),
+ let user_interface = build_user_interface(
+ &mut application,
Cache::default(),
&mut renderer,
+ size,
+ &mut debug,
);
- debug.layout_finished();
debug.draw_started();
let mut primitive = user_interface.draw(&mut renderer);
@@ -183,13 +183,13 @@ pub trait Application: Sized {
//
// This will allow us to rebuild it only when a message is
// handled.
- debug.layout_started();
- let mut user_interface = UserInterface::build(
- document(&mut application, size, &mut debug),
+ let mut user_interface = build_user_interface(
+ &mut application,
cache.take().unwrap(),
&mut renderer,
+ size,
+ &mut debug,
);
- debug.layout_finished();
debug.event_processing_started();
events.iter().for_each(|event| {
@@ -244,13 +244,13 @@ pub trait Application: Sized {
title = new_title;
}
- debug.layout_started();
- let user_interface = UserInterface::build(
- document(&mut application, size, &mut debug),
+ let user_interface = build_user_interface(
+ &mut application,
temp_cache,
&mut renderer,
+ size,
+ &mut debug,
);
- debug.layout_finished();
debug.draw_started();
primitive = user_interface.draw(&mut renderer);
@@ -390,6 +390,29 @@ pub trait Application: Sized {
}
}
+fn build_user_interface<'a, A: Application>(
+ application: &'a mut A,
+ cache: Cache,
+ renderer: &mut A::Renderer,
+ size: winit::dpi::LogicalSize,
+ debug: &mut Debug,
+) -> UserInterface<'a, A::Message, A::Renderer> {
+ debug.view_started();
+ let view = application.view();
+ debug.view_finished();
+
+ debug.layout_started();
+ let user_interface = UserInterface::build(
+ view,
+ Size::new(size.width.round() as f32, size.height.round() as f32),
+ cache,
+ renderer,
+ );
+ debug.layout_finished();
+
+ user_interface
+}
+
fn to_physical(size: winit::dpi::LogicalSize, dpi: f64) -> (u16, u16) {
let physical_size = size.to_physical(dpi);
@@ -399,25 +422,6 @@ fn to_physical(size: winit::dpi::LogicalSize, dpi: f64) -> (u16, u16) {
)
}
-fn document<'a, Application>(
- application: &'a mut Application,
- size: winit::dpi::LogicalSize,
- debug: &mut Debug,
-) -> Element<'a, Application::Message, Application::Renderer>
-where
- Application: self::Application,
- Application::Message: 'static,
-{
- debug.view_started();
- let view = application.view();
- debug.view_finished();
-
- Container::new(view)
- .width(Length::Units(size.width.round() as u16))
- .height(Length::Units(size.height.round() as u16))
- .into()
-}
-
fn spawn<Message: Send>(
command: Command<Message>,
thread_pool: &mut futures::executor::ThreadPool,