Use linear colors in buffer to avoid patching glyphon
This commit is contained in:
parent
f901c17e70
commit
5ac267d228
2 changed files with 22 additions and 2 deletions
2
Cargo.lock
generated
2
Cargo.lock
generated
|
|
@ -1853,7 +1853,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "glyphon"
|
name = "glyphon"
|
||||||
version = "0.3.0"
|
version = "0.3.0"
|
||||||
source = "git+https://github.com/jackpot51/glyphon.git?branch=refactor#cd704e6bd5d0ddb815d08358766ad205fd70fada"
|
source = "git+https://github.com/jackpot51/glyphon.git?branch=refactor#c28dc99c86b6b598633e6623096b21632f266976"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cosmic-text",
|
"cosmic-text",
|
||||||
"etagere",
|
"etagere",
|
||||||
|
|
|
||||||
|
|
@ -96,6 +96,25 @@ fn convert_color(colors: &Colors, color: Color) -> cosmic_text::Color {
|
||||||
cosmic_text::Color::rgb(rgb.r, rgb.g, rgb.b)
|
cosmic_text::Color::rgb(rgb.r, rgb.g, rgb.b)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn linear_color(color: cosmic_text::Color) -> cosmic_text::Color {
|
||||||
|
// As described in: https://en.wikipedia.org/wiki/SRGB#The_reverse_transformation
|
||||||
|
fn linear_component(byte: u8) -> u8 {
|
||||||
|
let float = byte as f32 / 255.0;
|
||||||
|
let linear = if float < 0.04045 {
|
||||||
|
float / 12.92
|
||||||
|
} else {
|
||||||
|
((float + 0.055) / 1.055).powf(2.4)
|
||||||
|
};
|
||||||
|
(linear * 255.0).round() as u8
|
||||||
|
}
|
||||||
|
cosmic_text::Color::rgba(
|
||||||
|
linear_component(color.r()),
|
||||||
|
linear_component(color.g()),
|
||||||
|
linear_component(color.b()),
|
||||||
|
color.a(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
pub struct Terminal {
|
pub struct Terminal {
|
||||||
default_attrs: Attrs<'static>,
|
default_attrs: Attrs<'static>,
|
||||||
buffer: Arc<Buffer>,
|
buffer: Arc<Buffer>,
|
||||||
|
|
@ -443,7 +462,8 @@ impl Terminal {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
attrs = attrs.color(fg);
|
// Convert foreground to linear
|
||||||
|
attrs = attrs.color(linear_color(fg));
|
||||||
// Use metadata as background color
|
// Use metadata as background color
|
||||||
attrs = attrs.metadata(bg.0 as usize);
|
attrs = attrs.metadata(bg.0 as usize);
|
||||||
//TODO: more flags
|
//TODO: more flags
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue