Simplified color picker
This commit is contained in:
parent
ef595153c9
commit
33545501f9
1 changed files with 27 additions and 19 deletions
|
@ -208,7 +208,24 @@ pub enum Alpha {
|
|||
BlendOrAdditive,
|
||||
}
|
||||
|
||||
fn color_text_ui(ui: &mut Ui, color: impl Into<Color32>) {
|
||||
let color = color.into();
|
||||
ui.horizontal(|ui| {
|
||||
let [r, g, b, a] = color.to_array();
|
||||
ui.label(format!(
|
||||
"RGBA (premultiplied): rgba({}, {}, {}, {})",
|
||||
r, g, b, a
|
||||
));
|
||||
|
||||
if ui.button("📋").on_hover_text("Click to copy").clicked {
|
||||
ui.output().copied_text = format!("rgba({}, {}, {}, {})", r, g, b, a);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
fn color_picker_hsvag_2d(ui: &mut Ui, hsva: &mut HsvaGamma, alpha: Alpha) {
|
||||
color_text_ui(ui, *hsva);
|
||||
|
||||
if alpha == Alpha::BlendOrAdditive {
|
||||
// We signal additive blending by storing a negative alpha (a bit ironic).
|
||||
let a = &mut hsva.a;
|
||||
|
@ -250,7 +267,7 @@ fn color_picker_hsvag_2d(ui: &mut Ui, hsva: &mut HsvaGamma, alpha: Alpha) {
|
|||
if alpha == Alpha::Opaque {
|
||||
hsva.a = 1.0;
|
||||
show_color(ui, *hsva, current_color_size);
|
||||
ui.label("Current color");
|
||||
ui.label("Selected color");
|
||||
ui.end_row();
|
||||
} else {
|
||||
let a = &mut hsva.a;
|
||||
|
@ -269,20 +286,15 @@ fn color_picker_hsvag_2d(ui: &mut Ui, hsva: &mut HsvaGamma, alpha: Alpha) {
|
|||
}
|
||||
|
||||
show_color(ui, *hsva, current_color_size);
|
||||
ui.label("Current color");
|
||||
ui.label("Selected color");
|
||||
ui.end_row();
|
||||
}
|
||||
|
||||
ui.separator(); // TODO: fix ever-expansion
|
||||
ui.end_row();
|
||||
|
||||
let HsvaGamma { h, s, v, a: _ } = hsva;
|
||||
|
||||
color_slider_2d(ui, h, s, |h, s| HsvaGamma::new(h, s, 1.0, 1.0).into());
|
||||
ui.label("Hue / Saturation");
|
||||
ui.end_row();
|
||||
|
||||
color_slider_2d(ui, v, s, |v, s| HsvaGamma { v, s, ..opaque }.into());
|
||||
ui.label("Value / Saturation");
|
||||
ui.end_row();
|
||||
|
||||
color_slider_1d(ui, h, |h| HsvaGamma { h, ..opaque }.into());
|
||||
ui.label("Hue");
|
||||
ui.end_row();
|
||||
|
@ -294,6 +306,10 @@ fn color_picker_hsvag_2d(ui: &mut Ui, hsva: &mut HsvaGamma, alpha: Alpha) {
|
|||
color_slider_1d(ui, v, |v| HsvaGamma { v, ..opaque }.into());
|
||||
ui.label("Value");
|
||||
ui.end_row();
|
||||
|
||||
color_slider_2d(ui, v, s, |v, s| HsvaGamma { v, s, ..opaque }.into());
|
||||
ui.label("Value / Saturation");
|
||||
ui.end_row();
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -366,20 +382,12 @@ struct HsvaGamma {
|
|||
pub h: f32,
|
||||
/// saturation 0-1
|
||||
pub s: f32,
|
||||
/// value 0-1, in gamma-space (perceptually even)
|
||||
/// value 0-1, in gamma-space (~perceptually even)
|
||||
pub v: f32,
|
||||
/// alpha 0-1. A negative value signifies an additive color (and alpha is ignored).
|
||||
pub a: f32,
|
||||
}
|
||||
|
||||
impl HsvaGamma {
|
||||
pub fn new(h: f32, s: f32, v: f32, a: f32) -> Self {
|
||||
Self { h, s, v, a }
|
||||
}
|
||||
}
|
||||
|
||||
// const GAMMA: f32 = 2.2;
|
||||
|
||||
impl From<HsvaGamma> for Rgba {
|
||||
fn from(hsvag: HsvaGamma) -> Rgba {
|
||||
Hsva::from(hsvag).into()
|
||||
|
|
Loading…
Reference in a new issue