diff options
author | 2019-11-09 05:06:04 +0100 | |
---|---|---|
committer | 2019-11-09 05:10:10 +0100 | |
commit | e953b1828d5b8dbdd145829f47c4817137e37f0d (patch) | |
tree | 9c775128e047e4a141f2aefb691e7e31a801ba93 | |
parent | e66d38403d09b265f111d9e1b59af6143464d912 (diff) | |
download | iced-e953b1828d5b8dbdd145829f47c4817137e37f0d.tar.gz iced-e953b1828d5b8dbdd145829f47c4817137e37f0d.tar.bz2 iced-e953b1828d5b8dbdd145829f47c4817137e37f0d.zip |
Allow applications to control the window title
`iced_winit` will change the window title dynamically at runtime!
-rw-r--r-- | examples/scroll.rs | 4 | ||||
-rw-r--r-- | examples/todos.rs | 4 | ||||
-rw-r--r-- | examples/tour.rs | 55 | ||||
-rw-r--r-- | src/lib.rs | 6 | ||||
-rw-r--r-- | winit/src/application.rs | 13 |
5 files changed, 64 insertions, 18 deletions
diff --git a/examples/scroll.rs b/examples/scroll.rs index 608923fe..5a725f0c 100644 --- a/examples/scroll.rs +++ b/examples/scroll.rs @@ -25,6 +25,10 @@ pub enum Message { impl Application for Example { type Message = Message; + fn title(&self) -> String { + String::from("Scroll - Iced") + } + fn update(&mut self, message: Message) { match message { Message::AddItem => { diff --git a/examples/todos.rs b/examples/todos.rs index 2ebbcc7c..5257fc12 100644 --- a/examples/todos.rs +++ b/examples/todos.rs @@ -25,6 +25,10 @@ pub enum Message { impl Application for Todos { type Message = Message; + fn title(&self) -> String { + String::from("Todos - Iced") + } + fn update(&mut self, message: Message) { match message { Message::InputChanged(value) => { diff --git a/examples/tour.rs b/examples/tour.rs index c5daa2c5..ac654a5e 100644 --- a/examples/tour.rs +++ b/examples/tour.rs @@ -7,9 +7,7 @@ use iced::{ pub fn main() { env_logger::init(); - let tour = Tour::new(); - - tour.run(); + Tour::new().run() } pub struct Tour { @@ -35,6 +33,10 @@ impl Tour { impl Application for Tour { type Message = Message; + fn title(&self) -> String { + format!("{} - Iced", self.steps.title()) + } + fn update(&mut self, event: Message) { match event { Message::BackPressed => { @@ -52,6 +54,7 @@ impl Application for Tour { fn view(&mut self) -> Element<Message> { let Tour { steps, + scroll, back_button, next_button, .. @@ -93,7 +96,7 @@ impl Application for Tour { .height(Length::Fill) .justify_content(Justify::Center) .push( - Scrollable::new(&mut self.scroll) + Scrollable::new(scroll) .align_items(Align::Center) .push(element), ) @@ -178,6 +181,10 @@ impl Steps { self.current + 1 < self.steps.len() && self.steps[self.current].can_continue() } + + fn title(&self) -> &str { + self.steps[self.current].title() + } } enum Step { @@ -277,6 +284,21 @@ impl<'a> Step { }; } + fn title(&self) -> &str { + match self { + Step::Welcome => "Welcome", + Step::Radio { .. } => "Radio button", + Step::Slider { .. } => "Slider", + Step::Text { .. } => "Text", + Step::Image { .. } => "Image", + Step::RowsAndColumns { .. } => "Rows and columns", + Step::Scrollable => "Scrollable", + Step::TextInput { .. } => "Text input", + Step::Debugger => "Debugger", + Step::End => "End", + } + } + fn can_continue(&self) -> bool { match self { Step::Welcome => true, @@ -294,30 +316,27 @@ impl<'a> Step { fn view(&mut self, debug: bool) -> Element<StepMessage> { match self { - Step::Welcome => Self::welcome().into(), - Step::Radio { selection } => Self::radio(*selection).into(), - Step::Slider { state, value } => Self::slider(state, *value).into(), + Step::Welcome => Self::welcome(), + Step::Radio { selection } => Self::radio(*selection), + Step::Slider { state, value } => Self::slider(state, *value), Step::Text { size_slider, size, color_sliders, color, - } => Self::text(size_slider, *size, color_sliders, *color).into(), - Step::Image { width, slider } => Self::image(*width, slider).into(), + } => Self::text(size_slider, *size, color_sliders, *color), + Step::Image { width, slider } => Self::image(*width, slider), Step::RowsAndColumns { layout, spacing_slider, spacing, - } => { - Self::rows_and_columns(*layout, spacing_slider, *spacing).into() - } - Step::Scrollable => Self::scrollable().into(), - Step::TextInput { value, state } => { - Self::text_input(value, state).into() - } - Step::Debugger => Self::debugger(debug).into(), - Step::End => Self::end().into(), + } => Self::rows_and_columns(*layout, spacing_slider, *spacing), + Step::Scrollable => Self::scrollable(), + Step::TextInput { value, state } => Self::text_input(value, state), + Step::Debugger => Self::debugger(debug), + Step::End => Self::end(), } + .into() } fn container(title: &str) -> Column<'a, StepMessage> { @@ -7,6 +7,8 @@ pub use platform::*; pub trait Application { type Message: std::fmt::Debug; + fn title(&self) -> String; + fn update(&mut self, message: Self::Message); fn view(&mut self) -> Element<Self::Message>; @@ -33,6 +35,10 @@ where type Renderer = Renderer; type Message = A::Message; + fn title(&self) -> String { + self.0.title() + } + fn update(&mut self, message: Self::Message) { self.0.update(message); } diff --git a/winit/src/application.rs b/winit/src/application.rs index 3b908189..4deffecc 100644 --- a/winit/src/application.rs +++ b/winit/src/application.rs @@ -10,6 +10,8 @@ pub trait Application { type Message: std::fmt::Debug; + fn title(&self) -> String; + fn update(&mut self, message: Self::Message); fn view(&mut self) -> Element<Self::Message, Self::Renderer>; @@ -25,12 +27,14 @@ pub trait Application { }; let mut debug = Debug::new(); + let mut title = self.title(); debug.startup_started(); let event_loop = EventLoop::new(); // TODO: Ask for window settings and configure this properly let window = WindowBuilder::new() + .with_title(&title) .with_inner_size(winit::dpi::LogicalSize { width: 1280.0, height: 1024.0, @@ -112,6 +116,15 @@ pub trait Application { debug.update_finished(); } + // Update window title + let new_title = self.title(); + + if title != new_title { + window.set_title(&new_title); + + title = new_title; + } + debug.layout_started(); let user_interface = UserInterface::build( document(&mut self, size, &mut debug), |