1 #ifdef HAVE_CONFIG_H
2 # include "elementary_config.h"
3 #endif
4
5 #define EFL_ACCESS_OBJECT_PROTECTED
6 #define ELM_LAYOUT_PROTECTED
7
8 #include <Elementary.h>
9 #include "elm_priv.h"
10 #include "efl_ui_bg_private.h"
11
12 #define MY_CLASS EFL_UI_BG_CLASS
13 #define MY_CLASS_PFX efl_ui_bg
14
15 #define MY_CLASS_NAME "Efl.Ui.Bg"
16
17 static const Elm_Layout_Part_Alias_Description _content_aliases[] =
18 {
19 {"overlay", "elm.swallow.content"},
20 {NULL, NULL}
21 };
22
23 EOLIAN static Eo *
_efl_ui_bg_efl_object_constructor(Eo * obj,Efl_Ui_Bg_Data * pd)24 _efl_ui_bg_efl_object_constructor(Eo *obj, Efl_Ui_Bg_Data *pd)
25 {
26 ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL);
27
28 if (!elm_widget_theme_klass_get(obj))
29 elm_widget_theme_klass_set(obj, "bg");
30
31 obj = efl_constructor(efl_super(obj, MY_CLASS));
32 elm_widget_can_focus_set(obj, EINA_FALSE);
33
34 if (elm_widget_theme_object_set(obj, wd->resize_obj,
35 elm_widget_theme_klass_get(obj),
36 elm_widget_theme_element_get(obj),
37 elm_widget_theme_style_get(obj)) == EFL_UI_THEME_APPLY_ERROR_GENERIC)
38 CRI("Failed to set layout!");
39
40 if (elm_widget_is_legacy(obj))
41 {
42 pd->rect = efl_add(EFL_CANVAS_RECTANGLE_CLASS, obj,
43 efl_gfx_color_set(efl_added, 0, 0, 0, 0),
44 efl_content_set(efl_part(obj, "elm.swallow.rectangle"), efl_added));
45
46 pd->img = elm_image_add(obj);
47 efl_gfx_image_scale_method_set(pd->img, EFL_GFX_IMAGE_SCALE_METHOD_EXPAND);
48 elm_layout_content_set(obj, "elm.swallow.background", pd->img);
49 }
50 else
51 {
52 pd->rect = efl_add(EFL_CANVAS_RECTANGLE_CLASS, obj,
53 efl_gfx_color_set(efl_added, 0, 0, 0, 0),
54 efl_content_set(efl_part(obj, "efl.rectangle"), efl_added));
55
56 pd->img = efl_add(EFL_UI_IMAGE_CLASS, obj,
57 efl_gfx_image_scale_method_set(efl_added, EFL_GFX_IMAGE_SCALE_METHOD_EXPAND),
58 efl_content_set(efl_part(obj, "efl.background"), efl_added));
59 }
60 pd->file = NULL;
61 pd->key = NULL;
62
63 efl_access_object_access_type_set(obj, EFL_ACCESS_TYPE_DISABLED);
64
65 efl_ui_widget_focus_allow_set(obj, EINA_FALSE);
66
67 efl_composite_attach(obj, pd->img);
68
69 return obj;
70 }
71
72 EOLIAN static void
_efl_ui_bg_efl_object_destructor(Eo * obj,Efl_Ui_Bg_Data * sd)73 _efl_ui_bg_efl_object_destructor(Eo *obj, Efl_Ui_Bg_Data *sd)
74 {
75 ELM_SAFE_FREE(sd->file, eina_stringshare_del);
76 ELM_SAFE_FREE(sd->key, eina_stringshare_del);
77
78 efl_destructor(efl_super(obj, MY_CLASS));
79 }
80
81 EAPI void
elm_bg_option_set(Evas_Object * obj,Elm_Bg_Option option)82 elm_bg_option_set(Evas_Object *obj, Elm_Bg_Option option)
83 {
84 Efl_Gfx_Image_Scale_Method type;
85
86 switch (option)
87 {
88 case ELM_BG_OPTION_CENTER:
89 type = EFL_GFX_IMAGE_SCALE_METHOD_NONE;
90 break;
91 case ELM_BG_OPTION_SCALE:
92 type = EFL_GFX_IMAGE_SCALE_METHOD_EXPAND;
93 break;
94 case ELM_BG_OPTION_TILE:
95 type = EFL_GFX_IMAGE_SCALE_METHOD_TILE;
96 break;
97 case ELM_BG_OPTION_STRETCH:
98 type = EFL_GFX_IMAGE_SCALE_METHOD_FILL;
99 break;
100 case ELM_BG_OPTION_LAST:
101 default:
102 type = EFL_GFX_IMAGE_SCALE_METHOD_EXPAND;
103 }
104 efl_gfx_image_scale_method_set(obj, type);
105 }
106
107 EAPI Elm_Bg_Option
elm_bg_option_get(const Evas_Object * obj)108 elm_bg_option_get(const Evas_Object *obj)
109 {
110 Efl_Gfx_Image_Scale_Method type;
111 Elm_Bg_Option option = ELM_BG_OPTION_LAST;
112
113 type = efl_gfx_image_scale_method_get(obj);
114 switch (type)
115 {
116 case EFL_GFX_IMAGE_SCALE_METHOD_NONE:
117 option = ELM_BG_OPTION_CENTER;
118 break;
119 case EFL_GFX_IMAGE_SCALE_METHOD_EXPAND:
120 option = ELM_BG_OPTION_SCALE;
121 break;
122 case EFL_GFX_IMAGE_SCALE_METHOD_TILE:
123 option = ELM_BG_OPTION_TILE;
124 break;
125 case EFL_GFX_IMAGE_SCALE_METHOD_FILL:
126 option = ELM_BG_OPTION_STRETCH;
127 break;
128 case EFL_GFX_IMAGE_SCALE_METHOD_FIT:
129 default:
130 ERR("Scale type %d cannot be converted to Elm_Bg_Option", type);
131 break;
132 }
133
134 return option;
135 }
136
137 EAPI void
elm_bg_color_set(Evas_Object * obj,int r,int g,int b)138 elm_bg_color_set(Evas_Object *obj,
139 int r,
140 int g,
141 int b)
142 {
143 int a = 255;
144 EFL_UI_BG_DATA_GET_OR_RETURN(obj, sd);
145
146 // reset color
147 if ((r == -1) && (g == -1) && (b == -1))
148 {
149 r = g = b = a = 0;
150 }
151 efl_gfx_color_set(sd->rect, r, g, b, a);
152 }
153
154 EOLIAN static void
_efl_ui_bg_efl_gfx_color_color_set(Eo * obj,Efl_Ui_Bg_Data * sd,int r,int g,int b,int a)155 _efl_ui_bg_efl_gfx_color_color_set(Eo *obj, Efl_Ui_Bg_Data *sd, int r, int g, int b, int a)
156 {
157 efl_gfx_color_set(efl_super(obj, MY_CLASS), r, g, b, a);
158 efl_gfx_color_set(sd->rect, r, g, b, a);
159 }
160
161 EAPI void
elm_bg_color_get(const Evas_Object * obj,int * r,int * g,int * b)162 elm_bg_color_get(const Evas_Object *obj,
163 int *r,
164 int *g,
165 int *b)
166 {
167 EFL_UI_BG_CHECK(obj);
168 efl_gfx_color_get((Eo *) obj, r, g, b, NULL);
169 }
170
171 EOLIAN static void
_efl_ui_bg_efl_gfx_color_color_get(const Eo * obj,Efl_Ui_Bg_Data * sd,int * r,int * g,int * b,int * a)172 _efl_ui_bg_efl_gfx_color_color_get(const Eo *obj, Efl_Ui_Bg_Data *sd, int *r, int *g, int *b, int *a)
173 {
174 if (!sd->rect)
175 efl_gfx_color_get(efl_super(obj, MY_CLASS), r, g, b, a);
176 else
177 efl_gfx_color_get(sd->rect, r, g, b, a);
178 }
179
180 EAPI void
elm_bg_load_size_set(Evas_Object * obj,int w,int h)181 elm_bg_load_size_set(Evas_Object *obj, int w, int h)
182 {
183 EFL_UI_BG_DATA_GET_OR_RETURN(obj, sd);
184 efl_gfx_image_load_controller_load_size_set(sd->img, EINA_SIZE2D(w, h));
185 }
186
187 EAPI Eina_Bool
elm_bg_file_set(Eo * obj,const char * file,const char * group)188 elm_bg_file_set(Eo *obj, const char *file, const char *group)
189 {
190 EFL_UI_BG_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
191 Eina_Bool ret = efl_file_simple_load((Eo *) obj, file, group);
192 if (ret) elm_image_preload_disabled_set(sd->img, EINA_TRUE);
193
194 return ret;
195 }
196
197 EOLIAN static Eina_Error
_efl_ui_bg_efl_file_load(Eo * obj EINA_UNUSED,Efl_Ui_Bg_Data * sd)198 _efl_ui_bg_efl_file_load(Eo *obj EINA_UNUSED, Efl_Ui_Bg_Data *sd)
199 {
200 return efl_file_load(sd->img);
201 }
202
203 EOLIAN static void
_efl_ui_bg_efl_file_unload(Eo * obj EINA_UNUSED,Efl_Ui_Bg_Data * sd)204 _efl_ui_bg_efl_file_unload(Eo *obj EINA_UNUSED, Efl_Ui_Bg_Data *sd)
205 {
206 efl_file_unload(sd->img);
207 }
208
209 EOLIAN static Eina_Error
_efl_ui_bg_efl_file_file_set(Eo * obj EINA_UNUSED,Efl_Ui_Bg_Data * sd,const char * file)210 _efl_ui_bg_efl_file_file_set(Eo *obj EINA_UNUSED, Efl_Ui_Bg_Data *sd, const char *file)
211 {
212 eina_stringshare_replace(&sd->file, file);
213
214 return efl_file_set(sd->img, file);
215 }
216
217 EOLIAN static void
_efl_ui_bg_efl_file_key_set(Eo * obj EINA_UNUSED,Efl_Ui_Bg_Data * sd,const char * key)218 _efl_ui_bg_efl_file_key_set(Eo *obj EINA_UNUSED, Efl_Ui_Bg_Data *sd, const char *key)
219 {
220 eina_stringshare_replace(&sd->key, key);
221
222 efl_file_key_set(sd->img, key);
223 }
224
225 EAPI void
elm_bg_file_get(const Eo * obj,const char ** file,const char ** group)226 elm_bg_file_get(const Eo *obj, const char **file, const char **group)
227 {
228 efl_file_simple_get((Eo *) obj, file, group);
229 }
230
231 EOLIAN static const char *
_efl_ui_bg_efl_file_file_get(const Eo * obj,Efl_Ui_Bg_Data * sd)232 _efl_ui_bg_efl_file_file_get(const Eo *obj, Efl_Ui_Bg_Data *sd)
233 {
234 if (elm_widget_is_legacy(obj))
235 return sd->file;
236
237 return efl_file_get(sd->img);
238 }
239
240 EOLIAN static const char *
_efl_ui_bg_efl_file_key_get(const Eo * obj,Efl_Ui_Bg_Data * sd)241 _efl_ui_bg_efl_file_key_get(const Eo *obj, Efl_Ui_Bg_Data *sd)
242 {
243 if (elm_widget_is_legacy(obj))
244 return sd->key;
245
246 return efl_file_key_get(sd->img);
247 }
248
249 EOLIAN static Eina_Error
_efl_ui_bg_efl_file_mmap_set(Eo * obj EINA_UNUSED,Efl_Ui_Bg_Data * sd,const Eina_File * file)250 _efl_ui_bg_efl_file_mmap_set(Eo *obj EINA_UNUSED, Efl_Ui_Bg_Data *sd,
251 const Eina_File *file)
252 {
253 return efl_file_mmap_set(sd->img, file);
254 }
255
256 EOLIAN static const Eina_File *
_efl_ui_bg_efl_file_mmap_get(const Eo * obj EINA_UNUSED,Efl_Ui_Bg_Data * sd)257 _efl_ui_bg_efl_file_mmap_get(const Eo *obj EINA_UNUSED, Efl_Ui_Bg_Data *sd)
258 {
259 return efl_file_mmap_get(sd->img);
260 }
261
262
263 EOLIAN static Eo *
_efl_ui_bg_efl_object_finalize(Eo * obj,Efl_Ui_Bg_Data * sd)264 _efl_ui_bg_efl_object_finalize(Eo *obj, Efl_Ui_Bg_Data *sd)
265 {
266 obj = efl_finalize(efl_super(obj, MY_CLASS));
267 if (!obj) return NULL;
268 if (efl_file_get(sd->img) || efl_file_mmap_get(sd->img)) efl_file_load(sd->img);
269 return obj;
270 }
271
272 /* Internal EO APIs and hidden overrides */
273
EFL_UI_LAYOUT_CONTENT_ALIASES_IMPLEMENT(MY_CLASS_PFX)274 EFL_UI_LAYOUT_CONTENT_ALIASES_IMPLEMENT(MY_CLASS_PFX)
275
276 #define EFL_UI_BG_EXTRA_OPS \
277 EFL_UI_LAYOUT_CONTENT_ALIASES_OPS(MY_CLASS_PFX)
278
279 #include "efl_ui_bg.eo.c"
280
281
282 #include "efl_ui_bg_legacy_eo.h"
283
284 #define MY_CLASS_NAME_LEGACY "elm_bg"
285
286 static void
287 _efl_ui_bg_legacy_class_constructor(Efl_Class *klass)
288 {
289 evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass);
290 }
291
292 EOLIAN static Eo *
_efl_ui_bg_legacy_efl_object_constructor(Eo * obj,void * _pd EINA_UNUSED)293 _efl_ui_bg_legacy_efl_object_constructor(Eo *obj, void *_pd EINA_UNUSED)
294 {
295 obj = efl_constructor(efl_super(obj, EFL_UI_BG_LEGACY_CLASS));
296 efl_canvas_object_type_set(obj, MY_CLASS_NAME_LEGACY);
297 EFL_UI_BG_DATA_GET_OR_RETURN_VAL(obj, pd, obj);
298 efl_gfx_entity_scale_set(pd->img, 1.0);
299 efl_ui_layout_finger_size_multiplier_set(obj, 0, 0);
300 return obj;
301 }
302
303 EAPI Evas_Object *
elm_bg_add(Evas_Object * parent)304 elm_bg_add(Evas_Object *parent)
305 {
306 EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
307 return elm_legacy_add(EFL_UI_BG_LEGACY_CLASS, parent);
308 }
309
310 #include "efl_ui_bg_legacy_eo.c"
311