1 /* TODO: support different preference modes ala edje */
4 typedef struct _E_Widget_Data E_Widget_Data;
10 int aspect_w, aspect_h;
11 int aspect_preference;
12 double align_x, align_y;
16 _e_wid_del_hook(Evas_Object *obj)
20 wd = e_widget_data_get(obj);
27 _e_wid_reconfigure(E_Widget_Data *wd)
33 if (!wd->obj || !wd->child) return;
35 evas_object_geometry_get(wd->obj, &px, &py, &pw, &ph);
39 evas_object_resize(wd->child, 0, 0);
44 ad = (double)(wd->aspect_w) / wd->aspect_h;
48 cw = (ch * wd->aspect_w) / wd->aspect_h;
53 ch = (cw * wd->aspect_h) / wd->aspect_w;
56 cx = px + (wd->align_x * (pw - cw));
57 cy = py + (wd->align_y * (ph - ch));
59 evas_object_resize(wd->child, cw, ch);
60 evas_object_move(wd->child, cx, cy);
64 _cb_reconfigure(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
69 _e_wid_reconfigure(wd);
73 e_widget_aspect_add(Evas *evas, int w, int h)
78 obj = e_widget_add(evas);
79 wd = calloc(1, sizeof(E_Widget_Data));
82 e_widget_data_set(obj, wd);
83 e_widget_del_hook_set(obj, _e_wid_del_hook);
85 evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _cb_reconfigure, wd);
86 evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE, _cb_reconfigure, wd);
91 _e_wid_reconfigure(wd);
97 e_widget_aspect_aspect_set(Evas_Object *obj, int w, int h)
101 wd = e_widget_data_get(obj);
106 _e_wid_reconfigure(wd);
110 e_widget_aspect_align_set(Evas_Object *obj, double align_x, double align_y)
114 wd = e_widget_data_get(obj);
117 wd->align_x = align_x;
118 wd->align_y = align_y;
119 _e_wid_reconfigure(wd);
123 e_widget_aspect_child_set(Evas_Object *obj, Evas_Object *child)
128 wd = e_widget_data_get(obj);
132 e_widget_size_min_get(child, &mw, &mh);
133 e_widget_size_min_set(obj, mw, mh);
134 e_widget_sub_object_add(obj, child);
135 _e_wid_reconfigure(wd);