feat(engine): reduce-transparency + high-contrast support for glass chrome
New Settings::reduce_transparency_mode (serde-default, Accessibility toggle row) swaps every GlassSurface's gradients for a flat opaque BG_ELEVATED fill; high-contrast mode now also boosts the glass fill opacity and rim luminance to BORDER_SUBTLE_HC levels. Both applied by settings_plugin::update_glass_surfaces, which retargets the gradients in place on toggle or on newly spawned glass. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -9,8 +9,10 @@ use crate::font_plugin::FontResource;
|
||||
use crate::progress_plugin::ProgressResource;
|
||||
use crate::resources::{SettingsScrollPos, SyncStatus, SyncStatusResource};
|
||||
use crate::theme::ThemeThumbnailCache;
|
||||
use crate::ui_glass::{GlassSurface, glass_decorations};
|
||||
use crate::ui_modal::ModalScrim;
|
||||
use crate::ui_theme::{BORDER_SUBTLE_HC, HighContrastBackground, HighContrastBorder};
|
||||
use bevy::ui::{BackgroundGradient, BorderGradient};
|
||||
|
||||
/// Spawns the Settings panel when `SettingsScreen` becomes `true`;
|
||||
/// despawns it when it becomes `false`.
|
||||
@@ -330,6 +332,41 @@ pub(super) fn update_reduce_motion_text(
|
||||
}
|
||||
}
|
||||
|
||||
pub(super) fn update_reduce_transparency_text(
|
||||
settings: Res<SettingsResource>,
|
||||
mut text_nodes: Query<&mut Text, With<ReduceTransparencyText>>,
|
||||
) {
|
||||
if !settings.is_changed() {
|
||||
return;
|
||||
}
|
||||
for mut text in &mut text_nodes {
|
||||
**text = on_off_label(settings.0.reduce_transparency_mode);
|
||||
}
|
||||
}
|
||||
|
||||
/// Retargets every [`GlassSurface`]'s sheen + rim gradients when the
|
||||
/// reduce-transparency or high-contrast toggles change. Runs on
|
||||
/// `SettingsResource` change and on newly added surfaces (so glass
|
||||
/// spawned after startup picks up an already-active toggle). Parallel to
|
||||
/// [`update_high_contrast_borders`]: same trigger, different components.
|
||||
pub(super) fn update_glass_surfaces(
|
||||
settings: Res<SettingsResource>,
|
||||
mut surfaces: Query<(&mut BackgroundGradient, &mut BorderGradient), With<GlassSurface>>,
|
||||
added: Query<(), Added<GlassSurface>>,
|
||||
) {
|
||||
if !settings.is_changed() && added.is_empty() {
|
||||
return;
|
||||
}
|
||||
let (sheen, rim) = glass_decorations(
|
||||
settings.0.reduce_transparency_mode,
|
||||
settings.0.high_contrast_mode,
|
||||
);
|
||||
for (mut s, mut r) in &mut surfaces {
|
||||
*s = sheen.clone();
|
||||
*r = rim.clone();
|
||||
}
|
||||
}
|
||||
|
||||
pub(super) fn update_touch_input_mode_text(
|
||||
settings: Res<SettingsResource>,
|
||||
mut text_nodes: Query<&mut Text, With<TouchInputModeText>>,
|
||||
|
||||
Reference in New Issue
Block a user