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
|
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`].
|
/// Set the [`Frame`].
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn frame(mut self, frame: Frame) -> Self {
|
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
|
// Historically only the height was floored, so that a button is at least as tall as
|
||||||
// any other interactive widget on the same row.
|
// any other interactive widget on the same row.
|
||||||
min_size: Vec2::new(0.0, spacing.interact_size.y),
|
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
|
/// Ignored by a [`crate::Button::small`] button, which sizes itself purely from its contents
|
||||||
/// and its own [`crate::Button::min_size`].
|
/// and its own [`crate::Button::min_size`].
|
||||||
pub min_size: Vec2,
|
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 {}
|
impl WidgetStyle for ButtonStyle {}
|
||||||
|
|||||||
@@ -327,8 +327,11 @@ impl<'a> Button<'a> {
|
|||||||
frame,
|
frame,
|
||||||
text_style,
|
text_style,
|
||||||
min_size: style_min_size,
|
min_size: style_min_size,
|
||||||
|
gap,
|
||||||
} = ui.widget_style(id, &classes);
|
} = 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
|
// The theme decides how small a button may get — unless it is a `small` one, which sizes
|
||||||
// itself purely from its contents.
|
// itself purely from its contents.
|
||||||
if !small {
|
if !small {
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ impl StyleProvider<ButtonStyle> for MyTheme {
|
|||||||
.inner_margin(8),
|
.inner_margin(8),
|
||||||
text_style: base.text,
|
text_style: base.text,
|
||||||
min_size: args.style.spacing.interact_size,
|
min_size: args.style.spacing.interact_size,
|
||||||
|
gap: args.style.spacing.icon_spacing,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user