forked from enlightenment/efl
elm config - replace old colorclass systme with newer pallete one
the old one was a bit... rough. the new one relies on the new fallback to parent classes in edje to simplify colorclasses and can now apply immediately. i've started on a palette editor gui - and it works relatively well and applies live as you slide colors around. it looks vaguely good too. i don't thnk we should hsave a widget to do this as it's probably too much in elementary (the lib) that is far too niche in use.
This commit is contained in:
parent
64e02a0413
commit
4e70c3f358
|
@ -14,6 +14,8 @@ EAPI void __efl_internal_elm_config_set(Efl_Config *cfg);
|
|||
Elm_Config *_elm_config = NULL;
|
||||
Efl_Config *_efl_config_obj = NULL;
|
||||
static char *_elm_profile = NULL;
|
||||
static Eet_Data_Descriptor *_config_palette_color_edd = NULL;
|
||||
static Eet_Data_Descriptor *_config_palette_edd = NULL;
|
||||
static Eet_Data_Descriptor *_config_edd = NULL;
|
||||
static Eet_Data_Descriptor *_config_font_overlay_edd = NULL;
|
||||
static Eet_Data_Descriptor *_config_color_edd = NULL;
|
||||
|
@ -94,91 +96,6 @@ static const Elm_Text_Class _elm_text_classes[] = {
|
|||
{NULL, NULL}
|
||||
};
|
||||
|
||||
/* whenever you want to add a new class class support into Elementary,
|
||||
declare it both here and in the (default) theme */
|
||||
static const Elm_Color_Class _elm_color_classes[] = {
|
||||
{"button_text", "Button Text"},
|
||||
{"button_text_disabled", "Button Disabled Text"},
|
||||
{"button_text_anchor", "Anchor Button Text"},
|
||||
{"button_text_anchor_disabled", "Anchor Button Disabled Text"},
|
||||
{"calendar_year_text", "Year Text in Title Area"},
|
||||
{"calendar_month_text", "Month Text in Title Area"},
|
||||
{"calendar_weekday_text", "Weekday Text"},
|
||||
{"calendar_day_text", "Day Text"},
|
||||
{"calendar_day_text_holiday", "Holiday Text"},
|
||||
{"calendar_day_text_today", "Today Text"},
|
||||
{"calendar_day_text_disabled", "Disabled Day Text"},
|
||||
{"calendar_day_selected", "Selected Day Effect"},
|
||||
{"calendar_day_highlighted", "Highlighted Day Effect"},
|
||||
{"calendar_day_checked", "Checked Day Effect"},
|
||||
{"datetime_bg", "Datetime Background"},
|
||||
{"datepicker_bg", "Datepicker Background"},
|
||||
{"timepicker_bg", "Timepicker Background"},
|
||||
{"datetime_separator_text", "Datetime Separator Text"},
|
||||
{"datetime_separator_text_disabled", "Datetime Separator Disabled Text"},
|
||||
{"hoversel_item_active", "Hoversel Item Text"},
|
||||
{"hoversel_text_disabled", "Hoversel Item Disabled Text"},
|
||||
{"radio_text", "Radio Text"},
|
||||
{"frame", "Frame Text"},
|
||||
{"entry_text", "Entry Text"},
|
||||
{"entry_text_disabled", "Entry Disabled Text"},
|
||||
{"entry_guide_text", "Entry Guide Text"},
|
||||
{"entry_cursor", "Entry Cursor"},
|
||||
{"entry_selection_handler", "Entry Selection Handler"},
|
||||
{"entry_scrollframe_base", "Entry Scrollframe Base"},
|
||||
{"check_text", "Check Text"},
|
||||
{"check_on_text", "Check On Text"},
|
||||
{"check_off_text", "Check Off Text"},
|
||||
{"list_item_base", "List Item Base"},
|
||||
{"list_item_base_odd", "List Odd Item Base"},
|
||||
{"list_item_disabled", "List Item Disabled Base"},
|
||||
{"list_item_selected", "List Item Selected Base"},
|
||||
{"grid_item", "Grid Item Text"},
|
||||
{"grid_item_disabled", "Grid Item Disabled Text"},
|
||||
{"grid_item_selected", "Grid Item Selected Text"},
|
||||
{"index_bg", "Index Background"},
|
||||
{"index_item_bg", "Index Item Background"},
|
||||
{"index_highlight_text", "Index Highlight Text"},
|
||||
{"index_item_text", "Index Items Text"},
|
||||
{"index_item_text_selected", "Index Selected Items Text"},
|
||||
{"toolbar_item", "Toolbar Item Text"},
|
||||
{"toolbar_item_disabled", "Toolbar Item Disabled Text"},
|
||||
{"toolbar_item_selected", "Toolbar Item Selected Text"},
|
||||
{"toolbar_item_active", "Toolbar Item Active Text"},
|
||||
{"slider_text", "Slider Text"},
|
||||
{"slider_text_disabled", "Slider Disabled Text"},
|
||||
{"slider_indicator", "Slider Indicator Text"},
|
||||
{"spinner_bg", "Spinner Background"},
|
||||
{"progressbar_text", "Progressbar Text"},
|
||||
{"progressbar_text_disabled", "Progressbar Disabled Text"},
|
||||
{"progressbar_status", "Progressbar Status Text"},
|
||||
{"bubble_text", "Bubble Text"},
|
||||
{"bubble_info", "Bubble Info Text"},
|
||||
{"menu_item_active", "Menu Item Text"},
|
||||
{"menu_item_disabled", "Menu Item Disabled Text"},
|
||||
{"multibuttonentry_bg", "Multibuttonentry Background"},
|
||||
{"multibuttonentry_item_bg", "Multibuttonentry Item Background"},
|
||||
{"multibuttonentry_item_bg_selected", "Multibuttonentry Item Selected Background"},
|
||||
{"multibuttonentry_item_text", "Multibuttonentry Item Text"},
|
||||
{"multibuttonentry_item_text_pressed", "Multibuttonentry Item Pressed Text"},
|
||||
{"multibuttonentry_item_text_disabled", "Multibuttonentry Item Disabled Text"},
|
||||
{"tags_bg", "Tags Background"},
|
||||
{"tags_item_bg", "Tags Item Background"},
|
||||
{"tags_item_bg_selected", "Tags Item Selected Background"},
|
||||
{"tags_item_text", "Tags Item Text"},
|
||||
{"tags_item_text_pressed", "Tags Item Pressed Text"},
|
||||
{"tags_item_text_disabled", "Tags Item Disabled Text"},
|
||||
{"border_title", "Border Title Text"},
|
||||
{"border_title_active", "Border Title Active Text"},
|
||||
{"datetime_text", "Datetime Text"},
|
||||
{"multibuttonentry_label", "Multibuttonentry Text"},
|
||||
{"tags_label", "Tags Text"},
|
||||
{"tags_number", "Tags Number Text"},
|
||||
{"spinner", "Spinner Text"},
|
||||
{"spinner_disabled", "Spinner Disabled Text"},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
static void _config_free(Elm_Config *cfg);
|
||||
static void _config_apply(void);
|
||||
static void _config_sub_apply(void);
|
||||
|
@ -215,6 +132,32 @@ _desc_init(void)
|
|||
{
|
||||
Eet_Data_Descriptor_Class eddc;
|
||||
|
||||
memset(&eddc, 0, sizeof(eddc)); /* just in case... */
|
||||
EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Elm_Palette_Color);
|
||||
eddc.func.str_direct_alloc = NULL;
|
||||
eddc.func.str_direct_free = NULL;
|
||||
|
||||
_config_palette_color_edd = eet_data_descriptor_stream_new(&eddc);
|
||||
if (!_config_palette_color_edd)
|
||||
{
|
||||
ERR("EEEK! eet_data_descriptor_stream_new() failed.");
|
||||
return;
|
||||
}
|
||||
|
||||
memset(&eddc, 0, sizeof(eddc)); /* just in case... */
|
||||
EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Elm_Palette);
|
||||
eddc.func.str_direct_alloc = NULL;
|
||||
eddc.func.str_direct_free = NULL;
|
||||
|
||||
_config_palette_edd = eet_data_descriptor_stream_new(&eddc);
|
||||
if (!_config_palette_edd)
|
||||
{
|
||||
ERR("EEEK! eet_data_descriptor_stream_new() failed.");
|
||||
eet_data_descriptor_free(_config_palette_color_edd);
|
||||
return;
|
||||
}
|
||||
|
||||
memset(&eddc, 0, sizeof(eddc)); /* just in case... */
|
||||
EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Elm_Config);
|
||||
eddc.func.str_direct_alloc = NULL;
|
||||
eddc.func.str_direct_free = NULL;
|
||||
|
@ -322,8 +265,29 @@ _desc_init(void)
|
|||
#define T_STRING EET_T_STRING
|
||||
#define T_UCHAR EET_T_UCHAR
|
||||
|
||||
#define T Elm_Font_Overlay
|
||||
#define D _config_font_overlay_edd
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define T Elm_Palette_Color
|
||||
#define D _config_palette_color_edd
|
||||
ELM_CONFIG_VAL(D, T, name, EET_T_STRING);
|
||||
ELM_CONFIG_VAL(D, T, r, EET_T_UCHAR);
|
||||
ELM_CONFIG_VAL(D, T, g, EET_T_UCHAR);
|
||||
ELM_CONFIG_VAL(D, T, b, EET_T_UCHAR);
|
||||
ELM_CONFIG_VAL(D, T, a, EET_T_UCHAR);
|
||||
#undef T
|
||||
#undef D
|
||||
|
||||
#define T Elm_Palette
|
||||
#define D _config_palette_edd
|
||||
ELM_CONFIG_VAL(D, T, version, EET_T_INT);
|
||||
ELM_CONFIG_LIST(D, T, colors, _config_palette_color_edd);
|
||||
#undef T
|
||||
#undef D
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define T Elm_Font_Overlay
|
||||
#define D _config_font_overlay_edd
|
||||
ELM_CONFIG_VAL(D, T, text_class, EET_T_STRING);
|
||||
ELM_CONFIG_VAL(D, T, font, EET_T_STRING);
|
||||
ELM_CONFIG_VAL(D, T, size, EET_T_INT);
|
||||
|
@ -364,15 +328,15 @@ _desc_init(void)
|
|||
#undef T
|
||||
#undef D
|
||||
|
||||
#define T Elm_Config_Bindings_Widget
|
||||
#define D _config_bindings_widget_edd
|
||||
#define T Elm_Config_Bindings_Widget
|
||||
#define D _config_bindings_widget_edd
|
||||
ELM_CONFIG_VAL(D, T, name, EET_T_STRING);
|
||||
ELM_CONFIG_LIST(D, T, key_bindings, _config_binding_key_edd);
|
||||
#undef T
|
||||
#undef D
|
||||
|
||||
#define T Elm_Config_Binding_Key
|
||||
#define D _config_binding_key_edd
|
||||
#define T Elm_Config_Binding_Key
|
||||
#define D _config_binding_key_edd
|
||||
ELM_CONFIG_VAL(D, T, context, EET_T_INT);
|
||||
ELM_CONFIG_VAL(D, T, key, EET_T_STRING);
|
||||
ELM_CONFIG_VAL(D, T, action, EET_T_STRING);
|
||||
|
@ -381,8 +345,8 @@ _desc_init(void)
|
|||
#undef T
|
||||
#undef D
|
||||
|
||||
#define T Elm_Config_Binding_Modifier
|
||||
#define D _config_binding_modifier_edd
|
||||
#define T Elm_Config_Binding_Modifier
|
||||
#define D _config_binding_modifier_edd
|
||||
ELM_CONFIG_VAL(D, T, mod, EET_T_STRING);
|
||||
ELM_CONFIG_VAL(D, T, flag, EET_T_UCHAR);
|
||||
#undef T
|
||||
|
@ -526,6 +490,7 @@ _desc_init(void)
|
|||
ELM_CONFIG_VAL(D, T, popup_scrollable, T_UCHAR);
|
||||
ELM_CONFIG_VAL(D, T, spinner_min_max_filter_enable, T_UCHAR);
|
||||
ELM_CONFIG_VAL(D, T, icon_theme, T_STRING);
|
||||
ELM_CONFIG_VAL(D, T, palette, T_STRING);
|
||||
ELM_CONFIG_VAL(D, T, entry_select_allow, T_UCHAR);
|
||||
ELM_CONFIG_VAL(D, T, offline, T_UCHAR);
|
||||
ELM_CONFIG_VAL(D, T, powersave, T_INT);
|
||||
|
@ -542,10 +507,16 @@ _desc_init(void)
|
|||
static void
|
||||
_desc_shutdown(void)
|
||||
{
|
||||
if (_config_edd)
|
||||
if (_config_palette_edd)
|
||||
{
|
||||
eet_data_descriptor_free(_config_edd);
|
||||
_config_edd = NULL;
|
||||
eet_data_descriptor_free(_config_palette_edd);
|
||||
_config_palette_edd = NULL;
|
||||
}
|
||||
|
||||
if (_config_palette_color_edd)
|
||||
{
|
||||
eet_data_descriptor_free(_config_palette_color_edd);
|
||||
_config_palette_color_edd = NULL;
|
||||
}
|
||||
|
||||
if (_config_font_overlay_edd)
|
||||
|
@ -629,6 +600,262 @@ end:
|
|||
return off;
|
||||
}
|
||||
|
||||
static Elm_Palette *
|
||||
_palette_load(const char *file)
|
||||
{
|
||||
Elm_Palette *pal;
|
||||
Eet_File *ef = eet_open(file, EET_FILE_MODE_READ);
|
||||
|
||||
if (!ef) return NULL;
|
||||
pal = eet_data_read(ef, _config_palette_edd, "palette");
|
||||
eet_close(ef);
|
||||
return pal;
|
||||
}
|
||||
|
||||
static void
|
||||
_palette_free(Elm_Palette *pal)
|
||||
{
|
||||
Elm_Palette_Color *col;
|
||||
|
||||
EINA_LIST_FREE(pal->colors, col)
|
||||
{
|
||||
eina_stringshare_del(col->name);
|
||||
free(col);
|
||||
}
|
||||
free(pal);
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_palette_save(Elm_Palette *pal, const char *file)
|
||||
{
|
||||
Eina_Bool ok = EINA_FALSE;
|
||||
Eet_File *ef = eet_open(file, EET_FILE_MODE_WRITE);
|
||||
if (!ef) return EINA_FALSE;
|
||||
if (eet_data_write(ef, _config_palette_edd, "palette",
|
||||
pal, EET_COMPRESSION_VERYFAST) > 0)
|
||||
ok = EINA_TRUE;
|
||||
eet_close(ef);
|
||||
return ok;
|
||||
}
|
||||
|
||||
static Elm_Palette *
|
||||
_palette_find(const char *name)
|
||||
{
|
||||
Elm_Palette *pal;
|
||||
char buf[PATH_MAX];
|
||||
|
||||
if (!name) return NULL;
|
||||
if (strchr(name, '/')) return NULL;
|
||||
_elm_config_user_dir_snprintf(buf, sizeof(buf), "colors/%s.pal", name);
|
||||
pal = _palette_load(buf);
|
||||
if (!pal)
|
||||
{
|
||||
_elm_data_dir_snprintf(buf, sizeof(buf), "colors/%s.pal", name);
|
||||
pal = _palette_load(buf);
|
||||
}
|
||||
return pal;
|
||||
}
|
||||
|
||||
static Elm_Palette *
|
||||
_palette_new(void)
|
||||
{
|
||||
Elm_Palette *pal = calloc(1, sizeof(*pal));
|
||||
if (!pal) return NULL;
|
||||
pal->version = 1000;
|
||||
return pal;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_palette_store(Elm_Palette *pal, const char *name)
|
||||
{
|
||||
char buf[PATH_MAX];
|
||||
|
||||
if (!pal) return EINA_FALSE;
|
||||
_elm_config_user_dir_snprintf(buf, sizeof(buf), "colors");
|
||||
ecore_file_mkpath(buf);
|
||||
_elm_config_user_dir_snprintf(buf, sizeof(buf), "colors/%s.pal", name);
|
||||
return _palette_save(pal, buf);
|
||||
}
|
||||
|
||||
static void
|
||||
_palette_set(Elm_Palette *pal, const char *clas, int r, int g, int b, int a)
|
||||
{
|
||||
Eina_List *l;
|
||||
Elm_Palette_Color *c;
|
||||
|
||||
if (!pal) return;
|
||||
EINA_LIST_FOREACH(pal->colors, l, c)
|
||||
{
|
||||
if ((c->name) && (!strcmp(c->name, clas)))
|
||||
{
|
||||
c->r = r;
|
||||
c->g = g;
|
||||
c->b = b;
|
||||
c->a = a;
|
||||
return;
|
||||
}
|
||||
}
|
||||
c = calloc(1, sizeof(*c));
|
||||
if (!c) return;
|
||||
c->name = eina_stringshare_add(clas);
|
||||
c->r = r;
|
||||
c->g = g;
|
||||
c->b = b;
|
||||
c->a = a;
|
||||
pal->colors = eina_list_append(pal->colors, c);
|
||||
}
|
||||
|
||||
static void
|
||||
_palette_unset(Elm_Palette *pal, const char *clas)
|
||||
{
|
||||
Eina_List *l;
|
||||
Elm_Palette_Color *c;
|
||||
|
||||
if (!pal) return;
|
||||
EINA_LIST_FOREACH(pal->colors, l, c)
|
||||
{
|
||||
if ((c->name) && (!strcmp(c->name, clas)))
|
||||
{
|
||||
pal->colors = eina_list_remove_list(pal->colors, l);
|
||||
if (c->name) eina_stringshare_del(c->name);
|
||||
free(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
EAPI Elm_Palette *
|
||||
elm_config_palette_load(const char *palette)
|
||||
{
|
||||
Elm_Palette *pal;
|
||||
|
||||
pal = _palette_find(palette);
|
||||
if (!pal) pal = _palette_new();
|
||||
return pal;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_config_palette_color_set(Elm_Palette *pal, const char *name, int r, int g, int b, int a)
|
||||
{
|
||||
_palette_set(pal, name, r, g, b, a);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_config_palette_color_unset(Elm_Palette *pal, const char *name)
|
||||
{
|
||||
_palette_unset(pal, name);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_config_palette_save(Elm_Palette *pal, const char *palette)
|
||||
{
|
||||
_palette_store(pal, palette);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_config_palette_free(Elm_Palette *pal)
|
||||
{
|
||||
_palette_free(pal);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_config_palette_delete(const char *palette)
|
||||
{
|
||||
char buf[PATH_MAX];
|
||||
|
||||
if (!palette) return;
|
||||
if (strchr(palette, '/')) return;
|
||||
_elm_config_user_dir_snprintf(buf, sizeof(buf), "colors/%s.pal", palette);
|
||||
ecore_file_unlink(buf);
|
||||
}
|
||||
|
||||
EAPI Eina_List *
|
||||
elm_config_palette_list(void)
|
||||
{
|
||||
Eina_List *list = NULL, *files, *l;
|
||||
char buf[PATH_MAX], *s, *s2;
|
||||
|
||||
_elm_data_dir_snprintf(buf, sizeof(buf), "colors");
|
||||
files = ecore_file_ls(buf);
|
||||
EINA_LIST_FREE(files, s)
|
||||
{
|
||||
char *ext = strrchr(s, '.');
|
||||
|
||||
if ((ext) && (!strcmp(ext, ".pal")))
|
||||
{
|
||||
*ext = 0;
|
||||
list = eina_list_append(list, eina_stringshare_add(s));
|
||||
}
|
||||
free(s);
|
||||
}
|
||||
_elm_config_user_dir_snprintf(buf, sizeof(buf), "colors");
|
||||
files = ecore_file_ls(buf);
|
||||
EINA_LIST_FREE(files, s)
|
||||
{
|
||||
char *ext = strrchr(s, '.');
|
||||
|
||||
if ((ext) && (!strcmp(ext, ".pal")))
|
||||
{
|
||||
Eina_Bool found = EINA_FALSE;
|
||||
|
||||
*ext = 0;
|
||||
EINA_LIST_FOREACH(list, l, s2)
|
||||
{
|
||||
if (!strcmp(s, s2))
|
||||
{
|
||||
found = EINA_TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found)
|
||||
list = eina_list_append(list, eina_stringshare_add(s));
|
||||
}
|
||||
free(s);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_config_palette_list_free(Eina_List *list)
|
||||
{
|
||||
const char *s;
|
||||
|
||||
EINA_LIST_FREE(list, s) eina_stringshare_del(s);
|
||||
}
|
||||
|
||||
static void
|
||||
_palette_apply(const char *name)
|
||||
{
|
||||
Elm_Palette *pal;
|
||||
Elm_Palette_Color *col;
|
||||
Eina_List *l;
|
||||
char *s;
|
||||
|
||||
// clear old colors
|
||||
l = edje_color_class_list();
|
||||
EINA_LIST_FREE(l, s)
|
||||
{
|
||||
if ((s) && (s[0] == '/')) edje_color_class_del(s);
|
||||
free(s);
|
||||
}
|
||||
pal = _palette_find(name);
|
||||
if (!pal) return;
|
||||
// if version new enough...
|
||||
if (pal->version >= 1000)
|
||||
{
|
||||
// for each color - set that colorclass
|
||||
EINA_LIST_FOREACH(pal->colors, l, col)
|
||||
{
|
||||
if (!col->name) continue;
|
||||
edje_color_class_set(col->name,
|
||||
col->r, col->g, col->b, col->a,
|
||||
col->r, col->g, col->b, col->a,
|
||||
col->r, col->g, col->b, col->a);
|
||||
}
|
||||
}
|
||||
edje_color_class_apply();
|
||||
_palette_free(pal);
|
||||
}
|
||||
|
||||
static Eina_Hash *_getenv_once_envs = NULL;
|
||||
static const char *_getenv_once_empty = "";
|
||||
|
||||
|
@ -1165,21 +1392,7 @@ _elm_config_text_classes_free(Eina_List *l)
|
|||
Eina_List *
|
||||
_elm_config_color_classes_get(void)
|
||||
{
|
||||
Eina_List *ret = NULL;
|
||||
int i;
|
||||
|
||||
for (i = 0; _elm_color_classes[i].desc; i++)
|
||||
{
|
||||
Elm_Color_Class *cc;
|
||||
cc = malloc(sizeof(*cc));
|
||||
if (!cc) continue;
|
||||
|
||||
*cc = _elm_color_classes[i];
|
||||
|
||||
ret = eina_list_append(ret, cc);
|
||||
}
|
||||
|
||||
return ret;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1206,118 +1419,6 @@ _elm_config_color_overlays_list(void)
|
|||
return _elm_config->color_overlays;
|
||||
}
|
||||
|
||||
void
|
||||
_elm_config_color_overlay_set(const char *color_class,
|
||||
int r, int g, int b, int a,
|
||||
int r2, int g2, int b2, int a2,
|
||||
int r3, int g3, int b3, int a3)
|
||||
{
|
||||
Elm_Color_Overlay *ecd;
|
||||
Eina_List *l;
|
||||
|
||||
#define CHECK_COLOR_VAL(v) v = (v > 255)? 255 : (v < 0)? 0: v
|
||||
CHECK_COLOR_VAL(r);
|
||||
CHECK_COLOR_VAL(g);
|
||||
CHECK_COLOR_VAL(b);
|
||||
CHECK_COLOR_VAL(a);
|
||||
CHECK_COLOR_VAL(r2);
|
||||
CHECK_COLOR_VAL(g2);
|
||||
CHECK_COLOR_VAL(b2);
|
||||
CHECK_COLOR_VAL(a2);
|
||||
CHECK_COLOR_VAL(r3);
|
||||
CHECK_COLOR_VAL(g3);
|
||||
CHECK_COLOR_VAL(b3);
|
||||
CHECK_COLOR_VAL(a3);
|
||||
#undef CHECK_COLOR_VAL
|
||||
|
||||
EINA_LIST_FOREACH(_elm_config->color_overlays, l, ecd)
|
||||
{
|
||||
if (!eina_streq(ecd->color_class, color_class))
|
||||
continue;
|
||||
|
||||
ecd->color.r = r;
|
||||
ecd->color.g = g;
|
||||
ecd->color.b = b;
|
||||
ecd->color.a = a;
|
||||
ecd->outline.r = r2;
|
||||
ecd->outline.g = g2;
|
||||
ecd->outline.b = b2;
|
||||
ecd->outline.a = a2;
|
||||
ecd->shadow.r = r3;
|
||||
ecd->shadow.g = g3;
|
||||
ecd->shadow.b = b3;
|
||||
ecd->shadow.a = a3;
|
||||
|
||||
_elm_config->color_overlays =
|
||||
eina_list_promote_list(_elm_config->color_overlays, l);
|
||||
return;
|
||||
}
|
||||
|
||||
/* the color class doesn't exist */
|
||||
ecd = calloc(1, sizeof(Elm_Color_Overlay));
|
||||
if (!ecd) return;
|
||||
|
||||
ecd->color_class = eina_stringshare_add(color_class);
|
||||
ecd->color.r = r;
|
||||
ecd->color.g = g;
|
||||
ecd->color.b = b;
|
||||
ecd->color.a = a;
|
||||
ecd->outline.r = r2;
|
||||
ecd->outline.g = g2;
|
||||
ecd->outline.b = b2;
|
||||
ecd->outline.a = a2;
|
||||
ecd->shadow.r = r3;
|
||||
ecd->shadow.g = g3;
|
||||
ecd->shadow.b = b3;
|
||||
ecd->shadow.a = a3;
|
||||
|
||||
_elm_config->color_overlays =
|
||||
eina_list_prepend(_elm_config->color_overlays, ecd);
|
||||
}
|
||||
|
||||
void
|
||||
_elm_config_color_overlay_remove(const char *color_class)
|
||||
{
|
||||
Elm_Color_Overlay *ecd;
|
||||
Eina_List *l;
|
||||
|
||||
EINA_LIST_FOREACH(_elm_config->color_overlays, l, ecd)
|
||||
{
|
||||
if (!ecd->color_class) continue;
|
||||
if (!eina_streq(ecd->color_class, color_class)) continue;
|
||||
|
||||
_color_overlays_del =
|
||||
eina_list_append(_color_overlays_del,
|
||||
eina_stringshare_add(color_class));
|
||||
_elm_config->color_overlays =
|
||||
eina_list_remove_list(_elm_config->color_overlays, l);
|
||||
eina_stringshare_del(ecd->color_class);
|
||||
free(ecd);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
_elm_config_color_overlay_apply(void)
|
||||
{
|
||||
Elm_Color_Overlay *ecd;
|
||||
Eina_List *l;
|
||||
char *color_class;
|
||||
|
||||
EINA_LIST_FREE(_color_overlays_del, color_class)
|
||||
{
|
||||
edje_color_class_del(color_class);
|
||||
eina_stringshare_del(color_class);
|
||||
}
|
||||
|
||||
EINA_LIST_FOREACH(_elm_config->color_overlays, l, ecd)
|
||||
edje_color_class_set(ecd->color_class,
|
||||
ecd->color.r, ecd->color.g, ecd->color.b, ecd->color.a,
|
||||
ecd->outline.r, ecd->outline.g, ecd->outline.b, ecd->outline.a,
|
||||
ecd->shadow.r, ecd->shadow.g, ecd->shadow.b, ecd->shadow.a);
|
||||
}
|
||||
|
||||
Eina_List *
|
||||
_elm_config_color_list_get(const char *palette_name)
|
||||
{
|
||||
|
@ -1592,6 +1693,7 @@ _config_free(Elm_Config *cfg)
|
|||
eina_stringshare_del(cfg->indicator_service_180);
|
||||
eina_stringshare_del(cfg->indicator_service_270);
|
||||
eina_stringshare_del(cfg->icon_theme);
|
||||
eina_stringshare_del(cfg->palette);
|
||||
free(cfg);
|
||||
}
|
||||
|
||||
|
@ -1782,6 +1884,7 @@ _config_load(void)
|
|||
if (_elm_config->config_version < ELM_CONFIG_VERSION)
|
||||
_config_update();
|
||||
_env_get();
|
||||
_palette_apply(_elm_config->palette);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -1793,6 +1896,7 @@ _config_load(void)
|
|||
_elm_config = _config_system_load();
|
||||
if (_elm_config)
|
||||
{
|
||||
_palette_apply(_elm_config->palette);
|
||||
_env_get();
|
||||
return;
|
||||
}
|
||||
|
@ -2041,7 +2145,6 @@ _config_flush_get(void)
|
|||
_config_sub_apply();
|
||||
evas_font_reinit();
|
||||
_elm_config_font_overlay_apply();
|
||||
_elm_config_color_overlay_apply();
|
||||
if (!EINA_DBL_EQ(pre_scale, _elm_config->scale))
|
||||
_elm_rescale();
|
||||
_elm_old_clouseau_reload();
|
||||
|
@ -2860,6 +2963,9 @@ _env_get(void)
|
|||
|
||||
s = _getenv_once("ELM_WIN_NO_BORDER");
|
||||
if (s) _elm_config->win_no_border = EINA_TRUE;
|
||||
|
||||
s = _getenv_once("ELM_PALETTE");
|
||||
if (s) eina_stringshare_replace(&_elm_config->palette, s);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -3016,6 +3122,19 @@ elm_config_icon_theme_set(const char *theme)
|
|||
_elm_config->icon_theme = eina_stringshare_add(ELM_CONFIG_ICON_THEME_ELEMENTARY);
|
||||
}
|
||||
|
||||
EAPI const char *
|
||||
elm_config_palette_get(void)
|
||||
{
|
||||
return _elm_config->palette;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_config_palette_set(const char *palette)
|
||||
{
|
||||
eina_stringshare_replace(&(_elm_config->palette), palette);
|
||||
_palette_apply(_elm_config->palette);
|
||||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
elm_config_password_show_last_get(void)
|
||||
{
|
||||
|
@ -3252,31 +3371,21 @@ elm_config_color_overlay_list_get(void)
|
|||
}
|
||||
|
||||
EAPI void
|
||||
elm_config_color_overlay_set(const char *color_class,
|
||||
int r, int g, int b, int a,
|
||||
int r2, int g2, int b2, int a2,
|
||||
int r3, int g3, int b3, int a3)
|
||||
elm_config_color_overlay_set(const char *color_class EINA_UNUSED,
|
||||
int r EINA_UNUSED, int g EINA_UNUSED, int b EINA_UNUSED, int a EINA_UNUSED,
|
||||
int r2 EINA_UNUSED, int g2 EINA_UNUSED, int b2 EINA_UNUSED, int a2 EINA_UNUSED,
|
||||
int r3 EINA_UNUSED, int g3 EINA_UNUSED, int b3 EINA_UNUSED, int a3 EINA_UNUSED)
|
||||
{
|
||||
_elm_config->priv.color_overlays = EINA_TRUE;
|
||||
EINA_SAFETY_ON_NULL_RETURN(color_class);
|
||||
_elm_config_color_overlay_set(color_class,
|
||||
r, g, b, a,
|
||||
r2, g2, b2, a2,
|
||||
r3, g3, b3, a3);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_config_color_overlay_unset(const char *color_class)
|
||||
elm_config_color_overlay_unset(const char *color_class EINA_UNUSED)
|
||||
{
|
||||
_elm_config->priv.color_overlays = EINA_TRUE;
|
||||
EINA_SAFETY_ON_NULL_RETURN(color_class);
|
||||
_elm_config_color_overlay_remove(color_class);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_config_color_overlay_apply(void)
|
||||
{
|
||||
_elm_config_color_overlay_apply();
|
||||
}
|
||||
|
||||
EAPI Evas_Coord
|
||||
|
@ -4301,7 +4410,6 @@ _elm_config_init(void)
|
|||
_elm_recache();
|
||||
_config_apply();
|
||||
_elm_config_font_overlay_apply();
|
||||
_elm_config_color_overlay_apply();
|
||||
_elm_old_clouseau_reload();
|
||||
_elm_config_key_binding_hash();
|
||||
}
|
||||
|
@ -4475,7 +4583,6 @@ _elm_config_reload(void)
|
|||
_elm_recache();
|
||||
_config_apply();
|
||||
_elm_config_font_overlay_apply();
|
||||
_elm_config_color_overlay_apply();
|
||||
#define CMP(x) (p##x != _elm_config->x)
|
||||
#define DBL_CMP(x) !EINA_DBL_EQ(p##x, _elm_config->x)
|
||||
if (
|
||||
|
@ -4780,7 +4887,6 @@ _elm_config_profile_set(const char *profile)
|
|||
_elm_recache();
|
||||
_config_apply();
|
||||
_elm_config_font_overlay_apply();
|
||||
_elm_config_color_overlay_apply();
|
||||
_elm_rescale();
|
||||
_elm_old_clouseau_reload();
|
||||
_elm_config_key_binding_hash();
|
||||
|
|
|
@ -1116,6 +1116,32 @@ EAPI const char *elm_config_icon_theme_get(void);
|
|||
*/
|
||||
EAPI void elm_config_icon_theme_set(const char *theme);
|
||||
|
||||
/** new palette code - nbot sure if this should be final yet **/
|
||||
typedef struct _Elm_Palette_Color
|
||||
{
|
||||
const char *name;
|
||||
unsigned char r, g, b, a;
|
||||
} Elm_Palette_Color;
|
||||
|
||||
typedef struct _Elm_Palette
|
||||
{
|
||||
int version;
|
||||
Eina_List *colors;
|
||||
} Elm_Palette;
|
||||
|
||||
EAPI const char *elm_config_palette_get(void);
|
||||
EAPI void elm_config_palette_set(const char *palette);
|
||||
|
||||
EAPI Elm_Palette *elm_config_palette_load(const char *palette);
|
||||
EAPI void elm_config_palette_color_set(Elm_Palette *pal, const char *name, int r, int g, int b, int a);
|
||||
EAPI void elm_config_palette_color_unset(Elm_Palette *pal, const char *name);
|
||||
EAPI void elm_config_palette_save(Elm_Palette *pal, const char *palette);
|
||||
EAPI void elm_config_palette_free(Elm_Palette *pal);
|
||||
EAPI void elm_config_palette_delete(const char *palette);
|
||||
EAPI Eina_List *elm_config_palette_list(void);
|
||||
EAPI void elm_config_palette_list_free(Eina_List *list);
|
||||
/** end new palette code **/
|
||||
|
||||
/**
|
||||
* @defgroup Elm_Password_last_show Password show last
|
||||
* @ingroup Elementary
|
||||
|
|
|
@ -602,6 +602,7 @@ struct _Elm_Config
|
|||
int gl_stencil;
|
||||
int gl_msaa;
|
||||
const char *icon_theme;
|
||||
const char *palette;
|
||||
unsigned char entry_select_allow;
|
||||
Eina_Bool offline;
|
||||
int powersave;
|
||||
|
|
Loading…
Reference in New Issue