Something went wrong. Try again.
This repository has no description
Something went wrong. Try again.
1.5 kB · 59 lines
Rust
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960use 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 callbackpub struct ToggleButton<T: Copy + PartialEq> { button: Button,
variant: T, state: Rc<Cell<T>>,}
impl<T: Copy + PartialEq> Widget for ToggleButton<T> { 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")] #[expect(unused)] fn build_tree(&self, tree: &mut Vec<(accesskit::NodeId, accesskit::Node)>) { todo!() }}
impl<T: Copy + PartialEq + 'static> ToggleButton<T> { #[allow(unused)] pub fn new( text: &'static str, rect: CharRect, next_widget: NextWidget, variant: T, state: Rc<Cell<T>>, ) -> Self { let button = Button::new( text, rect, next_widget, #[cfg(feature = "accesskit")] todo!(), ); Self { button, variant, state, } }}