You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
374 lines
14 KiB
374 lines
14 KiB
#include "main.h" |
|
|
|
static void |
|
_spinner_to_rect(Evas_Object *win) |
|
{ |
|
Elm_Object_Item *it; |
|
int r, g, b, a; |
|
|
|
elm_colorselector_color_get(evas_object_data_get(win, "pal_colorsel"), &r, &g, &b, &a); |
|
it = elm_genlist_selected_item_get(evas_object_data_get(win, "pal_class_list")); |
|
if (it) |
|
{ |
|
Elm_Palette_Color *col = elm_object_item_data_get(it); |
|
Elm_Palette *pal = evas_object_data_get(win, "pal"); |
|
|
|
undoredo_op_col_change(win, col->name, |
|
col->r, col->g, col->b, col->a, |
|
r, g, b, a); |
|
elm_config_palette_color_set(pal, col->name, r, g, b, a); |
|
col->r = r; |
|
col->g = g; |
|
col->b = b; |
|
col->a = a; |
|
elm_genlist_item_update(it); |
|
pal_save(win); |
|
palimg_update(evas_object_data_get(win, "pal_image"), pal); |
|
} |
|
evas_color_argb_premul(a, &r, &g, &b); |
|
evas_object_color_set(evas_object_data_get(win, "pal_color_rect"), r, g, b, a); |
|
} |
|
|
|
static void |
|
_spinner_to_colorsel_mirror(Evas_Object *win) |
|
{ |
|
int r, g, b, a; |
|
|
|
r = elm_spinner_value_get(evas_object_data_get(win, "pal_spin_int_r")); |
|
g = elm_spinner_value_get(evas_object_data_get(win, "pal_spin_int_g")); |
|
b = elm_spinner_value_get(evas_object_data_get(win, "pal_spin_int_b")); |
|
a = elm_spinner_value_get(evas_object_data_get(win, "pal_spin_int_a")); |
|
elm_colorselector_color_set(evas_object_data_get(win, "pal_colorsel"), r, g, b, a); |
|
} |
|
|
|
static void |
|
_spinner_to_entry_mirror(Evas_Object *win) |
|
{ |
|
int r, g, b, a; |
|
char buf[256]; |
|
|
|
elm_colorselector_color_get(evas_object_data_get(win, "pal_colorsel"), &r, &g, &b, &a); |
|
snprintf(buf, sizeof(buf), |
|
"#<+ backing=on backing_color=#0004>" |
|
"<+ color=#f54>%02x</>" |
|
"<+ color=#5f4>%02x</>" |
|
"<+ color=#45f>%02x</>" |
|
"<+ color=#888>%02x</>" |
|
"</>" |
|
, r, g, b, a); |
|
elm_object_text_set(evas_object_data_get(win, "pal_color_entry"), buf); |
|
} |
|
|
|
static void |
|
_spinner_to_spinner_mirror(Evas_Object *win) |
|
{ |
|
int r, g, b, a; |
|
int pr, pg, pb, pa; |
|
|
|
elm_colorselector_color_get(evas_object_data_get(win, "pal_colorsel"), &r, &g, &b, &a); |
|
pr = (r * 100) / 255; |
|
pg = (g * 100) / 255; |
|
pb = (b * 100) / 255; |
|
pa = (a * 100) / 255; |
|
elm_spinner_value_set(evas_object_data_get(win, "pal_spin_int_r"), r); |
|
elm_spinner_value_set(evas_object_data_get(win, "pal_spin_int_g"), g); |
|
elm_spinner_value_set(evas_object_data_get(win, "pal_spin_int_b"), b); |
|
elm_spinner_value_set(evas_object_data_get(win, "pal_spin_int_a"), a); |
|
elm_spinner_value_set(evas_object_data_get(win, "pal_spin_perc_r"), pr); |
|
elm_spinner_value_set(evas_object_data_get(win, "pal_spin_perc_g"), pg); |
|
elm_spinner_value_set(evas_object_data_get(win, "pal_spin_perc_b"), pb); |
|
elm_spinner_value_set(evas_object_data_get(win, "pal_spin_perc_a"), pa); |
|
} |
|
|
|
static void |
|
_cb_spinner_perc_changed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) |
|
{ |
|
Evas_Object *win = data; |
|
double val; |
|
int intval; |
|
|
|
val = elm_spinner_value_get(obj); |
|
intval = (val * 255.0) / 100.0; |
|
if (obj == evas_object_data_get(win, "pal_spin_perc_r")) |
|
elm_spinner_value_set(evas_object_data_get(win, "pal_spin_int_r"), intval); |
|
else if (obj == evas_object_data_get(win, "pal_spin_perc_g")) |
|
elm_spinner_value_set(evas_object_data_get(win, "pal_spin_int_g"), intval); |
|
else if (obj == evas_object_data_get(win, "pal_spin_perc_b")) |
|
elm_spinner_value_set(evas_object_data_get(win, "pal_spin_int_b"), intval); |
|
else if (obj == evas_object_data_get(win, "pal_spin_perc_a")) |
|
elm_spinner_value_set(evas_object_data_get(win, "pal_spin_int_a"), intval); |
|
_spinner_to_colorsel_mirror(win); |
|
_spinner_to_entry_mirror(win); |
|
_spinner_to_rect(win); |
|
} |
|
|
|
static void |
|
_cb_spinner_int_changed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) |
|
{ |
|
Evas_Object *win = data; |
|
double val; |
|
int intval; |
|
|
|
val = elm_spinner_value_get(obj); |
|
intval = (val * 100.0) / 255.0; |
|
if (obj == evas_object_data_get(win, "pal_spin_int_r")) |
|
elm_spinner_value_set(evas_object_data_get(win, "pal_spin_perc_r"), intval); |
|
else if (obj == evas_object_data_get(win, "pal_spin_int_g")) |
|
elm_spinner_value_set(evas_object_data_get(win, "pal_spin_perc_g"), intval); |
|
else if (obj == evas_object_data_get(win, "pal_spin_int_b")) |
|
elm_spinner_value_set(evas_object_data_get(win, "pal_spin_perc_b"), intval); |
|
else if (obj == evas_object_data_get(win, "pal_spin_int_a")) |
|
elm_spinner_value_set(evas_object_data_get(win, "pal_spin_perc_a"), intval); |
|
_spinner_to_colorsel_mirror(win); |
|
_spinner_to_entry_mirror(win); |
|
_spinner_to_rect(win); |
|
} |
|
|
|
static void |
|
_cb_colorsel_changed(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) |
|
{ |
|
Evas_Object *win = data; |
|
|
|
_spinner_to_spinner_mirror(win); |
|
_spinner_to_entry_mirror(win); |
|
_spinner_to_rect(win); |
|
} |
|
|
|
static void |
|
_colsel_entry_handle(Evas_Object *win, Evas_Object *entry, Eina_Bool activated) |
|
{ |
|
const char *markup = elm_object_text_get(entry); |
|
|
|
if (markup) |
|
{ |
|
char *plain = elm_entry_markup_to_utf8(markup); |
|
if (plain) |
|
{ |
|
char *p = plain; |
|
int r, g, b, a; |
|
|
|
if (p[0] == '#') p++; |
|
if (strlen(p) == 8) |
|
{ |
|
if (sscanf(p, "%02x%02x%02x%02x", &r, &g, &b, &a) == 4) |
|
{ |
|
elm_colorselector_color_set(evas_object_data_get(win, "pal_colorsel"), r, g, b, a); |
|
goto ok; |
|
} |
|
} |
|
else if (activated) |
|
{ |
|
if (strlen(p) == 6) |
|
{ |
|
if (sscanf(p, "%02x%02x%02x", &r, &g, &b) == 3) |
|
{ |
|
a = 255; |
|
elm_colorselector_color_set(evas_object_data_get(win, "pal_colorsel"), r, g, b, a); |
|
goto ok; |
|
} |
|
} |
|
else if (strlen(p) == 4) |
|
{ |
|
if (sscanf(p, "%01x%01x%01x%01x", &r, &g, &b, &a) == 4) |
|
{ |
|
r = (r << 4) | r; |
|
g = (g << 4) | g; |
|
b = (b << 4) | b; |
|
a = (a << 4) | a; |
|
elm_colorselector_color_set(evas_object_data_get(win, "pal_colorsel"), r, g, b, a); |
|
goto ok; |
|
} |
|
} |
|
else if (strlen(p) == 3) |
|
{ |
|
if (sscanf(p, "%01x%01x%01x", &r, &g, &b) == 3) |
|
{ |
|
r = (r << 4) | r; |
|
g = (g << 4) | g; |
|
b = (b << 4) | b; |
|
a = 255; |
|
elm_colorselector_color_set(evas_object_data_get(win, "pal_colorsel"), r, g, b, a); |
|
goto ok; |
|
} |
|
} |
|
} |
|
free(plain); |
|
} |
|
} |
|
return; |
|
ok: |
|
colsel_update(win); |
|
} |
|
|
|
static void |
|
_cb_color_entry_changed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) |
|
{ |
|
Evas_Object *win = data; |
|
|
|
_colsel_entry_handle(win, obj, EINA_FALSE); |
|
} |
|
|
|
static void |
|
_cb_color_entry_activated(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) |
|
{ |
|
Evas_Object *win = data; |
|
|
|
_colsel_entry_handle(win, obj, EINA_TRUE); |
|
} |
|
|
|
static void |
|
_colsel_row(Evas_Object *win, Evas_Object *tb, |
|
int row, |
|
int r, int g, int b, int a, |
|
const char *label, const char *name_percent, const char *name_int) |
|
{ |
|
Evas_Object *o, *sp; |
|
|
|
o = elm_label_add(win); |
|
elm_object_text_set(o, label); |
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0); |
|
evas_object_size_hint_fill_set(o, 0.0, EVAS_HINT_FILL); |
|
elm_table_pack(tb, o, 0, row, 1, 1); |
|
evas_object_show(o); |
|
|
|
o = evas_object_rectangle_add(evas_object_evas_get(win)); |
|
evas_object_color_set(o, r, g, b, a); |
|
evas_object_size_hint_min_set(o, ELM_SCALE_SIZE(15), ELM_SCALE_SIZE(15)); |
|
elm_table_pack(tb, o, 1, row, 1, 1); |
|
evas_object_show(o); |
|
|
|
// invisible spinner for just spacing the 2 cells with real spinners for |
|
// holding max possible vbalue and then some to avoid resizing due to font |
|
// changes mwith some digits causing sizing to go up |
|
sp = o = elm_spinner_add(win); |
|
elm_spinner_editable_set(o, EINA_TRUE); |
|
elm_spinner_label_format_set(o, "%1.0f%%"); |
|
elm_spinner_step_set(o, 1); |
|
elm_spinner_min_max_set(o, 0, 99999); |
|
elm_spinner_value_set(o, 99999); |
|
elm_table_pack(tb, o, 2, row, 1, 1); |
|
|
|
sp = o = elm_spinner_add(win); |
|
elm_spinner_editable_set(o, EINA_TRUE); |
|
elm_spinner_label_format_set(o, "%1.0f"); |
|
elm_spinner_step_set(o, 1); |
|
elm_spinner_min_max_set(o, 0, 99999); |
|
elm_spinner_value_set(o, 99999); |
|
elm_table_pack(tb, o, 3, row, 1, 1); |
|
|
|
sp = o = elm_spinner_add(win); |
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0); |
|
evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL); |
|
elm_spinner_editable_set(o, EINA_TRUE); |
|
elm_spinner_label_format_set(o, "%1.0f%%"); |
|
elm_spinner_step_set(o, 1); |
|
elm_spinner_min_max_set(sp, 0, 100); |
|
evas_object_smart_callback_add(o, "changed", _cb_spinner_perc_changed, win); |
|
elm_table_pack(tb, o, 2, row, 1, 1); |
|
evas_object_show(o); |
|
evas_object_data_set(win, name_percent, o); |
|
|
|
sp = o = elm_spinner_add(win); |
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0); |
|
evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL); |
|
elm_spinner_editable_set(o, EINA_TRUE); |
|
elm_spinner_label_format_set(o, "%1.0f"); |
|
elm_spinner_step_set(o, 1); |
|
elm_spinner_min_max_set(sp, 0, 255); |
|
evas_object_smart_callback_add(o, "changed", _cb_spinner_int_changed, win); |
|
elm_table_pack(tb, o, 3, row, 1, 1); |
|
evas_object_show(o); |
|
evas_object_data_set(win, name_int, o); |
|
} |
|
|
|
void |
|
colsel_update(Evas_Object *win) |
|
{ |
|
_spinner_to_spinner_mirror(win); |
|
_spinner_to_entry_mirror(win); |
|
_spinner_to_rect(win); |
|
} |
|
|
|
Evas_Object * |
|
colsel_add(Evas_Object *win) |
|
{ |
|
Evas_Object *o, *bxr, *tb2, *fr2, *fr; |
|
|
|
bxr = o = elm_box_add(win); |
|
elm_box_padding_set(o, 0, ELM_SCALE_SIZE(10)); |
|
elm_box_align_set(o, 0.5, 0.0); |
|
evas_object_size_hint_weight_set(o, 0.0, EVAS_HINT_EXPAND); |
|
evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL); |
|
|
|
fr = o = elm_frame_add(win); |
|
elm_object_style_set(o, "pad_small"); |
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0); |
|
evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL); |
|
elm_box_pack_end(bxr, o); |
|
evas_object_show(o); |
|
|
|
fr2 = o = elm_frame_add(win); |
|
elm_object_style_set(o, "outline"); |
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0); |
|
evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL); |
|
elm_object_content_set(fr, o); |
|
evas_object_show(o); |
|
|
|
tb2 = o = elm_table_add(win); |
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); |
|
evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL); |
|
elm_object_content_set(fr2, o); |
|
evas_object_show(o); |
|
|
|
o = elm_bg_add(win); |
|
elm_object_style_set(o, "checks_small"); |
|
evas_object_size_hint_min_set(o, ELM_SCALE_SIZE(80), ELM_SCALE_SIZE(60)); |
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); |
|
evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL); |
|
elm_table_pack(tb2, o, 0, 0, 1, 1); |
|
evas_object_show(o); |
|
elm_object_tooltip_text_set(o, "Sample of selected color"); |
|
|
|
o = evas_object_rectangle_add(evas_object_evas_get(win)); |
|
evas_object_size_hint_min_set(o, ELM_SCALE_SIZE(60), ELM_SCALE_SIZE(40)); |
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); |
|
evas_object_color_set(o, 128, 64, 0, 128); |
|
evas_object_pass_events_set(o, EINA_TRUE); |
|
elm_table_pack(tb2, o, 0, 0, 1, 1); |
|
evas_object_show(o); |
|
evas_object_data_set(win, "pal_color_rect", o); |
|
|
|
o = elm_colorselector_add(win); |
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0); |
|
evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL); |
|
evas_object_smart_callback_add(o, "changed", _cb_colorsel_changed, win); |
|
elm_box_pack_end(bxr, o); |
|
evas_object_show(o); |
|
evas_object_data_set(win, "pal_colorsel", o); |
|
|
|
o = elm_entry_add(win); |
|
elm_entry_single_line_set(o, EINA_TRUE); |
|
elm_entry_scrollable_set(o, EINA_TRUE); |
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0); |
|
evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL); |
|
evas_object_smart_callback_add(o, "changed,user", _cb_color_entry_changed, win); |
|
evas_object_smart_callback_add(o, "activated", _cb_color_entry_activated, win); |
|
elm_box_pack_end(bxr, o); |
|
evas_object_show(o); |
|
evas_object_data_set(win, "pal_color_entry", o); |
|
elm_object_tooltip_text_set(o, "Hex code for color. Just watch it change or type it in here to modify a color"); |
|
|
|
tb2 = o = elm_table_add(win); |
|
elm_table_padding_set(o, ELM_SCALE_SIZE(10), ELM_SCALE_SIZE(10)); |
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); |
|
evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, 0.0); |
|
elm_box_pack_end(bxr, o); |
|
evas_object_show(o); |
|
|
|
_colsel_row(win, tb2, 0, 255, 0, 0, 255, "Red", "pal_spin_perc_r", "pal_spin_int_r"); |
|
_colsel_row(win, tb2, 1, 0, 255, 0, 255, "Green", "pal_spin_perc_g", "pal_spin_int_g"); |
|
_colsel_row(win, tb2, 2, 0, 0, 255, 255, "Blue", "pal_spin_perc_b", "pal_spin_int_b"); |
|
_colsel_row(win, tb2, 3, 64, 64, 64, 128, "Alpha", "pal_spin_perc_a", "pal_spin_int_a"); |
|
|
|
return bxr; |
|
}
|
|
|