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,
|
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) {
|
fn color_picker_hsvag_2d(ui: &mut Ui, hsva: &mut HsvaGamma, alpha: Alpha) {
|
||||||
|
color_text_ui(ui, *hsva);
|
||||||
|
|
||||||
if alpha == Alpha::BlendOrAdditive {
|
if alpha == Alpha::BlendOrAdditive {
|
||||||
// We signal additive blending by storing a negative alpha (a bit ironic).
|
// We signal additive blending by storing a negative alpha (a bit ironic).
|
||||||
let a = &mut hsva.a;
|
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 {
|
if alpha == Alpha::Opaque {
|
||||||
hsva.a = 1.0;
|
hsva.a = 1.0;
|
||||||
show_color(ui, *hsva, current_color_size);
|
show_color(ui, *hsva, current_color_size);
|
||||||
ui.label("Current color");
|
ui.label("Selected color");
|
||||||
ui.end_row();
|
ui.end_row();
|
||||||
} else {
|
} else {
|
||||||
let a = &mut hsva.a;
|
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);
|
show_color(ui, *hsva, current_color_size);
|
||||||
ui.label("Current color");
|
ui.label("Selected color");
|
||||||
ui.end_row();
|
ui.end_row();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ui.separator(); // TODO: fix ever-expansion
|
||||||
|
ui.end_row();
|
||||||
|
|
||||||
let HsvaGamma { h, s, v, a: _ } = hsva;
|
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());
|
color_slider_1d(ui, h, |h| HsvaGamma { h, ..opaque }.into());
|
||||||
ui.label("Hue");
|
ui.label("Hue");
|
||||||
ui.end_row();
|
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());
|
color_slider_1d(ui, v, |v| HsvaGamma { v, ..opaque }.into());
|
||||||
ui.label("Value");
|
ui.label("Value");
|
||||||
ui.end_row();
|
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,
|
pub h: f32,
|
||||||
/// saturation 0-1
|
/// saturation 0-1
|
||||||
pub s: f32,
|
pub s: f32,
|
||||||
/// value 0-1, in gamma-space (perceptually even)
|
/// value 0-1, in gamma-space (~perceptually even)
|
||||||
pub v: f32,
|
pub v: f32,
|
||||||
/// alpha 0-1. A negative value signifies an additive color (and alpha is ignored).
|
/// alpha 0-1. A negative value signifies an additive color (and alpha is ignored).
|
||||||
pub a: f32,
|
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 {
|
impl From<HsvaGamma> for Rgba {
|
||||||
fn from(hsvag: HsvaGamma) -> Rgba {
|
fn from(hsvag: HsvaGamma) -> Rgba {
|
||||||
Hsva::from(hsvag).into()
|
Hsva::from(hsvag).into()
|
||||||
|
|
Loading…
Reference in a new issue