GUI

GUI egui immediate moderetained mode

  • UI widget
  • widget

egui OpenGL eframe winit update ui.button("text").clicked() bool

→ → → + - * /


# Cargo.toml
[dependencies]
eframe = "0.28"
use eframe::egui;
 
#[derive(Default)]
struct Calculator {
 display: String,
}
 
impl eframe::App for Calculator {
 fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
 egui::CentralPanel::default().show(ctx, |ui| {
 ui.heading(&self.display);
 ui.columns(4, |cols| {
 for (i, label) in ["7","8","9","/"].iter().enumerate() {
 if cols[i].button(label).clicked() {
 self.display.push_str(label);
 }
 }
 });
 });
 }
}
 
fn main() -> Result<(), eframe::Error> {
 eframe::run_native(
 "Calculator",
 Default::default(),
 Box::new(|_cc| Ok(Box::<Calculator>::default())),
 )
}

: —

fn eval(expr: &str) -> i64 {
 let mut result = 0i64;
 let mut num = String::new();
 let mut is_mul = false;
 let mut last = 1i64;
 for ch in expr.chars().chain(std::iter::once(' ')) {
 match ch {
 '0'..='9' => num.push(ch),
 _ => {
 let n: i64 = num.parse().unwrap_or(0);
 num.clear();
 if is_mul { last = (last * n) % 10000; }
 else { result = (result + last) % 10000; last = n; }
 is_mul = ch == '*';
 }
 }
 }
 (result + last) % 10000
}