1 #ifndef _EDJE_PRIVATE_H
2 #define _EDJE_PRIVATE_H
24 # define alloca __builtin_alloca
26 # define alloca __alloca
27 # elif defined _MSC_VER
29 # define alloca _alloca
30 # elif !defined HAVE_ALLOCA
34 void *alloca (size_t);
69 #include <Ecore_Evas.h>
70 #include <Ecore_File.h>
71 #include <Ecore_Input.h>
73 # include <Ecore_IMF.h>
74 # include <Ecore_IMF_Evas.h>
84 EAPI extern int _edje_default_log_dom ;
86 #ifdef EDJE_DEFAULT_LOG_COLOR
87 # undef EDJE_DEFAULT_LOG_COLOR
89 #define EDJE_DEFAULT_LOG_COLOR EINA_COLOR_CYAN
93 #define ERR(...) EINA_LOG_DOM_ERR(_edje_default_log_dom, __VA_ARGS__)
97 #define INF(...) EINA_LOG_DOM_INFO(_edje_default_log_dom, __VA_ARGS__)
101 #define WRN(...) EINA_LOG_DOM_WARN(_edje_default_log_dom, __VA_ARGS__)
105 #define CRIT(...) EINA_LOG_DOM_CRIT(_edje_default_log_dom, __VA_ARGS__)
109 #define DBG(...) EINA_LOG_DOM_DBG(_edje_default_log_dom, __VA_ARGS__)
112 // BROKEN in gcc 4 on amd64
113 //# pragma GCC visibility push(hidden)
118 #define ABS(x) ((x) < 0 ? -(x) : (x))
122 #define CLAMP(x, min, max) (((x) > (max)) ? (max) : (((x) < (min)) ? (min) : (x)))
126 #define MIN(a, b) (((a) < (b)) ? (a) : (b))
132 #define FLOAT_T Eina_F32p32
133 #define EDJE_T_FLOAT EET_T_F32P32
134 #define MUL(a, b) eina_f32p32_mul(a, b)
135 #define SCALE(a, b) eina_f32p32_scale(a, b)
136 #define DIV(a, b) eina_f32p32_div(a, b)
137 #define DIV2(a) ((a) >> 1)
138 #define ADD(a, b) eina_f32p32_add(a, b)
139 #define SUB(a, b) eina_f32p32_sub(a, b)
140 #define SQRT(a) eina_f32p32_sqrt(a)
141 #define TO_DOUBLE(a) eina_f32p32_double_to(a)
142 #define FROM_DOUBLE(a) eina_f32p32_double_from(a)
143 #define FROM_INT(a) eina_f32p32_int_from(a)
144 #define TO_INT(a) eina_f32p32_int_to(a)
146 #define COS(a) eina_f32p32_cos(a)
147 #define SIN(a) eina_f32p32_sin(a)
148 #define PI EINA_F32P32_PI
152 #define FLOAT_T double
153 #define EDJE_T_FLOAT EET_T_DOUBLE
154 #define MUL(a, b) ((a) * (b))
155 #define SCALE(a, b) ((a) * (double)(b))
156 #define DIV(a, b) ((a) / (b))
157 #define DIV2(a) ((a) / 2.0)
158 #define ADD(a, b) ((a) + (b))
159 #define SUB(a, b) ((a) - (b))
160 #define SQRT(a) sqrt(a)
161 #define TO_DOUBLE(a) (double)(a)
162 #define FROM_DOUBLE(a) (a)
163 #define FROM_INT(a) (double)(a)
164 #define TO_INT(a) (int)(a)
166 #define COS(a) cos(a)
167 #define SIN(a) sin(a)
168 #define PI 3.14159265358979323846
172 /* Inheritable Edje Smart API. For now private so only Edje Edit makes
173 * use of this, but who knows what will be possible in the future */
174 #define EDJE_SMART_API_VERSION 1
176 typedef struct _Edje_Smart_Api Edje_Smart_Api;
178 struct _Edje_Smart_Api
180 Evas_Smart_Class base;
182 Eina_Bool (*file_set)(Evas_Object *obj, const char *file, const char *group);
185 /* Basic macro to init the Edje Smart API */
186 #define EDJE_SMART_API_INIT(smart_class_init) {smart_class_init, EDJE_SMART_API_VERSION, NULL}
188 #define EDJE_SMART_API_INIT_NULL EDJE_SMART_API_INIT(EVAS_SMART_CLASS_INIT_NULL)
189 #define EDJE_SMART_API_INIT_VERSION EDJE_SMART_API_INIT(EVAS_SMART_CLASS_INIT_VERSION)
190 #define EDJE_SMART_API_INIT_NAME_VERSION(name) EDJE_SMART_API_INIT(EVAS_SMART_CLASS_INIT_NAME_VERSION(name))
192 /* increment this when the EET data descriptors have changed and old
193 * EETs cannot be loaded/used correctly anymore.
195 #define EDJE_FILE_VERSION 3
196 /* increment this when you add new feature to edje file format without
197 * breaking backward compatibility.
199 #define EDJE_FILE_MINOR 4
203 * More example Edje files
205 * ? programs can do multiple actions from one signal
206 * ? add containering (hbox, vbox, table, wrapping multi-line hbox & vbox)
207 * ? text entry widget (single line only)
209 * ? recursions, unsafe callbacks outside Edje etc. with freeze, ref/unref and block/unblock and break_programs needs to be redesigned & fixed
210 * ? all unsafe calls that may result in callbacks must be marked and dealt with
215 EDJE_ASPECT_PREFER_NONE,
216 EDJE_ASPECT_PREFER_VERTICAL,
217 EDJE_ASPECT_PREFER_HORIZONTAL,
218 EDJE_ASPECT_PREFER_BOTH,
219 EDJE_ASPECT_PREFER_SOURCE
220 } Edje_Internal_Aspect;
222 struct _Edje_Perspective
226 Evas_Coord px, py, z0, foc;
228 Eina_Bool global : 1;
231 struct _Edje_Position_Scale
236 struct _Edje_Position
244 Eina_Bool limit; /* should we limit ourself to the size of the source */
247 struct _Edje_Rectangle
254 unsigned char r, g, b, a;
257 struct _Edje_Aspect_Prefer
266 Edje_Aspect_Control mode;
275 typedef struct _Edje_Position_Scale Edje_Alignment;
276 typedef struct _Edje_Position_Scale Edje_Position_Scale;
277 typedef struct _Edje_Position Edje_Position;
278 typedef struct _Edje_Size Edje_Size;
279 typedef struct _Edje_Rectangle Edje_Rectangle;
280 typedef struct _Edje_Color Edje_Color;
281 typedef struct _Edje_Aspect_Prefer Edje_Aspect_Prefer;
282 typedef struct _Edje_Aspect Edje_Aspect;
283 typedef struct _Edje_String Edje_String;
285 typedef struct _Edje_File Edje_File;
286 typedef struct _Edje_Style Edje_Style;
287 typedef struct _Edje_Style_Tag Edje_Style_Tag;
288 typedef struct _Edje_External_Directory Edje_External_Directory;
289 typedef struct _Edje_External_Directory_Entry Edje_External_Directory_Entry;
290 typedef struct _Edje_Font_Directory_Entry Edje_Font_Directory_Entry;
291 typedef struct _Edje_Image_Directory Edje_Image_Directory;
292 typedef struct _Edje_Image_Directory_Entry Edje_Image_Directory_Entry;
293 typedef struct _Edje_Image_Directory_Set Edje_Image_Directory_Set;
294 typedef struct _Edje_Image_Directory_Set_Entry Edje_Image_Directory_Set_Entry;
295 typedef struct _Edje_Limit Edje_Limit;
296 typedef struct _Edje_Sound_Sample Edje_Sound_Sample;
297 typedef struct _Edje_Sound_Tone Edje_Sound_Tone;
298 typedef struct _Edje_Sound_Directory Edje_Sound_Directory;
299 typedef struct _Edje_Program Edje_Program;
300 typedef struct _Edje_Program_Target Edje_Program_Target;
301 typedef struct _Edje_Program_After Edje_Program_After;
302 typedef struct _Edje_Part_Collection_Directory_Entry Edje_Part_Collection_Directory_Entry;
303 typedef struct _Edje_Pack_Element Edje_Pack_Element;
304 typedef struct _Edje_Part_Collection Edje_Part_Collection;
305 typedef struct _Edje_Part Edje_Part;
306 typedef struct _Edje_Part_Api Edje_Part_Api;
307 typedef struct _Edje_Part_Dragable Edje_Part_Dragable;
308 typedef struct _Edje_Part_Image_Id Edje_Part_Image_Id;
309 typedef struct _Edje_Part_Description_Image Edje_Part_Description_Image;
310 typedef struct _Edje_Part_Description_Proxy Edje_Part_Description_Proxy;
311 typedef struct _Edje_Part_Description_Text Edje_Part_Description_Text;
312 typedef struct _Edje_Part_Description_Box Edje_Part_Description_Box;
313 typedef struct _Edje_Part_Description_Table Edje_Part_Description_Table;
314 typedef struct _Edje_Part_Description_External Edje_Part_Description_External;
315 typedef struct _Edje_Part_Description_Common Edje_Part_Description_Common;
316 typedef struct _Edje_Part_Description_Spec_Fill Edje_Part_Description_Spec_Fill;
317 typedef struct _Edje_Part_Description_Spec_Border Edje_Part_Description_Spec_Border;
318 typedef struct _Edje_Part_Description_Spec_Image Edje_Part_Description_Spec_Image;
319 typedef struct _Edje_Part_Description_Spec_Proxy Edje_Part_Description_Spec_Proxy;
320 typedef struct _Edje_Part_Description_Spec_Text Edje_Part_Description_Spec_Text;
321 typedef struct _Edje_Part_Description_Spec_Box Edje_Part_Description_Spec_Box;
322 typedef struct _Edje_Part_Description_Spec_Table Edje_Part_Description_Spec_Table;
323 typedef struct _Edje_Patterns Edje_Patterns;
324 typedef struct _Edje_Part_Box_Animation Edje_Part_Box_Animation;
325 typedef struct _Edje_Part_Limit Edje_Part_Limit;
327 typedef struct _Edje Edje;
328 typedef struct _Edje_Real_Part_State Edje_Real_Part_State;
329 typedef struct _Edje_Real_Part_Drag Edje_Real_Part_Drag;
330 typedef struct _Edje_Real_Part_Set Edje_Real_Part_Set;
331 typedef struct _Edje_Real_Part Edje_Real_Part;
332 typedef struct _Edje_Running_Program Edje_Running_Program;
333 typedef struct _Edje_Signal_Callback Edje_Signal_Callback;
334 typedef struct _Edje_Calc_Params Edje_Calc_Params;
335 typedef struct _Edje_Pending_Program Edje_Pending_Program;
336 typedef struct _Edje_Text_Style Edje_Text_Style;
337 typedef struct _Edje_Color_Class Edje_Color_Class;
338 typedef struct _Edje_Text_Class Edje_Text_Class;
339 typedef struct _Edje_Var Edje_Var;
340 typedef struct _Edje_Var_Int Edje_Var_Int;
341 typedef struct _Edje_Var_Float Edje_Var_Float;
342 typedef struct _Edje_Var_String Edje_Var_String;
343 typedef struct _Edje_Var_List Edje_Var_List;
344 typedef struct _Edje_Var_Hash Edje_Var_Hash;
345 typedef struct _Edje_Var_Animator Edje_Var_Animator;
346 typedef struct _Edje_Var_Timer Edje_Var_Timer;
347 typedef struct _Edje_Var_Pool Edje_Var_Pool;
348 typedef struct _Edje_Signal_Source_Char Edje_Signal_Source_Char;
349 typedef struct _Edje_Text_Insert_Filter_Callback Edje_Text_Insert_Filter_Callback;
350 typedef struct _Edje_Markup_Filter_Callback Edje_Markup_Filter_Callback;
352 #define EDJE_INF_MAX_W 100000
353 #define EDJE_INF_MAX_H 100000
355 #define EDJE_IMAGE_SOURCE_TYPE_NONE 0
356 #define EDJE_IMAGE_SOURCE_TYPE_INLINE_PERFECT 1
357 #define EDJE_IMAGE_SOURCE_TYPE_INLINE_LOSSY 2
358 #define EDJE_IMAGE_SOURCE_TYPE_EXTERNAL 3
359 #define EDJE_IMAGE_SOURCE_TYPE_LAST 4
361 #define EDJE_SOUND_SOURCE_TYPE_NONE 0
362 #define EDJE_SOUND_SOURCE_TYPE_INLINE_RAW 1
363 #define EDJE_SOUND_SOURCE_TYPE_INLINE_COMP 2
364 #define EDJE_SOUND_SOURCE_TYPE_INLINE_LOSSY 3
365 #define EDJE_SOUND_SOURCE_TYPE_INLINE_AS_IS 4
367 #define EDJE_VAR_NONE 0
368 #define EDJE_VAR_INT 1
369 #define EDJE_VAR_FLOAT 2
370 #define EDJE_VAR_STRING 3
371 #define EDJE_VAR_LIST 4
372 #define EDJE_VAR_HASH 5
374 #define EDJE_VAR_MAGIC_BASE 0x12fe84ba
376 #define EDJE_STATE_PARAM_NONE 0
377 #define EDJE_STATE_PARAM_ALIGNMENT 1
378 #define EDJE_STATE_PARAM_MIN 2
379 #define EDJE_STATE_PARAM_MAX 3
380 #define EDJE_STATE_PARAM_STEP 4
381 #define EDJE_STATE_PARAM_ASPECT 5
382 #define EDJE_STATE_PARAM_ASPECT_PREF 6
383 #define EDJE_STATE_PARAM_COLOR 7
384 #define EDJE_STATE_PARAM_COLOR2 8
385 #define EDJE_STATE_PARAM_COLOR3 9
386 #define EDJE_STATE_PARAM_COLOR_CLASS 10
387 #define EDJE_STATE_PARAM_REL1 11
388 #define EDJE_STATE_PARAM_REL1_TO 12
389 #define EDJE_STATE_PARAM_REL1_OFFSET 13
390 #define EDJE_STATE_PARAM_REL2 14
391 #define EDJE_STATE_PARAM_REL2_TO 15
392 #define EDJE_STATE_PARAM_REL2_OFFSET 16
393 #define EDJE_STATE_PARAM_IMAGE 17
394 #define EDJE_STATE_PARAM_BORDER 18
395 #define EDJE_STATE_PARAM_FILL_SMOOTH 19
396 #define EDJE_STATE_PARAM_FILL_POS 20
397 #define EDJE_STATE_PARAM_FILL_SIZE 21
398 #define EDJE_STATE_PARAM_TEXT 22
399 #define EDJE_STATE_PARAM_TEXT_CLASS 23
400 #define EDJE_STATE_PARAM_TEXT_FONT 24
401 #define EDJE_STATE_PARAM_TEXT_STYLE 25
402 #define EDJE_STATE_PARAM_TEXT_SIZE 26
403 #define EDJE_STATE_PARAM_TEXT_FIT 27
404 #define EDJE_STATE_PARAM_TEXT_MIN 28
405 #define EDJE_STATE_PARAM_TEXT_MAX 29
406 #define EDJE_STATE_PARAM_TEXT_ALIGN 30
407 #define EDJE_STATE_PARAM_VISIBLE 31
408 #define EDJE_STATE_PARAM_MAP_OM 32
409 #define EDJE_STATE_PARAM_MAP_PERSP 33
410 #define EDJE_STATE_PARAM_MAP_LIGNT 34
411 #define EDJE_STATE_PARAM_MAP_ROT_CENTER 35
412 #define EDJE_STATE_PARAM_MAP_ROT_X 36
413 #define EDJE_STATE_PARAM_MAP_ROT_Y 37
414 #define EDJE_STATE_PARAM_MAP_ROT_Z 38
415 #define EDJE_STATE_PARAM_MAP_BACK_CULL 39
416 #define EDJE_STATE_PARAM_MAP_PERSP_ON 40
417 #define EDJE_STATE_PARAM_PERSP_ZPLANE 41
418 #define EDJE_STATE_PARAM_PERSP_FOCAL 42
419 #define EDJE_STATE_PARAM_LAST 43
421 #define EDJE_ENTRY_EDIT_MODE_NONE 0
422 #define EDJE_ENTRY_EDIT_MODE_SELECTABLE 1
423 #define EDJE_ENTRY_EDIT_MODE_EDITABLE 2
424 #define EDJE_ENTRY_EDIT_MODE_PASSWORD 3
426 #define EDJE_ENTRY_SELECTION_MODE_DEFAULT 0
427 #define EDJE_ENTRY_SELECTION_MODE_EXPLICIT 1
429 #define EDJE_ENTRY_CURSOR_MODE_UNDER 0
430 #define EDJE_ENTRY_CURSOR_MODE_BEFORE 1
432 #define EDJE_ORIENTATION_AUTO 0
433 #define EDJE_ORIENTATION_LTR 1
434 #define EDJE_ORIENTATION_RTL 2
436 #define EDJE_PART_PATH_SEPARATOR ':'
437 #define EDJE_PART_PATH_SEPARATOR_STRING ":"
438 #define EDJE_PART_PATH_SEPARATOR_INDEXL '['
439 #define EDJE_PART_PATH_SEPARATOR_INDEXR ']'
444 #define FLAG_XY (FLAG_X | FLAG_Y)
453 Edje_External_Directory *external_dir;
454 Edje_Image_Directory *image_dir;
455 Edje_Sound_Directory *sound_dir;
458 Eina_List *color_classes;
459 Eina_Hash *color_hash;
462 const char *compiler;
470 Eina_Hash *collection;
471 Eina_List *collection_cache;
473 Edje_Patterns *collection_patterns;
478 Eio_Monitor *monitor;
481 Ecore_Timer *timeout;
484 unsigned char free_strings : 1;
485 unsigned char dangling : 1;
486 unsigned char warning : 1;
493 Evas_Textblock_Style *style;
496 struct _Edje_Style_Tag
502 const char *text_class;
508 struct _Edje_Font_Directory_Entry
510 const char *entry; /* the name of the font */
511 const char *file; /* the name of the file */
516 struct _Edje_External_Directory
518 Edje_External_Directory_Entry *entries; /* a list of Edje_External_Directory_Entry */
519 unsigned int entries_count;
522 struct _Edje_External_Directory_Entry
524 const char *entry; /* the name of the external */
534 struct _Edje_Image_Directory
536 Edje_Image_Directory_Entry *entries; /* an array of Edje_Image_Directory_Entry */
537 unsigned int entries_count;
539 Edje_Image_Directory_Set *sets;
540 unsigned int sets_count; /* an array of Edje_Image_Directory_Set */
543 struct _Edje_Image_Directory_Entry
545 const char *entry; /* the nominal name of the image - if any */
546 int source_type; /* alternate source mode. 0 = none */
547 int source_param; /* extra params on encoding */
548 int id; /* the id no. of the image */
551 struct _Edje_Image_Directory_Set
559 struct _Edje_Image_Directory_Set_Entry
572 struct _Edje_Sound_Sample /*Sound Sample*/
574 const char *name; /* the nominal name of the sound */
575 const char *snd_src; /* Sound source Wav file */
576 int compression; /* Compression - RAW, LOSSLESS COMP , LOSSY ) */
577 int mode; /* alternate source mode. 0 = none */
579 int id; /* the id no. of the sound */
582 struct _Edje_Sound_Tone /*Sound Sample*/
584 const char *name; /* the nominal name of the sound - if any */
585 int value; /* alternate source mode. 0 = none */
586 int id; /* the id no. of the sound */
589 struct _Edje_Sound_Directory
592 Edje_Sound_Sample *samples; /* an array of Edje_Sound_Sample entries */
593 unsigned int samples_count;
595 Edje_Sound_Tone *tones; /* an array of Edje_Sound_Tone entries */
596 unsigned int tones_count;
601 struct _Edje_Program /* a conditional program to be run */
603 int id; /* id of program */
604 const char *name; /* name of the action */
606 const char *signal; /* if signal emission name matches the glob here... */
607 const char *source; /* if part that emitted this (name) matches this glob */
608 const char *sample_name;
609 const char *tone_name;
615 const char *state; /* if state is not set, we will try with source */
616 } filter; /* the part filter.part should be in state filter.state for signal to be accepted */
623 int action; /* type - set state, stop action, set drag pos etc. */
624 const char *state; /* what state of alternates to apply, NULL = default */
625 const char *state2; /* what other state to use - for signal emit action */
626 double value; /* value of state to apply (if multiple names match) */
627 double value2; /* other value for drag actions */
630 int mode; /* how to tween - linear, sinusoidal etc. */
631 FLOAT_T time; /* time to graduate between current and new state */
632 FLOAT_T v1; /* other value for drag actions */
633 FLOAT_T v2; /* other value for drag actions */
636 Eina_List *targets; /* list of target parts to apply the state to */
638 Eina_List *after; /* list of actions to run at the end of this, for looping */
642 const char *description;
645 /* used for PARAM_COPY (param names in state and state2 above!) */
647 int src; /* part where parameter is being retrieved */
648 int dst; /* part where parameter is being stored */
654 struct _Edje_Program_Target /* the target of an action */
656 int id; /* just the part id no, or action id no */
659 struct _Edje_Program_After /* the action to run after another action */
672 #define PART_TYPE_FIELDS(TYPE) \
685 struct _Edje_Part_Collection_Directory_Entry
687 const char *entry; /* the nominal name of the part collection */
688 int id; /* the id of this named part collection */
692 PART_TYPE_FIELDS(int)
698 PART_TYPE_FIELDS(Eina_Mempool *)
704 PART_TYPE_FIELDS(Eina_Mempool *)
705 } mp_rtl; /* For Right To Left interface */
707 Edje_Part_Collection *ref;
714 struct _Edje_Pack_Element
716 unsigned char type; /* only GROUP supported for now */
717 Edje_Real_Part *parent; /* pointer to the table/box that hold it, set at runtime */
718 const char *name; /* if != NULL, will be set with evas_object_name_set */
719 const char *source; /* group name to use as source for this element */
720 Edje_Size min, prefer, max;
724 Edje_Alignment align;
725 Edje_Alignment weight;
727 const char *options; /* extra options for custom objects */
728 /* table specific follows */
730 unsigned short colspan, rowspan;
734 EDJE_PART_LIMIT_UNKNOWN = 0,
735 EDJE_PART_LIMIT_BELOW,
736 EDJE_PART_LIMIT_ZERO,
738 } Edje_Part_Limit_State;
740 struct _Edje_Part_Limit
744 Edje_Part_Limit_State width; /* -1, 0 or 1 */
745 Edje_Part_Limit_State height; /* -1, 0, or 1 */
750 struct _Edje_Part_Collection
752 struct { /* list of Edje_Program */
753 Edje_Program **fnmatch; /* complex match with "*?[\" */
754 unsigned int fnmatch_count;
756 Edje_Program **strcmp; /* No special caractere, plain strcmp does the work */
757 unsigned int strcmp_count;
759 Edje_Program **strncmp; /* Finish by * or ?, plain strncmp does the work */
760 unsigned int strncmp_count;
762 Edje_Program **strrncmp; /* Start with * or ?, reverse strncmp will do the job */
763 unsigned int strrncmp_count;
765 Edje_Program **nocmp; /* Empty signal/source that will never match */
766 unsigned int nocmp_count;
769 struct { /* list of limit that need to be monitored */
770 Edje_Limit **vertical;
771 unsigned int vertical_count;
773 Edje_Limit **horizontal;
774 unsigned int horizontal_count;
776 Edje_Part_Limit *parts;
777 unsigned int parts_count;
780 Edje_Part **parts; /* an array of Edje_Part */
781 unsigned int parts_count;
785 int id; /* the collection id */
787 Eina_Hash *alias; /* aliasing part */
788 Eina_Hash *aliased; /* invert match of alias */
792 unsigned char orientation;
797 #ifdef EDJE_PROGRAM_CACHE
799 Eina_Hash *no_matches;
804 Embryo_Program *script; /* all the embryo script code for this group */
807 unsigned char script_only;
809 unsigned char lua_script_only;
811 unsigned char broadcast_signal;
813 unsigned char checked : 1;
816 struct _Edje_Part_Dragable
818 int step_x; /* drag jumps n pixels (0 = no limit) */
819 int step_y; /* drag jumps n pixels (0 = no limit) */
821 int count_x; /* drag area divided by n (0 = no limit) */
822 int count_y; /* drag area divided by n (0 = no limit) */
824 int confine_id; /* dragging within this bit, -1 = no */
827 int event_id; /* If it is used as scrollbar */
829 signed char x; /* can u click & drag this bit in x dir */
830 signed char y; /* can u click & drag this bit in y dir */
833 struct _Edje_Part_Api
836 const char *description;
839 typedef struct _Edje_Part_Description_List Edje_Part_Description_List;
840 struct _Edje_Part_Description_List
842 Edje_Part_Description_Common **desc;
843 Edje_Part_Description_Common **desc_rtl; /* desc for Right To Left interface */
844 unsigned int desc_count;
849 const char *name; /* the name if any of the part */
850 Edje_Part_Description_Common *default_desc; /* the part descriptor for default */
851 Edje_Part_Description_Common *default_desc_rtl; /* default desc for Right To Left interface */
853 Edje_Part_Description_List other; /* other possible descriptors */
855 const char *source, *source2, *source3, *source4, *source5, *source6;
856 int id; /* its id number */
857 int clip_to_id; /* the part id to clip this one to */
858 Edje_Part_Dragable dragable;
859 Edje_Pack_Element **items; /* packed items for box and table */
860 unsigned int items_count;
861 unsigned char type; /* what type (image, rect, text) */
862 unsigned char effect; /* 0 = plain... */
863 unsigned char mouse_events; /* it will affect/respond to mouse events */
864 unsigned char repeat_events; /* it will repeat events to objects below */
865 Evas_Event_Flags ignore_flags;
866 unsigned char scale; /* should certain properties scale with edje scale factor? */
867 unsigned char precise_is_inside;
868 unsigned char use_alternate_font_metrics;
869 unsigned char pointer_mode;
870 unsigned char entry_mode;
871 unsigned char select_mode;
872 unsigned char cursor_mode;
873 unsigned char multiline;
874 unsigned char access; /* it will be used accessibility feature */
878 struct _Edje_Part_Image_Id
884 struct _Edje_Part_Description_Common
887 double value; /* the value of the state (for ranges) */
888 const char *name; /* the named state if any */
891 Edje_Alignment align; /* 0 <-> 1.0 alignment within allocated space */
894 unsigned char w, h; /* width or height is fixed in side (cannot expand with Edje object size) */
897 struct { // only during recalc
903 Edje_Position step; /* size stepping by n pixels, 0 = none */
904 Edje_Aspect_Prefer aspect;
906 char *color_class; /* how to modify the color */
915 int id_x; /* -1 = whole part collection, or part ID */
916 int id_y; /* -1 = whole part collection, or part ID */
926 unsigned char backcull;
928 unsigned char persp_on;
929 unsigned char smooth;
938 unsigned char visible; /* is it shown */
939 unsigned char limit; /* 0 == no, 1 = width, 2 = height, 3 = both */
942 struct _Edje_Part_Description_Spec_Fill
944 FLOAT_T pos_rel_x; /* fill offset x relative to area */
945 FLOAT_T rel_x; /* relative size compared to area */
946 FLOAT_T pos_rel_y; /* fill offset y relative to area */
947 FLOAT_T rel_y; /* relative size compared to area */
948 int pos_abs_x; /* fill offset x added to fill offset */
949 int abs_x; /* size of fill added to relative fill */
950 int pos_abs_y; /* fill offset y added to fill offset */
951 int abs_y; /* size of fill added to relative fill */
952 int angle; /* angle of fill -- currently only used by grads */
953 int spread; /* spread of fill -- currently only used by grads */
954 char smooth; /* fill with smooth scaling or not */
955 unsigned char type; /* fill coordinate from container (SCALE) or from source image (TILE) */
958 struct _Edje_Part_Description_Spec_Border
960 int l, r, t, b; /* border scaling on image fill */
961 unsigned char no_fill; /* do we fill the center of the image if bordered? 1 == NO!!!! */
962 unsigned char scale; /* scale image border by same as scale factor */
963 FLOAT_T scale_by; /* when border scale above is enabled, border width OUTPUT is scaled by the object or global scale factor. this value adds another multiplier that the global scale is multiplued by first. if <= 0.0 it is not used, and if 1.0 it i s "ineffective" */
966 struct _Edje_Part_Description_Spec_Image
968 Edje_Part_Description_Spec_Fill fill;
970 Edje_Part_Image_Id **tweens; /* list of Edje_Part_Image_Id */
971 unsigned int tweens_count; /* number of tweens */
973 int id; /* the image id to use */
974 int scale_hint; /* evas scale hint */
975 Eina_Bool set; /* if image condition it's content */
977 Edje_Part_Description_Spec_Border border;
980 struct _Edje_Part_Description_Spec_Proxy
982 Edje_Part_Description_Spec_Fill fill;
984 int id; /* the part id to use as a source for this state */
987 struct _Edje_Part_Description_Spec_Text
989 Edje_String text; /* if "" or NULL, then leave text unchanged */
990 char *text_class; /* how to apply/modify the font */
991 Edje_String style; /* the text style if a textblock */
992 Edje_String font; /* if a specific font is asked for */
993 Edje_String repch; /* replacement char for password mode entry */
995 Edje_Alignment align; /* text alignment within bounds */
998 double elipsis; /* 0.0 - 1.0 defining where the elipsis align */
999 int size; /* 0 = use user set size */
1000 int id_source; /* -1 if none */
1001 int id_text_source; /* -1 if none */
1003 unsigned char fit_x; /* resize font size down to fit in x dir */
1004 unsigned char fit_y; /* resize font size down to fit in y dir */
1005 unsigned char min_x; /* if text size should be part min size */
1006 unsigned char min_y; /* if text size should be part min size */
1007 unsigned char max_x; /* if text size should be part max size */
1008 unsigned char max_y; /* if text size should be part max size */
1010 int size_range_max; /* -1 means, no bound. */
1013 struct _Edje_Part_Description_Spec_Box
1015 char *layout, *alt_layout;
1016 Edje_Alignment align;
1025 struct _Edje_Part_Description_Spec_Table
1027 unsigned char homogeneous;
1028 Edje_Alignment align;
1037 struct _Edje_Part_Description_Image
1039 Edje_Part_Description_Common common;
1040 Edje_Part_Description_Spec_Image image;
1043 struct _Edje_Part_Description_Proxy
1045 Edje_Part_Description_Common common;
1046 Edje_Part_Description_Spec_Proxy proxy;
1049 struct _Edje_Part_Description_Text
1051 Edje_Part_Description_Common common;
1052 Edje_Part_Description_Spec_Text text;
1055 struct _Edje_Part_Description_Box
1057 Edje_Part_Description_Common common;
1058 Edje_Part_Description_Spec_Box box;
1061 struct _Edje_Part_Description_Table
1063 Edje_Part_Description_Common common;
1064 Edje_Part_Description_Spec_Table table;
1067 struct _Edje_Part_Description_External
1069 Edje_Part_Description_Common common;
1070 Eina_List *external_params; /* parameters for external objects */
1075 struct _Edje_Signal_Source_Char
1085 struct _Edje_Signals_Sources_Patterns
1088 Edje_Patterns *signals_patterns;
1089 Edje_Patterns *sources_patterns;
1091 Eina_Rbtree *exact_match;
1095 Edje_Program **globing;
1104 typedef struct _Edje_Signals_Sources_Patterns Edje_Signals_Sources_Patterns;
1108 Evas_Object_Smart_Clipped_Data base;
1109 /* This contains (or should):
1110 Evas_Object *clipper; // a big rect to clip this Edje to
1111 Evas *evas; // the Evas this Edje belongs to
1113 const Edje_Smart_Api *api;
1118 Evas_Coord x, y, w, h;
1121 Evas_Object *obj; /* the smart object */
1122 Edje_File *file; /* the file the data comes form */
1123 Edje_Part_Collection *collection; /* the description being used */
1124 Eina_List *actions; /* currently running actions */
1125 Eina_List *callbacks;
1126 Eina_List *pending_actions;
1127 Eina_Hash *color_classes;
1128 Eina_List *text_classes;
1129 /* variable pool for Edje Embryo scripts */
1130 Edje_Var_Pool *var_pool;
1131 /* for faster lookups to avoid nth list walks */
1132 Edje_Real_Part **table_parts;
1133 Edje_Program **table_programs;
1134 Edje_Real_Part *focused_part;
1136 Eina_List *text_insert_filter_callbacks;
1137 Eina_List *markup_filter_callbacks;
1138 void *script_only_data;
1140 int table_programs_size;
1141 unsigned int table_parts_size;
1146 Eina_Hash *text_class;
1147 Eina_Hash *color_class;
1150 Edje_Perspective *persp;
1153 Edje_Signals_Sources_Patterns callbacks;
1154 Edje_Signals_Sources_Patterns programs;
1162 Eina_Bool is_rtl : 1;
1165 Edje_Text_Change_Cb func;
1170 Edje_Message_Handler_Cb func;
1174 int processing_messages;
1181 Eina_Inlist *lua_objs;
1185 Edje_Item_Provider_Cb func;
1189 Eina_List *user_defined;
1191 int walking_callbacks;
1193 unsigned int dirty : 1;
1194 unsigned int recalc : 1;
1195 unsigned int delete_callbacks : 1;
1196 unsigned int just_added_callbacks : 1;
1197 unsigned int have_objects : 1;
1198 unsigned int paused : 1;
1199 unsigned int no_anim : 1;
1200 unsigned int calc_only : 1;
1201 unsigned int walking_actions : 1;
1202 unsigned int block_break : 1;
1203 unsigned int delete_me : 1;
1204 unsigned int postponed : 1;
1205 unsigned int freeze_calc : 1;
1206 unsigned int has_entries : 1;
1207 unsigned int entries_inited : 1;
1208 #ifdef EDJE_CALC_CACHE
1209 unsigned int text_part_change : 1;
1210 unsigned int all_part_change : 1;
1212 unsigned int have_mapped_part : 1;
1213 unsigned int recalc_call : 1;
1214 unsigned int update_hints : 1;
1215 unsigned int recalc_hints : 1;
1218 struct _Edje_Calc_Params
1220 int x, y, w, h; // 16
1221 Edje_Rectangle req; // 16
1222 Edje_Rectangle req_drag; // 16
1223 Edje_Color color; // 4
1227 int x, y, w, h; // 16
1234 int l, r, t, b; // 16
1235 FLOAT_T border_scale_by;
1240 Edje_Alignment align; /* text alignment within bounds */ // 16
1241 double elipsis; // 8
1243 Edje_Color color2, color3; // 8
1263 unsigned char persp_on : 1;
1264 unsigned char lighted : 1;
1265 unsigned char mapped : 1;
1266 unsigned char visible : 1;
1267 unsigned char smooth : 1; // 1
1270 struct _Edje_Real_Part_Set
1272 Edje_Image_Directory_Set_Entry *entry; // 4
1273 Edje_Image_Directory_Set *set; // 4
1278 struct _Edje_Real_Part_State
1280 Edje_Part_Description_Common *description; // 4
1281 Edje_Part_Description_Common *description_rtl; // 4
1282 Edje_Real_Part *rel1_to_x; // 4
1283 Edje_Real_Part *rel1_to_y; // 4
1284 Edje_Real_Part *rel2_to_x; // 4
1285 Edje_Real_Part *rel2_to_y; // 4
1286 #ifdef EDJE_CALC_CACHE
1288 Edje_Calc_Params p; // 96
1290 void *external_params; // 4
1291 Edje_Real_Part_Set *set; // 4
1293 // WITH EDJE_CALC_CACHE 132
1295 struct _Edje_Real_Part_Drag
1298 Edje_Position_Scale val, size, step, page; // 64
1300 unsigned int count; // 4
1306 unsigned char need_reset : 1; // 4
1307 Edje_Real_Part *confine_to; // 4
1310 struct _Edje_Real_Part
1313 Edje_Part *part; // 4
1314 Evas_Object *object; // 4
1315 int x, y, w, h; // 16
1316 Edje_Rectangle req; // 16
1318 Eina_List *items; // 4 //FIXME: only if table/box
1319 Edje_Part_Box_Animation *anim; // 4 //FIXME: Used only if box
1320 void *entry_data; // 4 // FIXME: move to entry section
1322 Evas_Object *swallowed_object; // 4 // FIXME: move with swallow_params data
1324 Edje_Size min, max; // 16
1325 Edje_Aspect aspect; // 12
1326 } swallow_params; // 28 // FIXME: only if type SWALLOW
1328 Edje_Real_Part_Drag *drag; // 4
1329 Edje_Real_Part *events_to; // 4
1332 Edje_Real_Part *source; // 4
1333 Edje_Real_Part *text_source; // 4
1334 const char *text; // 4
1335 Edje_Position offset; // 8 text only
1336 const char *font; // 4 text only
1337 const char *style; // 4 text only
1338 int size; // 4 text only
1340 double in_w, in_h; // 16 text only
1341 int in_size; // 4 text only
1342 const char *in_str; // 4 text only
1343 const char *out_str; // 4 text only
1344 int out_size; // 4 text only
1345 FLOAT_T align_x, align_y; // 16 text only
1346 double elipsis; // 8 text only
1347 int fit_x, fit_y; // 8 text only
1349 } text; // 86 // FIXME make text a potiner to struct and alloc at end
1350 // if part type is TEXT move common members textblock +
1351 // text to front and have smaller struct for textblock
1353 FLOAT_T description_pos; // 8
1354 Edje_Part_Description_Common *chosen_description; // 4
1355 Edje_Real_Part_State param1; // 20
1356 // WITH EDJE_CALC_CACHE: 140
1357 Edje_Real_Part_State *param2, *custom; // 8
1358 Edje_Calc_Params *current; // 4
1360 #ifdef EDJE_CALC_CACHE
1364 Edje_Real_Part *clip_to; // 4
1366 Edje_Running_Program *program; // 4
1368 int clicked_button; // 4
1370 unsigned char calculated; // 1
1371 unsigned char calculating; // 1
1373 unsigned char still_in : 1; // 1
1374 #ifdef EDJE_CALC_CACHE
1375 unsigned char invalidate : 1; // 0
1378 // WITH EDJE_CALC_CACHE: 404
1380 struct _Edje_Running_Program
1383 Edje_Program *program;
1388 struct _Edje_Signal_Callback
1392 Edje_Signal_Cb func;
1394 unsigned char just_added : 1;
1395 unsigned char delete_me : 1;
1396 unsigned char propagate : 1;
1399 struct _Edje_Text_Insert_Filter_Callback
1402 Edje_Text_Filter_Cb func;
1406 struct _Edje_Markup_Filter_Callback
1409 Edje_Markup_Filter_Cb func;
1413 struct _Edje_Pending_Program
1416 Edje_Program *program;
1420 struct _Edje_Text_Style
1426 unsigned char l, r, t, b;
1430 unsigned char color; /* 0 = color, 1, 2 = color2, color3 */
1431 signed char x, y; /* offset */
1432 unsigned char alpha;
1436 struct _Edje_Color_Class
1439 unsigned char r, g, b, a;
1440 unsigned char r2, g2, b2, a2;
1441 unsigned char r3, g3, b3, a3;
1444 struct _Edje_Text_Class
1448 Evas_Font_Size size;
1451 struct _Edje_Var_Int
1456 struct _Edje_Var_Float
1461 struct _Edje_Var_String
1466 struct _Edje_Var_List
1471 struct _Edje_Var_Hash
1476 struct _Edje_Var_Timer
1480 Embryo_Function func;
1485 struct _Edje_Var_Animator
1489 Embryo_Function func;
1495 struct _Edje_Var_Pool
1499 Eina_List *animators;
1517 typedef enum _Edje_Queue
1523 typedef struct _Edje_Message_Signal Edje_Message_Signal;
1524 typedef struct _Edje_Message Edje_Message;
1526 typedef struct _Edje_Message_Signal_Data Edje_Message_Signal_Data;
1527 struct _Edje_Message_Signal_Data
1531 void (*free_func)(void *);
1534 struct _Edje_Message_Signal
1538 Edje_Message_Signal_Data *data;
1541 struct _Edje_Message
1545 Edje_Message_Type type;
1548 Eina_Bool propagated : 1;
1551 typedef enum _Edje_Fill
1553 EDJE_FILL_TYPE_SCALE = 0,
1557 typedef enum _Edje_Match_Error
1560 EDJE_MATCH_ALLOC_ERROR,
1561 EDJE_MATCH_SYNTAX_ERROR
1565 typedef struct _Edje_States Edje_States;
1566 struct _Edje_Patterns
1568 const char **patterns;
1570 Edje_States *states;
1573 Eina_Bool delete_me : 1;
1575 size_t patterns_size;
1580 typedef enum _Edje_User_Defined_Type
1584 EDJE_USER_TABLE_PACK,
1586 EDJE_USER_DRAG_STEP,
1587 EDJE_USER_DRAG_PAGE,
1588 EDJE_USER_DRAG_VALUE,
1590 } Edje_User_Defined_Type;
1592 typedef struct _Edje_User_Defined Edje_User_Defined;
1593 struct _Edje_User_Defined
1595 Edje_User_Defined_Type type;
1614 unsigned short colspan;
1615 unsigned short rowspan;
1626 Edje_Patterns *edje_match_collection_dir_init(const Eina_List *lst);
1627 Edje_Patterns *edje_match_programs_signal_init(Edje_Program * const *array,
1628 unsigned int count);
1629 Edje_Patterns *edje_match_programs_source_init(Edje_Program * const *array,
1630 unsigned int count);
1631 Edje_Patterns *edje_match_callback_signal_init(const Eina_List *lst);
1632 Edje_Patterns *edje_match_callback_source_init(const Eina_List *lst);
1634 Eina_Bool edje_match_collection_dir_exec(const Edje_Patterns *ppat,
1635 const char *string);
1636 Eina_Bool edje_match_programs_exec(const Edje_Patterns *ppat_signal,
1637 const Edje_Patterns *ppat_source,
1640 Edje_Program **programs,
1641 Eina_Bool (*func)(Edje_Program *pr, void *data),
1644 int edje_match_callback_exec(Edje_Patterns *ppat_signal,
1645 Edje_Patterns *ppat_source,
1648 Eina_List *callbacks,
1652 void edje_match_patterns_free(Edje_Patterns *ppat);
1654 Eina_List *edje_match_program_hash_build(Edje_Program * const * programs,
1656 Eina_Rbtree **tree);
1657 Eina_List *edje_match_callback_hash_build(const Eina_List *callbacks,
1658 Eina_Rbtree **tree);
1659 const Eina_List *edje_match_signal_source_hash_get(const char *signal,
1661 const Eina_Rbtree *tree);
1662 void edje_match_signal_source_free(Edje_Signal_Source_Char *key, void *data);
1664 // FIXME remove below 2 eapi decls when edje_convert goes
1665 EAPI void _edje_edd_init(void);
1666 EAPI void _edje_edd_shutdown(void);
1668 EAPI extern Eet_Data_Descriptor *_edje_edd_edje_file;
1669 EAPI extern Eet_Data_Descriptor *_edje_edd_edje_part_collection;
1671 extern int _edje_anim_count;
1672 extern Ecore_Animator *_edje_timer;
1673 extern Eina_List *_edje_animators;
1674 extern Eina_List *_edje_edjes;
1676 extern char *_edje_fontset_append;
1677 extern FLOAT_T _edje_scale;
1678 extern int _edje_freeze_val;
1679 extern int _edje_freeze_calc_count;
1680 extern Eina_List *_edje_freeze_calc_list;
1682 extern Eina_Bool _edje_password_show_last;
1683 extern FLOAT_T _edje_password_show_last_timeout;
1685 extern Eina_Mempool *_edje_real_part_mp;
1686 extern Eina_Mempool *_edje_real_part_state_mp;
1688 extern Eina_Mempool *_emp_RECTANGLE;
1689 extern Eina_Mempool *_emp_TEXT;
1690 extern Eina_Mempool *_emp_IMAGE;
1691 extern Eina_Mempool *_emp_PROXY;
1692 extern Eina_Mempool *_emp_SWALLOW;
1693 extern Eina_Mempool *_emp_TEXTBLOCK;
1694 extern Eina_Mempool *_emp_GROUP;
1695 extern Eina_Mempool *_emp_BOX;
1696 extern Eina_Mempool *_emp_TABLE;
1697 extern Eina_Mempool *_emp_EXTERNAL;
1698 extern Eina_Mempool *_emp_SPACER;
1699 extern Eina_Mempool *_emp_part;
1701 void _edje_part_pos_set(Edje *ed, Edje_Real_Part *ep, int mode, FLOAT_T pos, FLOAT_T v1, FLOAT_T v2);
1702 Edje_Part_Description_Common *_edje_part_description_find(Edje *ed,
1704 const char *name, double val);
1705 void _edje_part_description_apply(Edje *ed, Edje_Real_Part *ep, const char *d1, double v1, const char *d2, double v2);
1706 void _edje_recalc(Edje *ed);
1707 void _edje_recalc_do(Edje *ed);
1708 void _edje_part_recalc_1(Edje *ed, Edje_Real_Part *ep);
1709 int _edje_part_dragable_calc(Edje *ed, Edje_Real_Part *ep, FLOAT_T *x, FLOAT_T *y);
1710 void _edje_dragable_pos_set(Edje *ed, Edje_Real_Part *ep, FLOAT_T x, FLOAT_T y);
1712 Eina_Bool _edje_timer_cb(void *data);
1713 Eina_Bool _edje_pending_timer_cb(void *data);
1714 void _edje_callbacks_add(Evas_Object *obj, Edje *ed, Edje_Real_Part *rp);
1715 void _edje_callbacks_focus_add(Evas_Object *obj, Edje *ed, Edje_Real_Part *rp);
1716 void _edje_callbacks_del(Evas_Object *obj, Edje *ed);
1717 void _edje_callbacks_focus_del(Evas_Object *obj, Edje *ed);
1719 void _edje_edd_init(void);
1720 void _edje_edd_shutdown(void);
1722 int _edje_object_file_set_internal(Evas_Object *obj, const char *file, const char *group, const char *parent, Eina_List *group_path);
1724 void _edje_file_add(Edje *ed);
1725 void _edje_file_del(Edje *ed);
1726 void _edje_file_free(Edje_File *edf);
1727 void _edje_file_cache_shutdown(void);
1728 void _edje_collection_free(Edje_File *edf,
1729 Edje_Part_Collection *ec,
1730 Edje_Part_Collection_Directory_Entry *ce);
1731 void _edje_collection_free_part_description_clean(int type,
1732 Edje_Part_Description_Common *desc,
1733 Eina_Bool free_strings);
1734 void _edje_collection_free_part_description_free(int type,
1735 Edje_Part_Description_Common *desc,
1736 Edje_Part_Collection_Directory_Entry *ce,
1737 Eina_Bool free_strings);
1739 void _edje_object_smart_set(Edje_Smart_Api *sc);
1740 const Edje_Smart_Api * _edje_object_smart_class_get(void);
1742 void _edje_del(Edje *ed);
1743 void _edje_ref(Edje *ed);
1744 void _edje_unref(Edje *ed);
1745 void _edje_clean_objects(Edje *ed);
1746 void _edje_ref(Edje *ed);
1747 void _edje_unref(Edje *ed);
1749 Eina_Bool _edje_program_run_iterate(Edje_Running_Program *runp, double tim);
1750 void _edje_program_end(Edje *ed, Edje_Running_Program *runp);
1751 void _edje_program_run(Edje *ed, Edje_Program *pr, Eina_Bool force, const char *ssig, const char *ssrc);
1752 void _edje_programs_patterns_clean(Edje *ed);
1753 void _edje_programs_patterns_init(Edje *ed);
1754 void _edje_emit(Edje *ed, const char *sig, const char *src);
1755 void _edje_emit_full(Edje *ed, const char *sig, const char *src, void *data, void (*free_func)(void *));
1756 void _edje_emit_handle(Edje *ed, const char *sig, const char *src, Edje_Message_Signal_Data *data, Eina_Bool prop);
1757 void _edje_signals_sources_patterns_clean(Edje_Signals_Sources_Patterns *ssp);
1758 void _edje_callbacks_patterns_clean(Edje *ed);
1760 void _edje_text_init(void);
1761 void _edje_text_part_on_add(Edje *ed, Edje_Real_Part *ep);
1762 void _edje_text_part_on_del(Edje *ed, Edje_Part *ep);
1763 void _edje_text_recalc_apply(Edje *ed,
1765 Edje_Calc_Params *params,
1766 Edje_Part_Description_Text *chosen_desc);
1767 Evas_Font_Size _edje_text_size_calc(Evas_Font_Size size, Edje_Text_Class *tc);
1768 const char * _edje_text_class_font_get(Edje *ed,
1769 Edje_Part_Description_Text *chosen_desc,
1770 int *size, char **free_later);
1773 Edje_Real_Part *_edje_real_part_get(const Edje *ed, const char *part);
1774 Edje_Real_Part *_edje_real_part_recursive_get(const Edje *ed, const char *part);
1775 Edje_Color_Class *_edje_color_class_find(Edje *ed, const char *color_class);
1776 void _edje_color_class_member_direct_del(const char *color_class, void *lookup);
1777 void _edje_color_class_member_add(Edje *ed, const char *color_class);
1778 void _edje_color_class_member_del(Edje *ed, const char *color_class);
1779 void _edje_color_class_on_del(Edje *ed, Edje_Part *ep);
1780 void _edje_color_class_members_free(void);
1781 void _edje_color_class_hash_free(void);
1783 Edje_Text_Class *_edje_text_class_find(Edje *ed, const char *text_class);
1784 void _edje_text_class_member_add(Edje *ed, const char *text_class);
1785 void _edje_text_class_member_del(Edje *ed, const char *text_class);
1786 void _edje_text_class_member_direct_del(const char *text_class, void *lookup);
1787 void _edje_text_class_members_free(void);
1788 void _edje_text_class_hash_free(void);
1790 Edje *_edje_fetch(const Evas_Object *obj) EINA_PURE;
1791 int _edje_freeze(Edje *ed);
1792 int _edje_thaw(Edje *ed);
1793 int _edje_block(Edje *ed);
1794 int _edje_unblock(Edje *ed);
1795 int _edje_block_break(Edje *ed);
1796 void _edje_block_violate(Edje *ed);
1797 void _edje_object_part_swallow_free_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
1798 void _edje_object_part_swallow_changed_hints_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
1799 void _edje_real_part_swallow(Edje_Real_Part *rp, Evas_Object *obj_swallow, Eina_Bool hints_update);
1800 void _edje_real_part_swallow_clear(Edje_Real_Part *rp);
1801 void _edje_box_init(void);
1802 void _edje_box_shutdown(void);
1803 Eina_Bool _edje_box_layout_find(const char *name, Evas_Object_Box_Layout *cb, void **data, void (**free_data)(void *data));
1804 void _edje_box_recalc_apply(Edje *ed __UNUSED__, Edje_Real_Part *ep, Edje_Calc_Params *p3, Edje_Part_Description_Box *chosen_desc);
1805 Eina_Bool _edje_box_layout_add_child(Edje_Real_Part *rp, Evas_Object *child_obj);
1806 void _edje_box_layout_remove_child(Edje_Real_Part *rp, Evas_Object *child_obj);
1807 Edje_Part_Box_Animation * _edje_box_layout_anim_new(Evas_Object *box);
1808 void _edje_box_layout_free_data(void *data);
1810 Eina_Bool _edje_real_part_box_append(Edje_Real_Part *rp, Evas_Object *child_obj);
1811 Eina_Bool _edje_real_part_box_prepend(Edje_Real_Part *rp, Evas_Object *child_obj);
1812 Eina_Bool _edje_real_part_box_insert_before(Edje_Real_Part *rp, Evas_Object *child_obj, const Evas_Object *ref);
1813 Eina_Bool _edje_real_part_box_insert_at(Edje_Real_Part *rp, Evas_Object *child_obj, unsigned int pos);
1814 Evas_Object *_edje_real_part_box_remove(Edje_Real_Part *rp, Evas_Object *child_obj);
1815 Evas_Object *_edje_real_part_box_remove_at(Edje_Real_Part *rp, unsigned int pos);
1816 Eina_Bool _edje_real_part_box_remove_all(Edje_Real_Part *rp, Eina_Bool clear);
1817 Eina_Bool _edje_real_part_table_pack(Edje_Real_Part *rp, Evas_Object *child_obj, unsigned short col, unsigned short row, unsigned short colspan, unsigned short rowspan);
1818 Eina_Bool _edje_real_part_table_unpack(Edje_Real_Part *rp, Evas_Object *child_obj);
1819 void _edje_real_part_table_clear(Edje_Real_Part *rp, Eina_Bool clear);
1820 Evas_Object *_edje_children_get(Edje_Real_Part *rp, const char *partid);
1822 Eina_Bool _edje_object_part_text_raw_set(Evas_Object *obj, Edje_Real_Part *rp, const char *part, const char *text);
1823 char *_edje_text_escape(const char *text);
1824 char *_edje_text_unescape(const char *text);
1826 void _edje_embryo_script_init (Edje_Part_Collection *edc);
1827 void _edje_embryo_script_shutdown (Edje_Part_Collection *edc);
1828 void _edje_embryo_script_reset (Edje *ed);
1829 void _edje_embryo_test_run (Edje *ed, const char *fname, const char *sig, const char *src);
1830 Edje_Var *_edje_var_new (void);
1831 void _edje_var_free (Edje_Var *var);
1832 void _edje_var_init (Edje *ed);
1833 void _edje_var_shutdown (Edje *ed);
1834 int _edje_var_string_id_get (Edje *ed, const char *string);
1835 int _edje_var_var_int_get (Edje *ed, Edje_Var *var);
1836 void _edje_var_var_int_set (Edje *ed, Edje_Var *var, int v);
1837 double _edje_var_var_float_get (Edje *ed, Edje_Var *var);
1838 void _edje_var_var_float_set (Edje *ed, Edje_Var *var, double v);
1839 const char *_edje_var_var_str_get (Edje *ed, Edje_Var *var);
1840 void _edje_var_var_str_set (Edje *ed, Edje_Var *var, const char *str);
1841 int _edje_var_int_get (Edje *ed, int id);
1842 void _edje_var_int_set (Edje *ed, int id, int v);
1843 double _edje_var_float_get (Edje *ed, int id);
1844 void _edje_var_float_set (Edje *ed, int id, double v);
1845 const char *_edje_var_str_get (Edje *ed, int id);
1846 void _edje_var_str_set (Edje *ed, int id, const char *str);
1848 void _edje_var_list_var_append(Edje *ed, int id, Edje_Var *var);
1849 void _edje_var_list_var_prepend(Edje *ed, int id, Edje_Var *var);
1850 void _edje_var_list_var_append_relative(Edje *ed, int id, Edje_Var *var, Edje_Var *relative);
1851 void _edje_var_list_var_prepend_relative(Edje *ed, int id, Edje_Var *var, Edje_Var *relative);
1852 Edje_Var *_edje_var_list_nth(Edje *ed, int id, int n);
1854 int _edje_var_list_count_get(Edje *ed, int id);
1855 void _edje_var_list_remove_nth(Edje *ed, int id, int n);
1857 int _edje_var_list_nth_int_get(Edje *ed, int id, int n);
1858 void _edje_var_list_nth_int_set(Edje *ed, int id, int n, int v);
1859 void _edje_var_list_int_append(Edje *ed, int id, int v);
1860 void _edje_var_list_int_prepend(Edje *ed, int id, int v);
1861 void _edje_var_list_int_insert(Edje *ed, int id, int n, int v);
1863 double _edje_var_list_nth_float_get(Edje *ed, int id, int n);
1864 void _edje_var_list_nth_float_set(Edje *ed, int id, int n, double v);
1865 void _edje_var_list_float_append(Edje *ed, int id, double v);
1866 void _edje_var_list_float_prepend(Edje *ed, int id, double v);
1867 void _edje_var_list_float_insert(Edje *ed, int id, int n, double v);
1869 const char *_edje_var_list_nth_str_get(Edje *ed, int id, int n);
1870 void _edje_var_list_nth_str_set(Edje *ed, int id, int n, const char *v);
1871 void _edje_var_list_str_append(Edje *ed, int id, const char *v);
1872 void _edje_var_list_str_prepend(Edje *ed, int id, const char *v);
1873 void _edje_var_list_str_insert(Edje *ed, int id, int n, const char *v);
1875 int _edje_var_timer_add (Edje *ed, double in, const char *fname, int val);
1876 void _edje_var_timer_del (Edje *ed, int id);
1878 int _edje_var_anim_add (Edje *ed, double len, const char *fname, int val);
1879 void _edje_var_anim_del (Edje *ed, int id);
1881 void _edje_message_init (void);
1882 void _edje_message_shutdown (void);
1883 void _edje_message_cb_set (Edje *ed, void (*func) (void *data, Evas_Object *obj, Edje_Message_Type type, int id, void *msg), void *data);
1884 Edje_Message *_edje_message_new (Edje *ed, Edje_Queue queue, Edje_Message_Type type, int id);
1885 void _edje_message_free (Edje_Message *em);
1886 void _edje_message_propornot_send (Edje *ed, Edje_Queue queue, Edje_Message_Type type, int id, void *emsg, Eina_Bool prop);
1887 void _edje_message_send (Edje *ed, Edje_Queue queue, Edje_Message_Type type, int id, void *emsg);
1888 void _edje_message_parameters_push (Edje_Message *em);
1889 void _edje_message_process (Edje_Message *em);
1890 void _edje_message_queue_process (void);
1891 void _edje_message_queue_clear (void);
1892 void _edje_message_del (Edje *ed);
1894 void _edje_textblock_styles_add(Edje *ed);
1895 void _edje_textblock_styles_del(Edje *ed);
1896 void _edje_textblock_style_all_update(Edje *ed);
1897 void _edje_textblock_style_parse_and_fix(Edje_File *edf);
1898 void _edje_textblock_style_cleanup(Edje_File *edf);
1899 Edje_File *_edje_cache_file_coll_open(const char *file, const char *coll, int *error_ret, Edje_Part_Collection **edc_ret, Edje *ed);
1900 void _edje_cache_coll_clean(Edje_File *edf);
1901 void _edje_cache_coll_flush(Edje_File *edf);
1902 void _edje_cache_coll_unref(Edje_File *edf, Edje_Part_Collection *edc);
1903 void _edje_cache_file_unref(Edje_File *edf);
1905 void _edje_embryo_globals_init(Edje *ed);
1907 #define CHKPARAM(n) if (params[0] != (sizeof(Embryo_Cell) * (n))) return -1;
1908 #define HASNPARAMS(n) (params[0] == (sizeof(Embryo_Cell) * (n)))
1909 #define GETSTR(str, par) { \
1910 Embryo_Cell *___cptr; \
1913 if ((___cptr = embryo_data_address_get(ep, (par)))) { \
1914 ___l = embryo_data_string_length_get(ep, ___cptr); \
1915 if (((str) = alloca(___l + 1))) \
1916 embryo_data_string_get(ep, ___cptr, (str)); } }
1917 #define GETSTREVAS(str, par) { \
1919 if ((par) && (!strcmp((par), (str)))) return 0; \
1920 if ((par)) eina_stringshare_del((par)); \
1921 (par) = (char *)eina_stringshare_add((str)); } \
1922 else (par) = NULL; }
1923 #define GETFLOAT(val, par) { \
1925 if ((___cptr = (float *)embryo_data_address_get(ep, (par)))) { \
1928 #define GETFLOAT_T(val, par) \
1931 if ((___cptr = (float *)embryo_data_address_get(ep, (par)))) \
1933 val = FROM_DOUBLE(*___cptr); \
1937 #define GETINT(val, par) { \
1939 if ((___cptr = (int *)embryo_data_address_get(ep, (par)))) { \
1941 #define SETSTR(str, par) { \
1942 Embryo_Cell *___cptr; \
1943 if ((___cptr = embryo_data_address_get(ep, (par)))) { \
1944 embryo_data_string_set(ep, str, ___cptr); } }
1945 #define SETSTRALLOCATE(s) \
1948 if ((int) strlen((s)) < params[4]) { \
1949 SETSTR((s), params[3]); } \
1952 ss = alloca(strlen((s)) + 1); \
1954 ss[params[4] - 2] = 0; \
1955 SETSTR(ss, params[3]); } } \
1957 SETSTR("", params[3]); \
1959 #define SETFLOAT(val, par) { \
1961 if ((___cptr = (float *)embryo_data_address_get(ep, (par)))) { \
1962 *___cptr = (float)val; } }
1963 #define SETFLOAT_T(val, par) \
1966 if ((___cptr = (float *)embryo_data_address_get(ep, (par)))) \
1968 *___cptr = (float) TO_DOUBLE(val); \
1971 #define SETINT(val, par) { \
1973 if ((___cptr = (int *)embryo_data_address_get(ep, (par)))) { \
1974 *___cptr = (int)val; } }
1976 Eina_Bool _edje_script_only(Edje *ed);
1977 void _edje_script_only_init(Edje *ed);
1978 void _edje_script_only_shutdown(Edje *ed);
1979 void _edje_script_only_show(Edje *ed);
1980 void _edje_script_only_hide(Edje *ed);
1981 void _edje_script_only_move(Edje *ed);
1982 void _edje_script_only_resize(Edje *ed);
1983 void _edje_script_only_message(Edje *ed, Edje_Message *em);
1985 extern jmp_buf _edje_lua_panic_jmp;
1986 #define _edje_lua_panic_here() setjmp(_edje_lua_panic_jmp)
1988 lua_State *_edje_lua_state_get();
1989 lua_State *_edje_lua_new_thread(Edje *ed, lua_State *L);
1990 void _edje_lua_free_thread(Edje *ed, lua_State *L);
1991 void _edje_lua_new_reg(lua_State *L, int index, void *ptr);
1992 void _edje_lua_get_reg(lua_State *L, void *ptr);
1993 void _edje_lua_free_reg(lua_State *L, void *ptr);
1994 void _edje_lua_script_fn_new(Edje *ed);
1995 void _edje_lua_group_fn_new(Edje *ed);
1996 void _edje_lua_init();
1997 void _edje_lua_shutdown();
1999 void __edje_lua_error(const char *file, const char *fnc, int line, lua_State *L, int err_code);
2000 #define _edje_lua_error(L, err_code) \
2001 __edje_lua_error(__FILE__, __FUNCTION__, __LINE__, L, err_code)
2003 Eina_Bool _edje_lua_script_only(Edje *ed);
2004 void _edje_lua_script_only_init(Edje *ed);
2005 void _edje_lua_script_only_shutdown(Edje *ed);
2006 void _edje_lua_script_only_show(Edje *ed);
2007 void _edje_lua_script_only_hide(Edje *ed);
2008 void _edje_lua_script_only_move(Edje *ed);
2009 void _edje_lua_script_only_resize(Edje *ed);
2010 void _edje_lua_script_only_message(Edje *ed, Edje_Message *em);
2012 void _edje_entry_init(Edje *ed);
2013 void _edje_entry_shutdown(Edje *ed);
2014 void _edje_entry_real_part_init(Edje_Real_Part *rp);
2015 void _edje_entry_real_part_shutdown(Edje_Real_Part *rp);
2016 void _edje_entry_real_part_configure(Edje_Real_Part *rp);
2017 const char *_edje_entry_selection_get(Edje_Real_Part *rp);
2018 const char *_edje_entry_text_get(Edje_Real_Part *rp);
2019 void _edje_entry_text_markup_set(Edje_Real_Part *rp, const char *text);
2020 void _edje_entry_text_markup_insert(Edje_Real_Part *rp, const char *text);
2021 void _edje_entry_text_markup_append(Edje_Real_Part *rp, const char *text);
2022 void _edje_entry_set_cursor_start(Edje_Real_Part *rp);
2023 void _edje_entry_set_cursor_end(Edje_Real_Part *rp);
2024 void _edje_entry_cursor_copy(Edje_Real_Part *rp, Edje_Cursor cur, Edje_Cursor dst);
2025 void _edje_entry_select_none(Edje_Real_Part *rp);
2026 void _edje_entry_select_all(Edje_Real_Part *rp);
2027 void _edje_entry_select_begin(Edje_Real_Part *rp);
2028 void _edje_entry_select_extend(Edje_Real_Part *rp);
2029 const Eina_List *_edje_entry_anchor_geometry_get(Edje_Real_Part *rp, const char *anchor);
2030 const Eina_List *_edje_entry_anchors_list(Edje_Real_Part *rp);
2031 Eina_Bool _edje_entry_item_geometry_get(Edje_Real_Part *rp, const char *item, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch);
2032 const Eina_List *_edje_entry_items_list(Edje_Real_Part *rp);
2033 void _edje_entry_cursor_geometry_get(Edje_Real_Part *rp, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch);
2034 void _edje_entry_user_insert(Edje_Real_Part *rp, const char *text);
2035 void _edje_entry_select_allow_set(Edje_Real_Part *rp, Eina_Bool allow);
2036 Eina_Bool _edje_entry_select_allow_get(const Edje_Real_Part *rp);
2037 void _edje_entry_select_abort(Edje_Real_Part *rp);
2038 void *_edje_entry_imf_context_get(Edje_Real_Part *rp);
2039 Eina_Bool _edje_entry_cursor_next(Edje_Real_Part *rp, Edje_Cursor cur);
2040 Eina_Bool _edje_entry_cursor_prev(Edje_Real_Part *rp, Edje_Cursor cur);
2041 Eina_Bool _edje_entry_cursor_up(Edje_Real_Part *rp, Edje_Cursor cur);
2042 Eina_Bool _edje_entry_cursor_down(Edje_Real_Part *rp, Edje_Cursor cur);
2043 void _edje_entry_cursor_begin(Edje_Real_Part *rp, Edje_Cursor cur);
2044 void _edje_entry_cursor_end(Edje_Real_Part *rp, Edje_Cursor cur);
2045 void _edje_entry_cursor_line_begin(Edje_Real_Part *rp, Edje_Cursor cur);
2046 void _edje_entry_cursor_line_end(Edje_Real_Part *rp, Edje_Cursor cur);
2047 Eina_Bool _edje_entry_cursor_coord_set(Edje_Real_Part *rp, Edje_Cursor cur, int x, int y);
2048 Eina_Bool _edje_entry_cursor_is_format_get(Edje_Real_Part *rp, Edje_Cursor cur);
2049 Eina_Bool _edje_entry_cursor_is_visible_format_get(Edje_Real_Part *rp, Edje_Cursor cur);
2050 char *_edje_entry_cursor_content_get(Edje_Real_Part *rp, Edje_Cursor cur);
2051 void _edje_entry_cursor_pos_set(Edje_Real_Part *rp, Edje_Cursor cur, int pos);
2052 int _edje_entry_cursor_pos_get(Edje_Real_Part *rp, Edje_Cursor cur);
2053 void _edje_entry_imf_context_reset(Edje_Real_Part *rp);
2054 void _edje_entry_input_panel_layout_set(Edje_Real_Part *rp, Edje_Input_Panel_Layout layout);
2055 Edje_Input_Panel_Layout _edje_entry_input_panel_layout_get(Edje_Real_Part *rp);
2056 void _edje_entry_autocapital_type_set(Edje_Real_Part *rp, Edje_Text_Autocapital_Type autocapital_type);
2057 Edje_Text_Autocapital_Type _edje_entry_autocapital_type_get(Edje_Real_Part *rp);
2058 void _edje_entry_prediction_allow_set(Edje_Real_Part *rp, Eina_Bool prediction);
2059 Eina_Bool _edje_entry_prediction_allow_get(Edje_Real_Part *rp);
2060 void _edje_entry_input_panel_enabled_set(Edje_Real_Part *rp, Eina_Bool enabled);
2061 Eina_Bool _edje_entry_input_panel_enabled_get(Edje_Real_Part *rp);
2062 void _edje_entry_input_panel_show(Edje_Real_Part *rp);
2063 void _edje_entry_input_panel_hide(Edje_Real_Part *rp);
2064 void _edje_entry_input_panel_language_set(Edje_Real_Part *rp, Edje_Input_Panel_Lang lang);
2065 Edje_Input_Panel_Lang _edje_entry_input_panel_language_get(Edje_Real_Part *rp);
2066 void _edje_entry_input_panel_imdata_set(Edje_Real_Part *rp, const void *data, int len);
2067 void _edje_entry_input_panel_imdata_get(Edje_Real_Part *rp, void *data, int *len);
2068 void _edje_entry_input_panel_return_key_type_set(Edje_Real_Part *rp, Edje_Input_Panel_Return_Key_Type return_key_type);
2069 Edje_Input_Panel_Return_Key_Type _edje_entry_input_panel_return_key_type_get(Edje_Real_Part *rp);
2070 void _edje_entry_input_panel_return_key_disabled_set(Edje_Real_Part *rp, Eina_Bool disabled);
2071 Eina_Bool _edje_entry_input_panel_return_key_disabled_get(Edje_Real_Part *rp);
2073 void _edje_external_init();
2074 void _edje_external_shutdown();
2075 Evas_Object *_edje_external_type_add(const char *type_name, Evas *evas, Evas_Object *parent, const Eina_List *params, const char *part_name);
2076 void _edje_external_signal_emit(Evas_Object *obj, const char *emission, const char *source);
2077 Eina_Bool _edje_external_param_set(Evas_Object *obj, Edje_Real_Part *rp, const Edje_External_Param *param) EINA_ARG_NONNULL(2);
2078 Eina_Bool _edje_external_param_get(const Evas_Object *obj, Edje_Real_Part *rp, Edje_External_Param *param) EINA_ARG_NONNULL(2);
2079 Evas_Object *_edje_external_content_get(const Evas_Object *obj, const char *content) EINA_ARG_NONNULL(1, 2);
2080 void _edje_external_params_free(Eina_List *params, Eina_Bool free_strings);
2081 void _edje_external_recalc_apply(Edje *ed, Edje_Real_Part *ep,
2082 Edje_Calc_Params *params,
2083 Edje_Part_Description_Common *chosen_desc);
2084 void *_edje_external_params_parse(Evas_Object *obj, const Eina_List *params);
2085 void _edje_external_parsed_params_free(Evas_Object *obj, void *params);
2087 Eina_Module *_edje_module_handle_load(const char *module);
2088 void _edje_module_init();
2089 void _edje_module_shutdown();
2091 static inline Eina_Bool
2092 edje_program_is_strncmp(const char *str)
2096 length = strlen(str);
2098 if (strpbrk(str, "*?[\\") != str + length)
2100 if (str[length] == '['
2101 || str[length] == '\\')
2106 static inline Eina_Bool
2107 edje_program_is_strrncmp(const char *str)
2109 if (*str != '*' && *str != '?')
2111 if (strpbrk(str + 1, "*?[\\"))
2115 void edje_object_propagate_callback_add(Evas_Object *obj, void (*func) (void *data, Evas_Object *o, const char *emission, const char *source), void *data);
2118 /* used by edje_cc - private still */
2119 EAPI void _edje_program_insert(Edje_Part_Collection *ed, Edje_Program *p);
2120 EAPI void _edje_program_remove(Edje_Part_Collection *ed, Edje_Program *p);
2122 void _edje_lua2_error_full(const char *file, const char *fnc, int line, lua_State *L, int err_code);
2123 #define _edje_lua2_error(L, err_code) _edje_lua2_error_full(__FILE__, __FUNCTION__, __LINE__, L, err_code)
2124 void _edje_lua2_script_init(Edje *ed);
2125 void _edje_lua2_script_shutdown(Edje *ed);
2126 void _edje_lua2_script_load(Edje_Part_Collection *edc, void *data, int size);
2127 void _edje_lua2_script_unload(Edje_Part_Collection *edc);
2129 void _edje_lua2_script_func_shutdown(Edje *ed);
2130 void _edje_lua2_script_func_show(Edje *ed);
2131 void _edje_lua2_script_func_hide(Edje *ed);
2132 void _edje_lua2_script_func_move(Edje *ed);
2133 void _edje_lua2_script_func_resize(Edje *ed);
2134 void _edje_lua2_script_func_message(Edje *ed, Edje_Message *em);
2135 void _edje_lua2_script_func_signal(Edje *ed, const char *sig, const char *src);
2137 const char *edje_string_get(const Edje_String *es);
2138 const char *edje_string_id_get(const Edje_String *es);
2140 void _edje_object_orientation_inform(Evas_Object *obj);
2142 void _edje_lib_ref(void);
2143 void _edje_lib_unref(void);
2145 void _edje_subobj_register(Edje *ed, Evas_Object *ob);
2146 void _edje_subobj_unregister(Edje *ed, Evas_Object *ob);
2148 void _edje_multisense_init(void);
2149 void _edje_multisense_shutdown(void);
2150 Eina_Bool _edje_multisense_internal_sound_sample_play(Edje *ed, const char *sample_name, const double speed);
2151 Eina_Bool _edje_multisense_internal_sound_tone_play(Edje *ed, const char *tone_name, const double duration);
2153 void _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags, Edje_Calc_Params *state);
2155 void _edje_user_definition_remove(Edje_User_Defined *eud, Evas_Object *child);
2156 void _edje_user_definition_free(Edje_User_Defined *eud);
2158 #ifdef HAVE_LIBREMIX
2159 #include <remix/remix.h>
2163 typedef struct _Edje_Multisense_Env Edje_Multisense_Env;
2165 struct _Edje_Multisense_Env
2167 #ifdef HAVE_LIBREMIX
2172 typedef Eina_Bool (*MULTISENSE_FACTORY_INIT_FUNC) (Edje_Multisense_Env *);
2173 #ifdef HAVE_LIBREMIX
2174 typedef RemixBase* (*MULTISENSE_SOUND_PLAYER_GET_FUNC) (Edje_Multisense_Env *);