3 static void _e_resize_begin(void *data, void *bd);
4 static void _e_resize_update(void *data, void *bd);
5 static void _e_resize_end(void *data, void *bd);
6 static void _e_resize_border_extents(E_Border *bd, int *w, int *h);
7 static void _e_move_begin(void *data, void *bd);
8 static void _e_move_update(void *data, void *bd);
9 static void _e_move_end(void *data, void *bd);
10 static void _e_move_resize_object_coords_set(int x, int y, int w, int h);
12 static E_Popup *_disp_pop = NULL;
13 static Evas_Object *_obj = NULL;
14 static Eina_List *hooks = NULL;
15 static int visible = 0;
22 e_moveresize_init(void)
26 h = e_border_hook_add(E_BORDER_HOOK_RESIZE_BEGIN, _e_resize_begin, NULL);
27 if (h) hooks = eina_list_append(hooks, h);
28 h = e_border_hook_add(E_BORDER_HOOK_RESIZE_UPDATE, _e_resize_update, NULL);
29 if (h) hooks = eina_list_append(hooks, h);
30 h = e_border_hook_add(E_BORDER_HOOK_RESIZE_END, _e_resize_end, NULL);
31 if (h) hooks = eina_list_append(hooks, h);
32 h = e_border_hook_add(E_BORDER_HOOK_MOVE_BEGIN, _e_move_begin, NULL);
33 if (h) hooks = eina_list_append(hooks, h);
34 h = e_border_hook_add(E_BORDER_HOOK_MOVE_UPDATE, _e_move_update, NULL);
35 if (h) hooks = eina_list_append(hooks, h);
36 h = e_border_hook_add(E_BORDER_HOOK_MOVE_END, _e_move_end, NULL);
37 if (h) hooks = eina_list_append(hooks, h);
43 e_moveresize_shutdown(void)
47 EINA_LIST_FREE(hooks, h)
54 _e_resize_begin(void *data __UNUSED__, void *border)
56 E_Border *bd = border;
61 if (_disp_pop) e_object_del(E_OBJECT(_disp_pop));
65 if (!e_config->resize_info_visible)
68 if (e_config->resize_info_follows)
69 _e_move_resize_object_coords_set(bd->x + bd->fx.x, bd->y + bd->fx.y, bd->w, bd->h);
71 _e_move_resize_object_coords_set(bd->zone->x, bd->zone->y, bd->zone->w, bd->zone->h);
73 _e_resize_border_extents(bd, &w, &h);
75 _disp_pop = e_popup_new(bd->zone, 0, 0, 1, 1);
76 if (!_disp_pop) return;
77 e_popup_layer_set(_disp_pop, 255);
78 _obj = edje_object_add(_disp_pop->evas);
79 e_theme_edje_object_set(_obj, "base/theme/borders",
80 "e/widgets/border/default/resize");
81 snprintf(buf, sizeof(buf), "9999x9999");
82 edje_object_part_text_set(_obj, "e.text.label", buf);
84 edje_object_size_min_calc(_obj, &ew, &eh);
85 evas_object_move(_obj, 0, 0);
86 evas_object_resize(_obj, ew, eh);
87 evas_object_show(_obj);
88 e_popup_edje_bg_object_set(_disp_pop, _obj);
92 evas_object_show(_obj);
93 e_popup_show(_disp_pop);
96 snprintf(buf, sizeof(buf), _("%i×%i"), w, h);
97 edje_object_part_text_set(_obj, "e.text.label", buf);
99 e_popup_move_resize(_disp_pop,
100 (obj_x - _disp_pop->zone->x) +
102 (obj_y - _disp_pop->zone->y) +
106 e_popup_show(_disp_pop);
112 _e_resize_end(void *data __UNUSED__, void *border __UNUSED__)
114 if (e_config->resize_info_visible)
118 evas_object_del(_obj);
123 e_object_del(E_OBJECT(_disp_pop));
132 _e_resize_update(void *data __UNUSED__, void *border)
134 E_Border *bd = border;
138 if (!_disp_pop) return;
140 if (e_config->resize_info_follows)
141 _e_move_resize_object_coords_set(bd->x + bd->fx.x, bd->y + bd->fx.y, bd->w, bd->h);
143 _e_move_resize_object_coords_set(bd->zone->x, bd->zone->y, bd->zone->w, bd->zone->h);
145 _e_resize_border_extents(bd, &w, &h);
149 evas_object_show(_obj);
150 e_popup_show(_disp_pop);
153 snprintf(buf, sizeof(buf), _("%i×%i"), w, h);
154 edje_object_part_text_set(_obj, "e.text.label", buf);
158 _e_resize_border_extents(E_Border *bd, int *w, int *h)
160 if ((bd->client.icccm.base_w >= 0) &&
161 (bd->client.icccm.base_h >= 0))
163 if (bd->client.icccm.step_w > 0)
164 *w = (bd->client.w - bd->client.icccm.base_w) / bd->client.icccm.step_w;
167 if (bd->client.icccm.step_h > 0)
168 *h = (bd->client.h - bd->client.icccm.base_h) / bd->client.icccm.step_h;
174 if (bd->client.icccm.step_w > 0)
175 *w = (bd->client.w - bd->client.icccm.min_w) / bd->client.icccm.step_w;
178 if (bd->client.icccm.step_h > 0)
179 *h = (bd->client.h - bd->client.icccm.min_h) / bd->client.icccm.step_h;
186 _e_move_begin(void *data __UNUSED__, void *border)
188 E_Border *bd = border;
192 if (_disp_pop) e_object_del(E_OBJECT(_disp_pop));
196 if (!e_config->move_info_visible)
199 if (e_config->move_info_follows)
200 _e_move_resize_object_coords_set(bd->x + bd->fx.x, bd->y + bd->fx.y, bd->w, bd->h);
202 _e_move_resize_object_coords_set(bd->zone->x, bd->zone->y, bd->zone->w, bd->zone->h);
204 _disp_pop = e_popup_new(bd->zone, 0, 0, 1, 1);
205 _obj = edje_object_add(_disp_pop->evas);
206 e_theme_edje_object_set(_obj, "base/theme/borders",
207 "e/widgets/border/default/move");
208 snprintf(buf, sizeof(buf), "9999 9999");
209 edje_object_part_text_set(_obj, "e.text.label", buf);
211 edje_object_size_min_calc(_obj, &ew, &eh);
212 evas_object_move(_obj, 0, 0);
213 evas_object_resize(_obj, ew, eh);
214 evas_object_show(_obj);
215 e_popup_edje_bg_object_set(_disp_pop, _obj);
217 e_popup_move_resize(_disp_pop,
218 (obj_x - _disp_pop->zone->x) +
220 (obj_y - _disp_pop->zone->y) +
226 _e_move_end(void *data __UNUSED__, void *border __UNUSED__)
228 if (e_config->move_info_visible)
232 evas_object_del(_obj);
237 e_object_del(E_OBJECT(_disp_pop));
246 _e_move_update(void *data __UNUSED__, void *border)
248 E_Border *bd = border;
251 if (!_disp_pop) return;
253 if (e_config->move_info_follows)
254 _e_move_resize_object_coords_set(bd->x + bd->fx.x, bd->y + bd->fx.y, bd->w, bd->h);
256 _e_move_resize_object_coords_set(bd->zone->x, bd->zone->y, bd->zone->w, bd->zone->h);
260 evas_object_show(_obj);
261 e_popup_show(_disp_pop);
264 snprintf(buf, sizeof(buf), "%i %i", bd->x, bd->y);
265 edje_object_part_text_set(_obj, "e.text.label", buf);
269 _e_move_resize_object_coords_set(int x, int y, int w, int h)
275 if ((_disp_pop) && (e_config->move_info_visible) && (visible))
277 e_popup_move(_disp_pop,
278 (obj_x - _disp_pop->zone->x) +
279 ((obj_w - _disp_pop->w) / 2),
280 (obj_y - _disp_pop->zone->y) +
281 ((obj_h - _disp_pop->h) / 2)