mirror of
https://github.com/alexpasmantier/television.git
synced 2025-07-24 19:10:01 +00:00
fix: Clean up transparency background handling, apply linting and formatting
This commit is contained in:
parent
f8e0128d5e
commit
0e00a23f6c
@ -108,33 +108,8 @@ pub fn convert_pixel_to_span<'a>(
|
|||||||
let color_up = color_up.0;
|
let color_up = color_up.0;
|
||||||
let color_down = color_down.0;
|
let color_down = color_down.0;
|
||||||
|
|
||||||
let color_up = if color_up[3] != 255 {
|
let color_up = blend_with_background(color_up, position, 0);
|
||||||
// choose the good color for the background if transparent
|
let color_down = blend_with_background(color_down, position, 1);
|
||||||
if (position.0 + position.1 * 2) % 2 == 0 {
|
|
||||||
let mut white = WHITE.clone();
|
|
||||||
white.blend(&Rgba::from(color_up));
|
|
||||||
white
|
|
||||||
} else {
|
|
||||||
let mut gray = GRAY.clone();
|
|
||||||
gray.blend(&Rgba::from(color_up));
|
|
||||||
gray
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Rgba::from(color_up)
|
|
||||||
};
|
|
||||||
let color_down = if color_down[3] != 255 {
|
|
||||||
if (position.0 + position.1 * 2 + 1) % 2 == 0 {
|
|
||||||
let mut white = WHITE.clone();
|
|
||||||
white.blend(&Rgba::from(color_down));
|
|
||||||
white
|
|
||||||
} else {
|
|
||||||
let mut gray = GRAY.clone();
|
|
||||||
gray.blend(&Rgba::from(color_down));
|
|
||||||
gray
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Rgba::from(color_down)
|
|
||||||
};
|
|
||||||
|
|
||||||
let color_up = convert_image_color_to_ratatui_color(color_up);
|
let color_up = convert_image_color_to_ratatui_color(color_up);
|
||||||
let color_down = convert_image_color_to_ratatui_color(color_down);
|
let color_down = convert_image_color_to_ratatui_color(color_down);
|
||||||
@ -143,6 +118,21 @@ pub fn convert_pixel_to_span<'a>(
|
|||||||
Span::styled(String::from(PIXEL), style)
|
Span::styled(String::from(PIXEL), style)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn blend_with_background(
|
||||||
|
color: impl Into<Rgba<u8>>,
|
||||||
|
position: (usize, usize),
|
||||||
|
offset: usize,
|
||||||
|
) -> Rgba<u8> {
|
||||||
|
let color = color.into();
|
||||||
|
if color[3] == 255 {
|
||||||
|
color
|
||||||
|
} else {
|
||||||
|
let is_white = (position.0 + position.1 * 2 + offset) % 2 == 0;
|
||||||
|
let mut base = if is_white { WHITE } else { GRAY };
|
||||||
|
base.blend(&color);
|
||||||
|
base
|
||||||
|
}
|
||||||
|
}
|
||||||
fn convert_image_color_to_ratatui_color(color: Rgba<u8>) -> Color {
|
fn convert_image_color_to_ratatui_color(color: Rgba<u8>) -> Color {
|
||||||
Color::Rgb(color[0], color[1], color[2])
|
Color::Rgb(color[0], color[1], color[2])
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user