Tizen 2.1 release
[platform/core/uifw/e17.git] / src / bin / e_color_class.c
1 #include "e.h"
2
3 EINTERN int
4 e_color_class_init(void)
5 {
6    const Eina_List *l;
7    const E_Color_Class *cc;
8
9   EINA_LIST_FOREACH(e_config->color_classes, l, cc)
10     {
11        if (!cc) continue;
12
13        printf("INIT CC: %s, %d %d %d %d\n", cc->name, cc->r, cc->g, cc->b, cc->a);
14        edje_color_class_set(cc->name,
15                             cc->r, cc->g, cc->b, cc->a,
16                             cc->r2, cc->g2, cc->b2, cc->a2,
17                             cc->r3, cc->g3, cc->b3, cc->a3);
18
19     }
20   return 1;
21 }
22
23 EINTERN int
24 e_color_class_shutdown(void)
25 {
26    return 1;
27 }
28
29 static Eina_List *
30 e_color_class_node_find_stringshared(const char *name)
31 {
32    Eina_List *l;
33    E_Color_Class *cc;
34
35    EINA_LIST_FOREACH(e_config->color_classes, l, cc)
36      if (cc && cc->name == name)
37        return l;
38    return NULL;
39 }
40
41 EAPI E_Color_Class *
42 e_color_class_find_stringshared(const char *name)
43 {
44    Eina_List *l = e_color_class_node_find_stringshared(name);
45    if (!l) return NULL;
46    return l->data;
47 }
48
49 EAPI E_Color_Class *
50 e_color_class_find(const char *name)
51 {
52    E_Color_Class *cc;
53
54    name = eina_stringshare_add(name);
55    cc = e_color_class_find_stringshared(name);
56    eina_stringshare_del(name);
57
58    return cc;
59 }
60
61 EAPI void
62 e_color_class_instance_set(E_Color_Class *cc, int r, int g, int b, int a, int r2, int b2, int g2, int a2, int r3, int g3, int b3, int a3)
63 {
64    if (!cc) return;
65
66    if (r != -1) cc->r = E_CLAMP(r, 0, 255);
67    if (g != -1) cc->g = E_CLAMP(g, 0, 255);
68    if (b != -1) cc->b = E_CLAMP(b, 0, 255);
69    if (a != -1) cc->a = E_CLAMP(a, 0, 255);
70    if (r2 != -1) cc->r2 = E_CLAMP(r2, 0, 255);
71    if (g2 != -1) cc->g2 = E_CLAMP(g2, 0, 255);
72    if (b2 != -1) cc->b2 = E_CLAMP(b2, 0, 255);
73    if (a2 != -1) cc->a2 = E_CLAMP(a2, 0, 255);
74    if (r3 != -1) cc->r3 = E_CLAMP(r3, 0, 255);
75    if (g3 != -1) cc->g3 = E_CLAMP(g3, 0, 255);
76    if (b3 != -1) cc->b3 = E_CLAMP(b3, 0, 255);
77    if (a3 != -1) cc->a3 = E_CLAMP(a3, 0, 255);
78
79    edje_color_class_set(cc->name,
80                         cc->r, cc->g, cc->b, cc->a,
81                         cc->r2, cc->g2, cc->b2, cc->a2,
82                         cc->r3, cc->g3, cc->b3, cc->a3);
83    e_config_save_queue();
84 }
85
86 EAPI E_Color_Class *
87 e_color_class_set_stringshared(const char *color_class, int r, int g, int b, int a, int r2, int b2, int g2, int a2, int r3, int g3, int b3, int a3)
88 {
89   E_Color_Class *cc = e_color_class_find_stringshared(color_class);
90   if (!cc)
91     {
92        cc = E_NEW(E_Color_Class, 1);
93        if (!cc) return NULL;
94        e_config->color_classes = eina_list_append(e_config->color_classes, cc);
95        cc->name = eina_stringshare_ref(color_class);
96        cc->r = cc->g = cc->b = cc->a = 255;
97        cc->r2 = cc->g2 = cc->b2 = cc->a2 = 255;
98        cc->r3 = cc->g3 = cc->b3 = cc->a3 = 255;
99     }
100
101   e_color_class_instance_set(cc,
102                              r, g, b, a,
103                              r2, g2, b2, a2,
104                              r3, g3, b3, a3);
105   return cc;
106 }
107
108 EAPI E_Color_Class *
109 e_color_class_set(const char *color_class, int r, int g, int b, int a, int r2, int b2, int g2, int a2, int r3, int g3, int b3, int a3)
110 {
111    E_Color_Class *cc;
112
113    color_class = eina_stringshare_add(color_class);
114    cc = e_color_class_set_stringshared(color_class,
115                                        r, g, b, a,
116                                        r2, g2, b2, a2,
117                                        r3, g3, b3, a3);
118    eina_stringshare_del(color_class);
119
120    return cc;
121 }
122
123 static void
124 e_color_class_node_del(Eina_List *n)
125 {
126    E_Color_Class *cc = n->data;
127    edje_color_class_del(cc->name);
128    eina_stringshare_del(cc->name);
129    E_FREE(cc);
130
131    e_config->color_classes = eina_list_remove_list(e_config->color_classes, n);
132    e_config_save_queue();
133 }
134
135 EAPI void
136 e_color_class_instance_del(E_Color_Class *cc)
137 {
138    Eina_List *n = eina_list_data_find_list(e_config->color_classes, cc);
139    if (!n) return;
140    e_color_class_node_del(n);
141 }
142
143 EAPI void
144 e_color_class_del_stringshared(const char *name)
145 {
146    Eina_List *n = e_color_class_node_find_stringshared(name);
147    if (!n) return;
148    e_color_class_node_del(n);
149 }
150
151 EAPI void
152 e_color_class_del(const char *name)
153 {
154    name = eina_stringshare_add(name);
155    e_color_class_del_stringshared(name);
156    eina_stringshare_del(name);
157 }
158
159 EAPI Eina_List *
160 e_color_class_list(void)
161 {
162   return e_config->color_classes;
163 }