use conrod_core as conrod;
use plotters_backend::BackendColor;
pub(crate) struct Color(conrod::color::Color);
impl From<&BackendColor> for Color {
#[inline(always)]
fn from(item: &BackendColor) -> Self {
let ((r, g, b), a) = (item.rgb, item.alpha);
Self(conrod::color::Color::Rgba(
r as f32 / 255.0,
g as f32 / 255.0,
b as f32 / 255.0,
Self::gamma_srgb_to_linear(a as f32),
))
}
}
impl Into<conrod::color::Color> for Color {
#[inline(always)]
fn into(self) -> conrod::color::Color {
self.0
}
}
impl Color {
#[inline(always)]
fn gamma_srgb_to_linear(f: f32) -> f32 {
if f <= 0.04045 {
f / 12.92
} else {
((f + 0.055) / 1.055).powf(2.4)
}
}
}