use eframe::egui::Color32;
use eframe::egui::ecolor::{gamma_u8_from_linear_f32, linear_f32_from_gamma_u8};
pub(crate) fn migrate_old_egui_color(old_color: Option<Color32>) -> Option<Color32> {
let [r, g, b, a] = old_color?.to_array();
if a == 0 || a == 255 {
return old_color;
}
let a_linear = a as f32 / 255.0;
let r_linear_premult = linear_f32_from_gamma_u8(r);
let g_linear_premult = linear_f32_from_gamma_u8(g);
let b_linear_premult = linear_f32_from_gamma_u8(b);
let r_linear_unmult = r_linear_premult / a_linear;
let g_linear_unmult = g_linear_premult / a_linear;
let b_linear_unmult = b_linear_premult / a_linear;
let r_gamma_unmult = gamma_u8_from_linear_f32(r_linear_unmult);
let g_gamma_unmult = gamma_u8_from_linear_f32(g_linear_unmult);
let b_gamma_unmult = gamma_u8_from_linear_f32(b_linear_unmult);
Some(Color32::from_rgba_unmultiplied(
r_gamma_unmult,
g_gamma_unmult,
b_gamma_unmult,
a,
))
}