diff options
Diffstat (limited to 'examples/tour')
| -rw-r--r-- | examples/tour/README.md | 35 | ||||
| -rw-r--r-- | examples/tour/main.rs | 10 | ||||
| -rw-r--r-- | examples/tour/tour.rs | 12 | 
3 files changed, 46 insertions, 11 deletions
diff --git a/examples/tour/README.md b/examples/tour/README.md new file mode 100644 index 00000000..0e9d6eda --- /dev/null +++ b/examples/tour/README.md @@ -0,0 +1,35 @@ +# Tour + +A simple UI tour showcasing different widgets that can be built using Iced. It +also shows how the library can be integrated into an existing system. + +The example is built on top of [`ggez`], a game library for Rust. Currently, it +is using a [personal fork] to [add a `FontCache` type] and +[fix some issues with HiDPI]. + +The implementation consists of different modules: +  - __[`tour`]__ contains the actual GUI code: __state__, __messages__, +    __update logic__ and __view logic__. +  - __[`renderer`]__ implements a simple renderer for each of the used widgets on +    top of the graphics module of [`ggez`]. +  - __[`widget`]__ re-exposes Iced's built-in widgets with the renderer type parameter +    replaced with the implemented [`renderer`], for convenience. +  - __[`main`]__ integrates Iced with [`ggez`] and connects the [`tour`] with +    the [`renderer`]. + +``` +cargo run --example tour +``` + +[![Tour - Iced][gui_gif]][gui_gfycat] + +[`ggez`]: https://github.com/ggez/ggez +[`tour`]: tour/tour.rs +[`renderer`]: tour/renderer +[`widget`]: tour/widget.rs +[`main`]: tour/main.rs +[personal fork]: https://github.com/hecrj/ggez +[add a `FontCache` type]: https://github.com/ggez/ggez/pull/679 +[fix some issues with HiDPI]: https://github.com/hecrj/ggez/commit/dfe2fd2423c51a6daf42c75f66dfaeaacd439fb1 +[gui_gif]: https://thumbs.gfycat.com/VeneratedSourAurochs-small.gif +[gui_gfycat]: https://gfycat.com/veneratedsouraurochs diff --git a/examples/tour/main.rs b/examples/tour/main.rs index 0a6a2005..901a976a 100644 --- a/examples/tour/main.rs +++ b/examples/tour/main.rs @@ -16,8 +16,8 @@ pub fn main() -> ggez::GameResult {      let (context, event_loop) = {          &mut ggez::ContextBuilder::new("iced", "ggez")              .window_mode(ggez::conf::WindowMode { -                width: 850.0, -                height: 850.0, +                width: 1280.0, +                height: 1024.0,                  ..ggez::conf::WindowMode::default()              })              .build()? @@ -133,14 +133,14 @@ impl event::EventHandler for Game {          let screen = graphics::screen_coordinates(context);          let (messages, cursor) = { -            let layout = self.tour.layout(); +            let view = self.tour.view();              let content = Column::new()                  .width(screen.w as u16)                  .height(screen.h as u16)                  .align_items(iced::Align::Center)                  .justify_content(iced::Justify::Center) -                .push(layout); +                .push(view);              let renderer = &mut Renderer::new(                  context, @@ -165,7 +165,7 @@ impl event::EventHandler for Game {          };          for message in messages { -            self.tour.react(message); +            self.tour.update(message);          }          mouse::set_cursor_type(context, into_cursor_type(cursor)); diff --git a/examples/tour/tour.rs b/examples/tour/tour.rs index c2126675..d0be99b0 100644 --- a/examples/tour/tour.rs +++ b/examples/tour/tour.rs @@ -24,7 +24,7 @@ impl Tour {          }      } -    pub fn react(&mut self, event: Message) { +    pub fn update(&mut self, event: Message) {          match event {              Message::BackPressed => {                  self.steps.go_back(); @@ -38,7 +38,7 @@ impl Tour {          }      } -    pub fn layout(&mut self) -> Element<Message> { +    pub fn view(&mut self) -> Element<Message> {          let Tour {              steps,              back_button, @@ -67,7 +67,7 @@ impl Tour {          let element: Element<_> = Column::new()              .max_width(500)              .spacing(20) -            .push(steps.layout(self.debug).map(Message::StepMessage)) +            .push(steps.view(self.debug).map(Message::StepMessage))              .push(controls)              .into(); @@ -136,8 +136,8 @@ impl Steps {          self.steps[self.current].update(msg, debug);      } -    fn layout(&mut self, debug: bool) -> Element<StepMessage> { -        self.steps[self.current].layout(debug) +    fn view(&mut self, debug: bool) -> Element<StepMessage> { +        self.steps[self.current].view(debug)      }      fn advance(&mut self) { @@ -262,7 +262,7 @@ impl<'a> Step {          }      } -    fn layout(&mut self, debug: bool) -> Element<StepMessage> { +    fn view(&mut self, debug: bool) -> Element<StepMessage> {          match self {              Step::Welcome => Self::welcome().into(),              Step::Radio { selection } => Self::radio(*selection).into(),  | 
