fix: increase text contrast constraints for transparent surfaces
This commit is contained in:
parent
fb4628e460
commit
0ee5131670
2 changed files with 57 additions and 11 deletions
|
|
@ -1069,6 +1069,12 @@ impl ThemeBuilder {
|
||||||
} = self;
|
} = self;
|
||||||
|
|
||||||
let container_alpha = frosted.alpha();
|
let container_alpha = frosted.alpha();
|
||||||
|
let actual_alpha =
|
||||||
|
if (frosted_windows || frosted_system_interface || frosted_panel || frosted_applets) {
|
||||||
|
container_alpha
|
||||||
|
} else {
|
||||||
|
1.0
|
||||||
|
};
|
||||||
|
|
||||||
let is_dark = palette.is_dark();
|
let is_dark = palette.is_dark();
|
||||||
let is_high_contrast = palette.is_high_contrast();
|
let is_high_contrast = palette.is_high_contrast();
|
||||||
|
|
@ -1152,6 +1158,7 @@ impl ThemeBuilder {
|
||||||
&step_array,
|
&step_array,
|
||||||
&control_steps_array[8],
|
&control_steps_array[8],
|
||||||
text_steps_array.as_deref(),
|
text_steps_array.as_deref(),
|
||||||
|
actual_alpha,
|
||||||
);
|
);
|
||||||
|
|
||||||
let transparent_bg_component = get_surface_color(
|
let transparent_bg_component = get_surface_color(
|
||||||
|
|
@ -1166,6 +1173,7 @@ impl ThemeBuilder {
|
||||||
&transparent_bg_steps_array,
|
&transparent_bg_steps_array,
|
||||||
&control_steps_array[8],
|
&control_steps_array[8],
|
||||||
text_steps_array.as_deref(),
|
text_steps_array.as_deref(),
|
||||||
|
actual_alpha,
|
||||||
);
|
);
|
||||||
|
|
||||||
let primary = {
|
let primary = {
|
||||||
|
|
@ -1199,6 +1207,7 @@ impl ThemeBuilder {
|
||||||
&step_array,
|
&step_array,
|
||||||
&control_steps_array[8],
|
&control_steps_array[8],
|
||||||
text_steps_array.as_deref(),
|
text_steps_array.as_deref(),
|
||||||
|
container_alpha,
|
||||||
),
|
),
|
||||||
component_hovered_overlay,
|
component_hovered_overlay,
|
||||||
component_pressed_overlay,
|
component_pressed_overlay,
|
||||||
|
|
@ -1211,6 +1220,7 @@ impl ThemeBuilder {
|
||||||
&step_array,
|
&step_array,
|
||||||
&control_steps_array[8],
|
&control_steps_array[8],
|
||||||
text_steps_array.as_deref(),
|
text_steps_array.as_deref(),
|
||||||
|
container_alpha,
|
||||||
),
|
),
|
||||||
get_small_widget_color(base_index, 5, &neutral_steps, &control_steps_array[6]),
|
get_small_widget_color(base_index, 5, &neutral_steps, &control_steps_array[6]),
|
||||||
is_high_contrast,
|
is_high_contrast,
|
||||||
|
|
@ -1238,6 +1248,7 @@ impl ThemeBuilder {
|
||||||
&step_array,
|
&step_array,
|
||||||
&control_steps_array[8],
|
&control_steps_array[8],
|
||||||
text_steps_array.as_deref(),
|
text_steps_array.as_deref(),
|
||||||
|
actual_alpha,
|
||||||
),
|
),
|
||||||
Srgba::new(0., 0., 0., 0.0),
|
Srgba::new(0., 0., 0., 0.0),
|
||||||
Srgba::new(0., 0., 0., 0.0),
|
Srgba::new(0., 0., 0., 0.0),
|
||||||
|
|
@ -1250,6 +1261,7 @@ impl ThemeBuilder {
|
||||||
&step_array,
|
&step_array,
|
||||||
&control_steps_array[8],
|
&control_steps_array[8],
|
||||||
text_steps_array.as_deref(),
|
text_steps_array.as_deref(),
|
||||||
|
actual_alpha,
|
||||||
),
|
),
|
||||||
get_small_widget_color(base_index, 5, &neutral_steps, &control_steps_array[6]),
|
get_small_widget_color(base_index, 5, &neutral_steps, &control_steps_array[6]),
|
||||||
is_high_contrast,
|
is_high_contrast,
|
||||||
|
|
@ -1323,6 +1335,7 @@ impl ThemeBuilder {
|
||||||
&step_array,
|
&step_array,
|
||||||
&control_steps_array[8],
|
&control_steps_array[8],
|
||||||
text_steps_array.as_deref(),
|
text_steps_array.as_deref(),
|
||||||
|
actual_alpha,
|
||||||
),
|
),
|
||||||
get_small_widget_color(bg_index, 5, &neutral_steps, &control_steps_array[6]),
|
get_small_widget_color(bg_index, 5, &neutral_steps, &control_steps_array[6]),
|
||||||
is_high_contrast,
|
is_high_contrast,
|
||||||
|
|
@ -1359,6 +1372,7 @@ impl ThemeBuilder {
|
||||||
&step_array,
|
&step_array,
|
||||||
&control_steps_array[8],
|
&control_steps_array[8],
|
||||||
text_steps_array.as_deref(),
|
text_steps_array.as_deref(),
|
||||||
|
actual_alpha,
|
||||||
),
|
),
|
||||||
component_hovered_overlay,
|
component_hovered_overlay,
|
||||||
component_pressed_overlay,
|
component_pressed_overlay,
|
||||||
|
|
@ -1371,6 +1385,7 @@ impl ThemeBuilder {
|
||||||
&step_array,
|
&step_array,
|
||||||
&control_steps_array[8],
|
&control_steps_array[8],
|
||||||
text_steps_array.as_deref(),
|
text_steps_array.as_deref(),
|
||||||
|
actual_alpha,
|
||||||
),
|
),
|
||||||
get_small_widget_color(base_index, 5, &neutral_steps, &control_steps_array[6]),
|
get_small_widget_color(base_index, 5, &neutral_steps, &control_steps_array[6]),
|
||||||
is_high_contrast,
|
is_high_contrast,
|
||||||
|
|
@ -1383,14 +1398,24 @@ impl ThemeBuilder {
|
||||||
button_hovered_overlay,
|
button_hovered_overlay,
|
||||||
button_pressed_overlay,
|
button_pressed_overlay,
|
||||||
),
|
),
|
||||||
accent_button: Component::colored_button(
|
accent_button: {
|
||||||
accent,
|
let step_array = steps(control_steps_array[5], NonZeroUsize::new(100).unwrap());
|
||||||
control_steps_array[1],
|
|
||||||
control_steps_array[0],
|
Component::colored_button(
|
||||||
accent,
|
accent,
|
||||||
button_hovered_overlay,
|
control_steps_array[1],
|
||||||
button_pressed_overlay,
|
get_text(
|
||||||
),
|
color_index(accent, step_array.len()),
|
||||||
|
&step_array,
|
||||||
|
&step_array[0],
|
||||||
|
text_steps_array.as_deref(),
|
||||||
|
1., // accent is opaque anyway
|
||||||
|
),
|
||||||
|
accent,
|
||||||
|
button_hovered_overlay,
|
||||||
|
button_pressed_overlay,
|
||||||
|
)
|
||||||
|
},
|
||||||
button: Component::component(
|
button: Component::component(
|
||||||
button_bg,
|
button_bg,
|
||||||
accent,
|
accent,
|
||||||
|
|
@ -1518,6 +1543,7 @@ impl ThemeBuilder {
|
||||||
&transparent_bg_steps_array,
|
&transparent_bg_steps_array,
|
||||||
&control_steps_array[8],
|
&control_steps_array[8],
|
||||||
text_steps_array.as_deref(),
|
text_steps_array.as_deref(),
|
||||||
|
actual_alpha,
|
||||||
),
|
),
|
||||||
get_small_widget_color(bg_index, 5, &neutral_steps, &control_steps_array[6]),
|
get_small_widget_color(bg_index, 5, &neutral_steps, &control_steps_array[6]),
|
||||||
is_high_contrast,
|
is_high_contrast,
|
||||||
|
|
@ -1546,6 +1572,7 @@ impl ThemeBuilder {
|
||||||
&step_array,
|
&step_array,
|
||||||
&control_steps_array[8],
|
&control_steps_array[8],
|
||||||
text_steps_array.as_deref(),
|
text_steps_array.as_deref(),
|
||||||
|
actual_alpha,
|
||||||
),
|
),
|
||||||
Srgba::new(0., 0., 0., 0.0),
|
Srgba::new(0., 0., 0., 0.0),
|
||||||
Srgba::new(0., 0., 0., 0.0),
|
Srgba::new(0., 0., 0., 0.0),
|
||||||
|
|
@ -1558,6 +1585,7 @@ impl ThemeBuilder {
|
||||||
&step_array,
|
&step_array,
|
||||||
&control_steps_array[8],
|
&control_steps_array[8],
|
||||||
text_steps_array.as_deref(),
|
text_steps_array.as_deref(),
|
||||||
|
actual_alpha,
|
||||||
),
|
),
|
||||||
get_small_widget_color(base_index, 5, &neutral_steps, &control_steps_array[6]),
|
get_small_widget_color(base_index, 5, &neutral_steps, &control_steps_array[6]),
|
||||||
is_high_contrast,
|
is_high_contrast,
|
||||||
|
|
|
||||||
|
|
@ -81,6 +81,7 @@ pub fn get_text(
|
||||||
step_array: &[Srgba],
|
step_array: &[Srgba],
|
||||||
fallback: &Srgba,
|
fallback: &Srgba,
|
||||||
tint_array: Option<&[Srgba]>,
|
tint_array: Option<&[Srgba]>,
|
||||||
|
alpha: f32,
|
||||||
) -> Srgba {
|
) -> Srgba {
|
||||||
assert!(step_array.len() == 100);
|
assert!(step_array.len() == 100);
|
||||||
let step_array = if let Some(tint_array) = tint_array {
|
let step_array = if let Some(tint_array) = tint_array {
|
||||||
|
|
@ -90,11 +91,28 @@ pub fn get_text(
|
||||||
step_array
|
step_array
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let alpha_extra_steps = if alpha < 1.0 {
|
||||||
|
((1. - alpha) * 100.0).round() as usize
|
||||||
|
} else {
|
||||||
|
0
|
||||||
|
};
|
||||||
let is_dark = base_index < 60;
|
let is_dark = base_index < 60;
|
||||||
|
|
||||||
let index = get_index(base_index, 70, step_array.len(), is_dark)
|
let index = get_index(
|
||||||
.or_else(|| get_index(base_index, 50, step_array.len(), is_dark))
|
base_index,
|
||||||
.unwrap_or(if is_dark { 99 } else { 0 });
|
70 + alpha_extra_steps,
|
||||||
|
step_array.len(),
|
||||||
|
is_dark,
|
||||||
|
)
|
||||||
|
.or_else(|| {
|
||||||
|
get_index(
|
||||||
|
base_index,
|
||||||
|
50 + alpha_extra_steps,
|
||||||
|
step_array.len(),
|
||||||
|
is_dark,
|
||||||
|
)
|
||||||
|
})
|
||||||
|
.unwrap_or(if is_dark { 99 } else { 0 });
|
||||||
|
|
||||||
*step_array.get(index).unwrap_or(fallback)
|
*step_array.get(index).unwrap_or(fallback)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue