diff --git a/crates/egui/src/style.rs b/crates/egui/src/style.rs index be4021501..5df6bb2de 100644 --- a/crates/egui/src/style.rs +++ b/crates/egui/src/style.rs @@ -4,6 +4,7 @@ use std::{collections::BTreeMap, ops::RangeInclusive, sync::Arc}; +use emath::Align; use epaint::{text::FontTweak, Rounding, Shadow, Stroke}; use crate::{ @@ -196,6 +197,11 @@ pub struct Style { /// which will take precedence over this. pub override_font_id: Option, + /// How to vertically align text. + /// + /// Default depends on layout. + pub override_text_valign: Option, + /// The [`FontFamily`] and size you want to use for a specific [`TextStyle`]. /// /// The most convenient way to look something up in this is to use [`TextStyle::resolve`]. @@ -1201,6 +1207,7 @@ impl Default for Style { Self { override_font_id: None, override_text_style: None, + override_text_valign: None, text_styles: default_text_styles(), drag_value_text_style: TextStyle::Button, number_formatter: NumberFormatter(Arc::new(emath::format_with_decimals_in_range)), @@ -1501,6 +1508,7 @@ impl Style { let Self { override_font_id, override_text_style, + override_text_valign, text_styles, drag_value_text_style, number_formatter: _, // can't change callbacks in the UI @@ -1534,7 +1542,7 @@ impl Style { ui.end_row(); ui.label("Override text style"); - crate::ComboBox::from_id_salt("Override text style") + crate::ComboBox::from_id_salt("override_text_style") .selected_text(match override_text_style { None => "None".to_owned(), Some(override_text_style) => override_text_style.to_string(), @@ -1550,6 +1558,28 @@ impl Style { }); ui.end_row(); + fn valign_name(valign: Align) -> &'static str { + match valign { + Align::TOP => "Top", + Align::Center => "Center", + Align::BOTTOM => "Bottom", + } + } + + ui.label("Override text valign"); + crate::ComboBox::from_id_salt("override_text_valign") + .selected_text(match override_text_valign { + None => "None", + Some(override_text_valign) => valign_name(*override_text_valign), + }) + .show_ui(ui, |ui| { + ui.selectable_value(override_text_valign, None, "None"); + for align in [Align::TOP, Align::Center, Align::BOTTOM] { + ui.selectable_value(override_text_valign, Some(align), valign_name(align)); + } + }); + ui.end_row(); + ui.label("Text style of DragValue"); crate::ComboBox::from_id_salt("drag_value_text_style") .selected_text(drag_value_text_style.to_string()) diff --git a/crates/egui/src/ui.rs b/crates/egui/src/ui.rs index 2e2e0db85..2a2c790c6 100644 --- a/crates/egui/src/ui.rs +++ b/crates/egui/src/ui.rs @@ -620,8 +620,9 @@ impl Ui { /// How to vertically align text #[inline] pub fn text_valign(&self) -> Align { - #![allow(clippy::unused_self)] - Align::BOTTOM + self.style() + .override_text_valign + .unwrap_or_else(|| self.layout().vertical_align()) } /// Create a painter for a sub-region of this Ui.