0db71f25540d2cd7dab37ba0c6151b14fa137cb4
[profile/ivi/eobj.git] / src / examples / evas / evas_obj.c
1 #include <Elementary.h>
2
3 #include "Eo.h"
4 #include "evas_obj.h"
5
6 #include "config.h"
7
8 #define MY_CLASS EVAS_OBJ_CLASS
9
10 EAPI Eo_Op EVAS_OBJ_BASE_ID = 0;
11
12 typedef struct
13 {
14    Eina_List *children;
15 } Widget_Data;
16
17 static void
18 _position_set(Eo *obj, void *class_data EINA_UNUSED, va_list *list)
19 {
20    Evas_Object *evas_obj = eo_evas_object_get(obj);
21    Evas_Coord x, y;
22    x = va_arg(*list, Evas_Coord);
23    y = va_arg(*list, Evas_Coord);
24    evas_object_move(evas_obj, x, y);
25 }
26
27 static void
28 _size_set(Eo *obj, void *class_data EINA_UNUSED, va_list *list)
29 {
30    Evas_Object *evas_obj = eo_evas_object_get(obj);
31    Evas_Coord w, h;
32    w = va_arg(*list, Evas_Coord);
33    h = va_arg(*list, Evas_Coord);
34    evas_object_resize(evas_obj, w, h);
35 }
36
37 static void
38 _color_set(Eo *obj, void *class_data EINA_UNUSED, va_list *list)
39 {
40    Evas_Object *evas_obj = eo_evas_object_get(obj);
41    int r, g, b, a;
42    r = va_arg(*list, int);
43    g = va_arg(*list, int);
44    b = va_arg(*list, int);
45    a = va_arg(*list, int);
46    evas_object_color_set(evas_obj, r, g, b, a);
47 }
48
49 static void
50 _color_get(const Eo *obj, const void *class_data EINA_UNUSED, va_list *list)
51 {
52    Evas_Object *evas_obj = eo_evas_object_get(obj);
53    int *r, *g, *b, *a;
54    r = va_arg(*list, int *);
55    g = va_arg(*list, int *);
56    b = va_arg(*list, int *);
57    a = va_arg(*list, int *);
58    evas_object_color_get(evas_obj, r, g, b, a);
59 }
60
61 static void
62 _visibility_set(Eo *obj, void *class_data EINA_UNUSED, va_list *list)
63 {
64    Evas_Object *evas_obj = eo_evas_object_get(obj);
65    Eina_Bool v;
66    v = va_arg(*list, int);
67    if (v) evas_object_show(evas_obj);
68    else evas_object_hide(evas_obj);
69 }
70
71 static void
72 _child_add(Eo *obj, void *class_data, va_list *list)
73 {
74    Widget_Data *wd = class_data;
75    Eo *child;
76    child = va_arg(*list, Eo *);
77    wd->children = eina_list_append(wd->children, eo_xref(child, obj));
78 }
79
80 static void
81 _constructor(Eo *obj, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED)
82 {
83    eo_do_super(obj, eo_constructor());
84
85    /* Add type check. */
86    Eo *parent = eo_parent_get(obj);
87    if (parent)
88       eo_do(parent, evas_obj_child_add(obj));
89 }
90
91 static void
92 _destructor(Eo *obj, void *class_data, va_list *list EINA_UNUSED)
93 {
94    eo_do_super(obj, eo_destructor());
95
96    Widget_Data *wd = class_data;
97
98    Eo *child;
99    EINA_LIST_FREE(wd->children, child)
100      {
101         eo_xunref(child, obj);
102      }
103 }
104
105 static void
106 _class_constructor(Eo_Class *klass)
107 {
108    const Eo_Op_Func_Description func_desc[] = {
109         EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR), _constructor),
110         EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_DESTRUCTOR), _destructor),
111         EO_OP_FUNC(EVAS_OBJ_ID(EVAS_OBJ_SUB_ID_POSITION_SET), _position_set),
112         EO_OP_FUNC(EVAS_OBJ_ID(EVAS_OBJ_SUB_ID_SIZE_SET), _size_set),
113         EO_OP_FUNC(EVAS_OBJ_ID(EVAS_OBJ_SUB_ID_COLOR_SET), _color_set),
114         EO_OP_FUNC_CONST(EVAS_OBJ_ID(EVAS_OBJ_SUB_ID_COLOR_GET), _color_get),
115         EO_OP_FUNC(EVAS_OBJ_ID(EVAS_OBJ_SUB_ID_VISIBILITY_SET), _visibility_set),
116         EO_OP_FUNC(EVAS_OBJ_ID(EVAS_OBJ_SUB_ID_CHILD_ADD), _child_add),
117         EO_OP_FUNC_SENTINEL
118    };
119
120    eo_class_funcs_set(klass, func_desc);
121 }
122
123 static const Eo_Op_Description op_desc[] = {
124      EO_OP_DESCRIPTION(EVAS_OBJ_SUB_ID_POSITION_SET, "Position of an evas object."),
125      EO_OP_DESCRIPTION(EVAS_OBJ_SUB_ID_SIZE_SET, "Size of an evas object."),
126      EO_OP_DESCRIPTION(EVAS_OBJ_SUB_ID_COLOR_SET, "Color of an evas object."),
127      EO_OP_DESCRIPTION_CONST(EVAS_OBJ_SUB_ID_COLOR_GET, "Color of an evas object."),
128      EO_OP_DESCRIPTION(EVAS_OBJ_SUB_ID_VISIBILITY_SET, "Visibility of an evas object."),
129      EO_OP_DESCRIPTION(EVAS_OBJ_SUB_ID_CHILD_ADD, "Add a child eo."),
130      EO_OP_DESCRIPTION_SENTINEL
131 };
132
133 static const Eo_Class_Description class_desc = {
134      "Evas Object",
135      EO_CLASS_TYPE_REGULAR_NO_INSTANT,
136      EO_CLASS_DESCRIPTION_OPS(&EVAS_OBJ_BASE_ID, op_desc, EVAS_OBJ_SUB_ID_LAST),
137      NULL,
138      sizeof(Widget_Data),
139      _class_constructor,
140      NULL
141 };
142
143 EO_DEFINE_CLASS(evas_object_class_get, &class_desc, EO_BASE_CLASS, NULL)