use std::{cell::Cell, rc::Rc}; use crate::{EventQueue, coordinates::CharRect, draw_buffer::DrawBuffer}; use super::{NextWidget, Widget, WidgetResponse, button::Button}; // dont need to store a callback as it gets pushed into the inner button callback pub struct ToggleButton { button: Button, variant: T, state: Rc>, } impl Widget for ToggleButton { fn draw(&self, draw_buffer: &mut DrawBuffer, selected: bool) { self.button .draw_overwrite_pressed(draw_buffer, selected, self.variant == self.state.get()) } fn process_input( &mut self, modifiers: &winit::event::Modifiers, key_event: &winit::event::KeyEvent, event: &mut EventQueue<'_>, ) -> WidgetResponse { self.button.process_input(modifiers, key_event, event) } #[cfg(feature = "accesskit")] fn build_tree(&self, tree: &mut Vec<(accesskit::NodeId, accesskit::Node)>) { todo!() } } impl ToggleButton { pub fn new( text: &'static str, rect: CharRect, next_widget: NextWidget, variant: T, state: Rc>, ) -> Self { let button = Button::new( text, rect, next_widget, #[cfg(feature = "accesskit")] todo!(), ); Self { button, variant, state, } } }