From 927d5b7cba18f8c2f3e8cde26bd11dcb43e7720a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Ram=C3=B3n=20Jim=C3=A9nez?= Date: Wed, 4 Jun 2025 13:58:44 +0200 Subject: [PATCH] Perform widget operations in `Emulator` --- test/src/emulator.rs | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/test/src/emulator.rs b/test/src/emulator.rs index d6b5f939..592b866b 100644 --- a/test/src/emulator.rs +++ b/test/src/emulator.rs @@ -2,6 +2,7 @@ use crate::Instruction; use crate::core; use crate::core::mouse; use crate::core::renderer; +use crate::core::widget::operation; use crate::core::window; use crate::core::{Element, Size}; use crate::program::Program; @@ -91,8 +92,29 @@ impl Emulator

{ Action::LoadFont { .. } => { // TODO } - Action::Widget(_operation) => { - // TODO + Action::Widget(operation) => { + let mut user_interface = UserInterface::build( + program.view(&self.state, self.window), + self.size, + self.cache.take().unwrap(), + &mut self.renderer, + ); + + let mut operation = Some(operation); + + while let Some(mut current) = operation.take() { + user_interface.operate(&self.renderer, &mut current); + + match current.finish() { + operation::Outcome::None => {} + operation::Outcome::Some(()) => {} + operation::Outcome::Chain(next) => { + operation = Some(next); + } + } + } + + self.cache = Some(user_interface.into_cache()); } Action::Clipboard(action) => { // TODO