From 829e5ec36f7c56fd0e363bd942da449bfa60d02b Mon Sep 17 00:00:00 2001 From: Ygor Souza Date: Sat, 9 Aug 2025 11:40:34 +0200 Subject: [PATCH 1/2] Fix override_text_color priority The override_text_color is now used when rendering text from a String or &str. This is consistent with the RichText variant and makes the option behave as advertised, taking precedence over WidgetVisuals and overriding the color for all text unless explicitly changed for a single widget (via RichText or LayoutJob). --- crates/egui/src/widget_text.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/crates/egui/src/widget_text.rs b/crates/egui/src/widget_text.rs index bf7cbde3469..498ca58e478 100644 --- a/crates/egui/src/widget_text.rs +++ b/crates/egui/src/widget_text.rs @@ -746,11 +746,15 @@ impl WidgetText { ) -> Arc { match self { Self::Text(text) => { + let color = style + .visuals + .override_text_color + .unwrap_or(crate::Color32::PLACEHOLDER); let mut layout_job = LayoutJob::simple_format( text, TextFormat { font_id: FontSelection::Default.resolve(style), - color: crate::Color32::PLACEHOLDER, + color, valign: default_valign, ..Default::default() }, From fb42ef6db106719a77500e0eb3085a62ce0479c6 Mon Sep 17 00:00:00 2001 From: Ygor Souza Date: Tue, 12 Aug 2025 19:23:57 +0200 Subject: [PATCH 2/2] Add regression test --- crates/egui_kittest/tests/regression_tests.rs | 30 +++++++++++++++++++ .../override_text_color_interactive.png | 3 ++ 2 files changed, 33 insertions(+) create mode 100644 crates/egui_kittest/tests/snapshots/override_text_color_interactive.png diff --git a/crates/egui_kittest/tests/regression_tests.rs b/crates/egui_kittest/tests/regression_tests.rs index 0cae152bf58..a3b7f6d9227 100644 --- a/crates/egui_kittest/tests/regression_tests.rs +++ b/crates/egui_kittest/tests/regression_tests.rs @@ -157,3 +157,33 @@ pub fn slider_should_move_with_fixed_decimals() { let actual_slider = harness.get_by_role(accesskit::Role::SpinButton); assert_eq!(actual_slider.value(), Some("1.00".to_owned())); } + +#[test] +pub fn override_text_color_affects_interactive_widgets() { + use egui::{Color32, RichText}; + + let mut harness = Harness::new_ui(|ui| { + _ = ui.button("normal"); + _ = ui.checkbox(&mut true, "normal"); + _ = ui.radio(true, "normal"); + ui.visuals_mut().widgets.inactive.fg_stroke.color = Color32::RED; + _ = ui.button("red"); + _ = ui.checkbox(&mut true, "red"); + _ = ui.radio(true, "red"); + // override_text_color takes precedence over `WidgetVisuals`, as it docstring claims + ui.visuals_mut().override_text_color = Some(Color32::GREEN); + _ = ui.button("green"); + _ = ui.checkbox(&mut true, "green"); + _ = ui.radio(true, "green"); + // Setting the color explicitly with `RichText` overrides style + _ = ui.button(RichText::new("blue").color(Color32::BLUE)); + _ = ui.checkbox(&mut true, RichText::new("blue").color(Color32::BLUE)); + _ = ui.radio(true, RichText::new("blue").color(Color32::BLUE)); + }); + + #[cfg(all(feature = "wgpu", feature = "snapshot"))] + let mut results = SnapshotResults::new(); + + #[cfg(all(feature = "wgpu", feature = "snapshot"))] + results.add(harness.try_snapshot("override_text_color_interactive")); +} diff --git a/crates/egui_kittest/tests/snapshots/override_text_color_interactive.png b/crates/egui_kittest/tests/snapshots/override_text_color_interactive.png new file mode 100644 index 00000000000..0db4034a8d4 --- /dev/null +++ b/crates/egui_kittest/tests/snapshots/override_text_color_interactive.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60540cb1b5b71f100b2ea367a939cb9d93a91e56ff1f14ebfc988bbe79d69ac7 +size 19719