From 08b0e7a7cc1809bbba30cd15bfbe28b356a61a98 Mon Sep 17 00:00:00 2001 From: Artyom Sinyugin Date: Thu, 19 Dec 2024 20:15:31 +0300 Subject: [PATCH] xilem:example:calc: CE button MEDIUM_VIOLET_RED when clicked now and return to WHITE after number is pressed --- xilem/examples/calc.rs | 17 ++++++++++++----- xilem/src/view/label.rs | 2 +- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/xilem/examples/calc.rs b/xilem/examples/calc.rs index 1e1f082f6..33a2358ad 100644 --- a/xilem/examples/calc.rs +++ b/xilem/examples/calc.rs @@ -12,9 +12,9 @@ use winit::error::EventLoopError; use winit::window::Window; use xilem::view::{ button, flex, grid, label, sized_box, Axis, Flex, FlexSequence, FlexSpacer, GridExt, - GridSequence, + GridSequence, Label, }; -use xilem::{EventLoop, EventLoopBuilder, WidgetView, Xilem}; +use xilem::{Color, EventLoop, EventLoopBuilder, WidgetView, Xilem}; #[derive(Copy, Clone)] enum MathOperator { @@ -50,6 +50,7 @@ struct Calculator { numbers: [String; 2], result: Option, operation: Option, + clear_button: Color, } impl Calculator { @@ -72,6 +73,7 @@ impl Calculator { fn clear_entry(&mut self) { self.clear_current_entry_on_input = false; + self.clear_button = Color::MEDIUM_VIOLET_RED; if self.result.is_some() { self.clear_all(); return; @@ -80,6 +82,9 @@ impl Calculator { } fn on_entered_digit(&mut self, digit: &str) { + if self.clear_button != Color::WHITE { + self.clear_button = Color::WHITE; + } if self.result.is_some() { self.clear_all(); } else if self.clear_current_entry_on_input { @@ -199,6 +204,7 @@ fn num_row(nums: [&'static str; 3], row: i32) -> impl GridSequence { const DISPLAY_FONT_SIZE: f32 = 30.; const GRID_GAP: f64 = 2.; fn app_logic(data: &mut Calculator) -> impl WidgetView { + let label = label("CE").brush(data.clear_button); grid( ( // Display @@ -216,7 +222,7 @@ fn app_logic(data: &mut Calculator) -> impl WidgetView { )) .grid_item(GridParams::new(0, 0, 4, 1)), // Top row - expanded_button("CE", Calculator::clear_entry).grid_pos(0, 1), + expanded_button(label, Calculator::clear_entry).grid_pos(0, 1), expanded_button("C", Calculator::clear_all).grid_pos(1, 1), expanded_button("DEL", Calculator::on_delete).grid_pos(2, 1), operator_button(MathOperator::Divide).grid_pos(3, 1), @@ -256,9 +262,9 @@ fn display_label(text: &str) -> impl WidgetView { /// Returns a button contained in an expanded box. Useful for the buttons so that /// they take up all available space in flex containers. fn expanded_button( - text: &str, + text: impl Into