pub trait Component {
// Required method
fn layout(&self) -> &Layout;
// Provided methods
fn update(&mut self) { ... }
fn on_mouse_down(&mut self) { ... }
fn on_mouse_up(&mut self) { ... }
fn on_key_down(&mut self, key: Key) { ... }
fn on_key_up(&mut self) { ... }
fn on_right_mouse_down(&mut self) { ... }
fn on_right_mouse_up(&mut self) { ... }
}