diff options
author | David Walter Seikel | 2012-04-22 09:20:32 +1000 |
---|---|---|
committer | David Walter Seikel | 2012-04-22 09:20:32 +1000 |
commit | 3ad3455551be0d7859ecb02290376206d5e66498 (patch) | |
tree | 497917e12b4d7f458dff9765d9b53f64c4e03fc3 /libraries/elementary/src/lib/elm_grid.c | |
parent | Update EFL to latest beta. (diff) | |
download | SledjHamr-3ad3455551be0d7859ecb02290376206d5e66498.zip SledjHamr-3ad3455551be0d7859ecb02290376206d5e66498.tar.gz SledjHamr-3ad3455551be0d7859ecb02290376206d5e66498.tar.bz2 SledjHamr-3ad3455551be0d7859ecb02290376206d5e66498.tar.xz |
And actually include new files, plus elementary libraries.
Diffstat (limited to '')
-rw-r--r-- | libraries/elementary/src/lib/elm_grid.c | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/libraries/elementary/src/lib/elm_grid.c b/libraries/elementary/src/lib/elm_grid.c new file mode 100644 index 0000000..22f1b23 --- /dev/null +++ b/libraries/elementary/src/lib/elm_grid.c | |||
@@ -0,0 +1,177 @@ | |||
1 | #include <Elementary.h> | ||
2 | #include "elm_priv.h" | ||
3 | |||
4 | typedef struct _Widget_Data Widget_Data; | ||
5 | |||
6 | struct _Widget_Data | ||
7 | { | ||
8 | Evas_Object *obj, *grd; | ||
9 | }; | ||
10 | |||
11 | static const char *widtype = NULL; | ||
12 | static void _del_hook(Evas_Object *obj); | ||
13 | static void _theme_hook(Evas_Object *obj); | ||
14 | |||
15 | static void | ||
16 | _del_hook(Evas_Object *obj) | ||
17 | { | ||
18 | Widget_Data *wd = elm_widget_data_get(obj); | ||
19 | if (!wd) return; | ||
20 | free(wd); | ||
21 | } | ||
22 | |||
23 | static Eina_Bool | ||
24 | _elm_grid_focus_next_hook(const Evas_Object *obj, Elm_Focus_Direction dir, Evas_Object **next) | ||
25 | { | ||
26 | Widget_Data *wd = elm_widget_data_get(obj); | ||
27 | const Eina_List *items; | ||
28 | void *(*list_data_get) (const Eina_List *list); | ||
29 | Eina_List *(*list_free) (Eina_List *list); | ||
30 | |||
31 | if ((!wd) || (!wd->grd)) | ||
32 | return EINA_FALSE; | ||
33 | |||
34 | /* Focus chain */ | ||
35 | /* TODO: Change this to use other chain */ | ||
36 | if ((items = elm_widget_focus_custom_chain_get(obj))) | ||
37 | { | ||
38 | list_data_get = eina_list_data_get; | ||
39 | list_free = NULL; | ||
40 | } | ||
41 | else | ||
42 | { | ||
43 | items = evas_object_grid_children_get(wd->grd); | ||
44 | list_data_get = eina_list_data_get; | ||
45 | list_free = eina_list_free; | ||
46 | |||
47 | if (!items) return EINA_FALSE; | ||
48 | } | ||
49 | |||
50 | Eina_Bool ret = elm_widget_focus_list_next_get(obj, items, list_data_get, | ||
51 | dir, next); | ||
52 | |||
53 | if (list_free) | ||
54 | list_free((Eina_List *)items); | ||
55 | |||
56 | return ret; | ||
57 | } | ||
58 | |||
59 | static void | ||
60 | _mirrored_set(Evas_Object *obj, Eina_Bool rtl) | ||
61 | { | ||
62 | Widget_Data *wd = elm_widget_data_get(obj); | ||
63 | if ((!wd) || (!wd->grd)) return; | ||
64 | evas_object_grid_mirrored_set(wd->grd, rtl); | ||
65 | } | ||
66 | |||
67 | static void | ||
68 | _theme_hook(Evas_Object *obj) | ||
69 | { | ||
70 | _elm_widget_mirrored_reload(obj); | ||
71 | _mirrored_set(obj, elm_widget_mirrored_get(obj)); | ||
72 | } | ||
73 | |||
74 | EAPI Evas_Object * | ||
75 | elm_grid_add(Evas_Object *parent) | ||
76 | { | ||
77 | Evas_Object *obj; | ||
78 | Evas *e; | ||
79 | Widget_Data *wd; | ||
80 | |||
81 | ELM_WIDGET_STANDARD_SETUP(wd, Widget_Data, parent, e, obj, NULL); | ||
82 | ELM_SET_WIDTYPE(widtype, "grid"); | ||
83 | elm_widget_type_set(obj, "grid"); | ||
84 | elm_widget_sub_object_add(parent, obj); | ||
85 | elm_widget_data_set(obj, wd); | ||
86 | elm_widget_del_hook_set(obj, _del_hook); | ||
87 | elm_widget_focus_next_hook_set(obj, _elm_grid_focus_next_hook); | ||
88 | elm_widget_can_focus_set(obj, EINA_FALSE); | ||
89 | elm_widget_theme_hook_set(obj, _theme_hook); | ||
90 | |||
91 | wd->grd = evas_object_grid_add(e); | ||
92 | evas_object_grid_size_set(wd->grd, 100, 100); | ||
93 | elm_widget_resize_object_set(obj, wd->grd); | ||
94 | |||
95 | _mirrored_set(obj, elm_widget_mirrored_get(obj)); | ||
96 | return obj; | ||
97 | } | ||
98 | |||
99 | EAPI void | ||
100 | elm_grid_size_set(Evas_Object *obj, Evas_Coord w, Evas_Coord h) | ||
101 | { | ||
102 | ELM_CHECK_WIDTYPE(obj, widtype); | ||
103 | Widget_Data *wd = elm_widget_data_get(obj); | ||
104 | if (!wd) return; | ||
105 | evas_object_grid_size_set(wd->grd, w, h); | ||
106 | } | ||
107 | |||
108 | EAPI void | ||
109 | elm_grid_size_get(const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h) | ||
110 | { | ||
111 | ELM_CHECK_WIDTYPE(obj, widtype); | ||
112 | Widget_Data *wd = elm_widget_data_get(obj); | ||
113 | if (!wd) return; | ||
114 | evas_object_grid_size_get(wd->grd, w, h); | ||
115 | } | ||
116 | |||
117 | EAPI void | ||
118 | elm_grid_pack(Evas_Object *obj, Evas_Object *subobj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h) | ||
119 | { | ||
120 | ELM_CHECK_WIDTYPE(obj, widtype); | ||
121 | Widget_Data *wd = elm_widget_data_get(obj); | ||
122 | if (!wd) return; | ||
123 | elm_widget_sub_object_add(obj, subobj); | ||
124 | evas_object_grid_pack(wd->grd, subobj, x, y, w, h); | ||
125 | } | ||
126 | |||
127 | EAPI void | ||
128 | elm_grid_unpack(Evas_Object *obj, Evas_Object *subobj) | ||
129 | { | ||
130 | ELM_CHECK_WIDTYPE(obj, widtype); | ||
131 | Widget_Data *wd = elm_widget_data_get(obj); | ||
132 | if (!wd) return; | ||
133 | elm_widget_sub_object_del(obj, subobj); | ||
134 | evas_object_grid_unpack(wd->grd, subobj); | ||
135 | } | ||
136 | |||
137 | EAPI void | ||
138 | elm_grid_clear(Evas_Object *obj, Eina_Bool clear) | ||
139 | { | ||
140 | Eina_List *chld; | ||
141 | Evas_Object *o; | ||
142 | ELM_CHECK_WIDTYPE(obj, widtype); | ||
143 | Widget_Data *wd = elm_widget_data_get(obj); | ||
144 | if (!wd) return; | ||
145 | chld = evas_object_grid_children_get(wd->grd); | ||
146 | EINA_LIST_FREE(chld, o) elm_widget_sub_object_del(obj, o); | ||
147 | evas_object_grid_clear(wd->grd, clear); | ||
148 | } | ||
149 | |||
150 | EAPI void | ||
151 | elm_grid_pack_set(Evas_Object *subobj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h) | ||
152 | { | ||
153 | Evas_Object *obj = elm_widget_parent_widget_get(subobj); | ||
154 | ELM_CHECK_WIDTYPE(obj, widtype); | ||
155 | Widget_Data *wd = elm_widget_data_get(obj); | ||
156 | if (!wd) return; | ||
157 | evas_object_grid_pack(wd->grd, subobj, x, y, w, h); | ||
158 | } | ||
159 | |||
160 | EAPI void | ||
161 | elm_grid_pack_get(Evas_Object *subobj, int *x, int *y, int *w, int *h) | ||
162 | { | ||
163 | Evas_Object *obj = elm_widget_parent_widget_get(subobj); | ||
164 | ELM_CHECK_WIDTYPE(obj, widtype); | ||
165 | Widget_Data *wd = elm_widget_data_get(obj); | ||
166 | if (!wd) return; | ||
167 | evas_object_grid_pack_get(wd->grd, subobj, x, y, w, h); | ||
168 | } | ||
169 | |||
170 | EAPI Eina_List * | ||
171 | elm_grid_children_get(const Evas_Object *obj) | ||
172 | { | ||
173 | ELM_CHECK_WIDTYPE(obj, widtype) NULL; | ||
174 | Widget_Data *wd = elm_widget_data_get(obj); | ||
175 | if (!wd) return NULL; | ||
176 | return evas_object_grid_children_get(wd->grd); | ||
177 | } | ||