1
0
mirror of https://github.com/emilk/egui.git synced 2026-06-26 14:49:06 -04:00

Add atoms() helpers to get Atoms from widgets (#8128)

A get atoms trait for Button, checkbox etc. I made it because I had time
to kill after I tried sorting buttons in a Vec by the image in their
atoms, but couldn't get to it because it was private.

---------

Co-authored-by: Lucas Meurer <hi@lucasmerlin.me>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nashvill375
2026-06-25 03:16:56 -07:00
committed by GitHub
parent ffbd7dc641
commit 3fdcef15ab
4 changed files with 31 additions and 3 deletions

View File

@@ -1,9 +1,9 @@
use epaint::Margin; use epaint::Margin;
use crate::{ use crate::{
Atom, AtomExt as _, AtomKind, AtomLayout, AtomLayoutResponse, Color32, CornerRadius, Frame, Atom, AtomExt as _, AtomKind, AtomLayout, AtomLayoutResponse, Atoms, Color32, CornerRadius,
Image, IntoAtoms, NumExt as _, Response, Sense, Stroke, TextStyle, TextWrapMode, Ui, Vec2, Frame, Image, IntoAtoms, NumExt as _, Response, Sense, Stroke, TextStyle, TextWrapMode, Ui,
Widget, WidgetInfo, WidgetText, WidgetType, Vec2, Widget, WidgetInfo, WidgetText, WidgetType,
widget_style::{ButtonStyle, Classes, HasClasses, SELECTED_CLASS, WidgetState}, widget_style::{ButtonStyle, Classes, HasClasses, SELECTED_CLASS, WidgetState},
}; };
@@ -279,6 +279,13 @@ impl<'a> Button<'a> {
self self
} }
/// Output the button's [`Atoms`].
///
/// This includes any images you have on the button.
pub fn atoms(&self) -> &Atoms<'a> {
&self.layout.atoms
}
/// Show the button and return a [`AtomLayoutResponse`] for painting custom contents. /// Show the button and return a [`AtomLayoutResponse`] for painting custom contents.
pub fn atom_ui(self, ui: &mut Ui) -> AtomLayoutResponse { pub fn atom_ui(self, ui: &mut Ui) -> AtomLayoutResponse {
let Button { let Button {

View File

@@ -41,6 +41,13 @@ impl<'a> Checkbox<'a> {
Self::new(checked, ()) Self::new(checked, ())
} }
/// Output the checkbox's [`Atoms`].
///
/// This includes any images you have on the checkbox.
pub fn atoms(&self) -> &Atoms<'a> {
&self.atoms
}
/// Display an indeterminate state (neither checked nor unchecked) /// Display an indeterminate state (neither checked nor unchecked)
/// ///
/// This only affects the checkbox's appearance. It will still toggle its boolean value when /// This only affects the checkbox's appearance. It will still toggle its boolean value when

View File

@@ -409,6 +409,13 @@ impl<'a> DragValue<'a> {
self.update_while_editing = update; self.update_while_editing = update;
self self
} }
/// Output the [`DragValue`]'s [`Atoms`].
///
/// This includes any images you have on the [`DragValue`].
pub fn atoms(&self) -> &Atoms<'a> {
&self.atoms
}
} }
impl Widget for DragValue<'_> { impl Widget for DragValue<'_> {

View File

@@ -35,6 +35,13 @@ impl<'a> RadioButton<'a> {
atoms: atoms.into_atoms(), atoms: atoms.into_atoms(),
} }
} }
/// Output the [`RadioButton`]'s [`Atoms`].
///
/// This includes any images you have on the [`RadioButton`].
pub fn atoms(&self) -> &Atoms<'a> {
&self.atoms
}
} }
impl Widget for RadioButton<'_> { impl Widget for RadioButton<'_> {