mirror of
https://github.com/emilk/egui.git
synced 2026-08-29 04:40:03 -04:00
Let the theme set a button's atom gap
`Button` hard-coded `spacing.icon_spacing` as the gap between its icon and its text. A theme that gives a button its own metrics wants to set that gap too, so it becomes a `ButtonStyle` field, overridden by `Button::gap`. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -107,6 +107,13 @@ impl<'a> AtomLayout<'a> {
|
||||
self
|
||||
}
|
||||
|
||||
/// Set the gap between atoms, unless [`Self::gap`] already set one.
|
||||
#[inline]
|
||||
pub fn fallback_gap(mut self, gap: f32) -> Self {
|
||||
self.gap.get_or_insert(gap);
|
||||
self
|
||||
}
|
||||
|
||||
/// Set the [`Frame`].
|
||||
#[inline]
|
||||
pub fn frame(mut self, frame: Frame) -> Self {
|
||||
|
||||
@@ -91,6 +91,7 @@ impl StyleProvider<ButtonStyle> for DefaultStyle {
|
||||
// Historically only the height was floored, so that a button is at least as tall as
|
||||
// any other interactive widget on the same row.
|
||||
min_size: Vec2::new(0.0, spacing.interact_size.y),
|
||||
gap: spacing.icon_spacing,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,6 +58,11 @@ pub struct ButtonStyle {
|
||||
/// Ignored by a [`crate::Button::small`] button, which sizes itself purely from its contents
|
||||
/// and its own [`crate::Button::min_size`].
|
||||
pub min_size: Vec2,
|
||||
|
||||
/// The gap between the button's atoms, e.g. between its icon and its text.
|
||||
///
|
||||
/// Overridden by [`crate::Button::gap`].
|
||||
pub gap: f32,
|
||||
}
|
||||
|
||||
impl WidgetStyle for ButtonStyle {}
|
||||
|
||||
@@ -327,8 +327,11 @@ impl<'a> Button<'a> {
|
||||
frame,
|
||||
text_style,
|
||||
min_size: style_min_size,
|
||||
gap,
|
||||
} = ui.widget_style(id, &classes);
|
||||
|
||||
layout = layout.fallback_gap(gap);
|
||||
|
||||
// The theme decides how small a button may get — unless it is a `small` one, which sizes
|
||||
// itself purely from its contents.
|
||||
if !small {
|
||||
|
||||
@@ -69,6 +69,7 @@ impl StyleProvider<ButtonStyle> for MyTheme {
|
||||
.inner_margin(8),
|
||||
text_style: base.text,
|
||||
min_size: args.style.spacing.interact_size,
|
||||
gap: args.style.spacing.icon_spacing,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user