efl
331 строка · 11.9 Кб
1#ifdef HAVE_CONFIG_H2# include "elementary_config.h"3#endif4
5#include <Efl_Ui.h>6#include <Elementary.h>7#include "test.h"8
9static Eo *layout, *btn1, *btn2, *btn3;10
11typedef enum {12LEFT,13RIGHT,14TOP,15BOTTOM
16} Options;17
18static void19_btn_color_clicked_cb(void *data, const Efl_Event *event EINA_UNUSED)20{
21Eo *l = data;22
23static Eina_Bool changed = EINA_TRUE;24
25if (changed)26efl_gfx_color_set(l, 0, 88, 204, 255);27else28efl_gfx_color_set(l, 255, 255, 255, 255);29
30changed = !changed;31}
32
33static void34_btn_clicked_to_cb(void *data, const Efl_Event *event)35{
36Eo *to, *btn, *obj = event->object;37Options opt = (Options)data;38double relative;39
40btn = efl_key_wref_get(obj, "btn");41to = efl_key_wref_get(obj, "to");42
43do44{45if (to == layout)46to = btn1;47else if (to == btn1)48to = btn2;49else if (to == btn2)50to = btn3;51else if (to == btn3)52to = layout;53}54while (btn == to);55efl_key_wref_set(obj, "to", to);56
57switch (opt)58{59case LEFT:60efl_ui_relative_container_relation_left_get(layout, btn, NULL, &relative);61efl_ui_relative_container_relation_left_set(layout, btn, to, relative);62break;63case RIGHT:64efl_ui_relative_container_relation_right_get(layout, btn, NULL, &relative);65efl_ui_relative_container_relation_right_set(layout, btn, to, relative);66break;67case TOP:68efl_ui_relative_container_relation_top_get(layout, btn, NULL, &relative);69efl_ui_relative_container_relation_top_set(layout, btn, to, relative);70break;71case BOTTOM:72efl_ui_relative_container_relation_bottom_get(layout, btn, NULL, &relative);73efl_ui_relative_container_relation_bottom_set(layout, btn, to, relative);74break;75}76efl_text_set(obj, ((to == layout) ? "parent" : (char *)efl_text_get(to)));77}
78
79static void80_slider_changed_relative_cb(void *data, const Efl_Event *event)81{
82Options opt = (Options)data;83Eo *btn, *slider = event->object;84double val;85
86btn = efl_key_wref_get(slider, "btn");87val = efl_ui_range_value_get(slider);88
89switch (opt)90{91case LEFT:92efl_ui_relative_container_relation_left_set(layout, btn, NULL, val);93break;94case RIGHT:95efl_ui_relative_container_relation_right_set(layout, btn, NULL, val);96break;97case TOP:98efl_ui_relative_container_relation_top_set(layout, btn, NULL, val);99break;100case BOTTOM:101efl_ui_relative_container_relation_bottom_set(layout, btn, NULL, val);102break;103}104}
105
106static void107_slider_changed_align_cb(void *data, const Efl_Event *event)108{
109char opt = (char)(uintptr_t)data;110Eo *btn, *slider = event->object;111double val, x, y;112
113btn = efl_key_wref_get(slider, "btn");114val = efl_ui_range_value_get(slider);115
116efl_gfx_hint_align_get(btn, &x, &y);117if (opt == 'x')118efl_gfx_hint_align_set(btn, val, y);119else if (opt == 'y')120efl_gfx_hint_align_set(btn, x, val);121}
122
123static void124_setter_add(Eo *vbox, Eo *btn, Options option)125{
126Eo *to, *hbox;127char *text = NULL, *btn_text;128double relative;129
130switch (option)131{132case LEFT:133text = "left";134efl_ui_relative_container_relation_left_get(layout, btn, &to, &relative);135break;136case RIGHT:137text = "right";138efl_ui_relative_container_relation_right_get(layout, btn, &to, &relative);139break;140case TOP:141text = "top";142efl_ui_relative_container_relation_top_get(layout, btn, &to, &relative);143break;144case BOTTOM:145text = "bottom";146efl_ui_relative_container_relation_bottom_get(layout, btn, &to, &relative);147break;148}149btn_text = ((to == layout) ? "parent" : (char *)efl_text_get(to));150
151hbox = efl_add(EFL_UI_BOX_CLASS, vbox,152efl_ui_layout_orientation_set(efl_added, EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL),153efl_gfx_arrangement_content_padding_set(efl_added, 2, 2),154efl_pack(vbox, efl_added));155
156efl_add(EFL_UI_TEXTBOX_CLASS, hbox,157efl_text_set(efl_added, text),158efl_text_interactive_editable_set(efl_added, EINA_FALSE),159efl_text_vertical_align_set(efl_added, 0.5),160efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(40, 0)),161efl_gfx_hint_weight_set(efl_added, 0, EFL_GFX_HINT_EXPAND),162efl_pack(hbox, efl_added));163
164efl_add(EFL_UI_BUTTON_CLASS, hbox,165efl_text_set(efl_added, btn_text),166efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(60, 0)),167efl_key_wref_set(efl_added, "to", to),168efl_key_wref_set(efl_added, "btn", btn),169efl_gfx_hint_weight_set(efl_added, 0, EFL_GFX_HINT_EXPAND),170efl_event_callback_add(efl_added, EFL_INPUT_EVENT_CLICKED, _btn_clicked_to_cb, (void *)option),171efl_pack(hbox, efl_added));172
173efl_add(EFL_UI_SLIDER_CLASS, hbox,174efl_ui_range_limits_set(efl_added, 0.0, 1.0),175efl_ui_range_step_set(efl_added, 0.1),176efl_ui_range_value_set(efl_added, relative),177efl_key_wref_set(efl_added, "btn", btn),178efl_event_callback_add(efl_added, EFL_UI_RANGE_EVENT_CHANGED, _slider_changed_relative_cb, (void *)option),179efl_pack(hbox, efl_added));180}
181
182static void183_button_frame_add(Eo *box, Eo *btn)184{
185Eo *f, *vbox, *hbox;186double align_x, align_y;187
188f = efl_add(EFL_UI_FRAME_CLASS, box,189efl_text_set(efl_added, efl_text_get(btn)),190efl_gfx_hint_weight_set(efl_added, EFL_GFX_HINT_EXPAND, 0),191efl_pack(box, efl_added));192
193vbox = efl_add(EFL_UI_BOX_CLASS, f,194efl_ui_layout_orientation_set(efl_added, EFL_UI_LAYOUT_ORIENTATION_VERTICAL),195efl_gfx_arrangement_content_padding_set(efl_added, 2, 2),196efl_gfx_hint_margin_set(efl_added, 2, 2, 2, 2),197efl_content_set(f, efl_added));198
199hbox = efl_add(EFL_UI_BOX_CLASS, vbox,200efl_ui_layout_orientation_set(efl_added, EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL),201efl_gfx_arrangement_content_padding_set(efl_added, 2, 2),202efl_pack(vbox, efl_added));203
204efl_add(EFL_CANVAS_RECTANGLE_CLASS, hbox,205efl_gfx_color_set(efl_added, 0, 0, 0, 0),206efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(40, 0)),207efl_gfx_hint_weight_set(efl_added, 0, EFL_GFX_HINT_EXPAND),208efl_pack(hbox, efl_added));209
210efl_add(EFL_UI_TEXTBOX_CLASS, hbox,211efl_text_set(efl_added, "to"),212efl_text_interactive_editable_set(efl_added, EINA_FALSE),213efl_text_horizontal_align_set(efl_added, 0.5),214efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(60, 0)),215efl_gfx_hint_weight_set(efl_added, 0, EFL_GFX_HINT_EXPAND),216efl_pack(hbox, efl_added));217
218efl_add(EFL_UI_TEXTBOX_CLASS, hbox,219efl_text_set(efl_added, "relative"),220efl_text_horizontal_align_set(efl_added, 0.5),221efl_text_interactive_editable_set(efl_added, EINA_FALSE),222efl_pack(hbox, efl_added));223
224_setter_add(vbox, btn, LEFT);225_setter_add(vbox, btn, RIGHT);226_setter_add(vbox, btn, TOP);227_setter_add(vbox, btn, BOTTOM);228
229/* align setter */230efl_gfx_hint_align_get(btn, &align_x, &align_y);231
232hbox = efl_add(EFL_UI_BOX_CLASS, vbox,233efl_ui_layout_orientation_set(efl_added, EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL),234efl_gfx_arrangement_content_padding_set(efl_added, 2, 2),235efl_pack(vbox, efl_added));236
237efl_add(EFL_UI_TEXTBOX_CLASS, hbox,238efl_text_set(efl_added, "align_x"),239efl_text_interactive_editable_set(efl_added, EINA_FALSE),240efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(40, 0)),241efl_gfx_hint_weight_set(efl_added, 0, EFL_GFX_HINT_EXPAND),242efl_pack(hbox, efl_added));243
244efl_add(EFL_UI_SLIDER_CLASS, hbox,245efl_ui_range_limits_set(efl_added, 0.0, 1.0),246efl_ui_range_step_set(efl_added, 0.1),247efl_ui_range_value_set(efl_added, align_x),248efl_key_wref_set(efl_added, "btn", btn),249efl_event_callback_add(efl_added, EFL_UI_RANGE_EVENT_CHANGED, _slider_changed_align_cb, (void *)'x'),250efl_pack(hbox, efl_added));251
252hbox = efl_add(EFL_UI_BOX_CLASS, vbox,253efl_ui_layout_orientation_set(efl_added, EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL),254efl_gfx_arrangement_content_padding_set(efl_added, 2, 2),255efl_pack(vbox, efl_added));256
257efl_add(EFL_UI_TEXTBOX_CLASS, hbox,258efl_text_set(efl_added, "align_y"),259efl_text_interactive_editable_set(efl_added, EINA_FALSE),260efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(40, 0)),261efl_gfx_hint_weight_set(efl_added, 0, EFL_GFX_HINT_EXPAND),262efl_pack(hbox, efl_added));263
264efl_add(EFL_UI_SLIDER_CLASS, hbox,265efl_ui_range_limits_set(efl_added, 0.0, 1.0),266efl_ui_range_step_set(efl_added, 0.1),267efl_ui_range_value_set(efl_added, align_y),268efl_key_wref_set(efl_added, "btn", btn),269efl_event_callback_add(efl_added, EFL_UI_RANGE_EVENT_CHANGED, _slider_changed_align_cb, (void *)'y'),270efl_pack(hbox, efl_added));271}
272
273void
274test_ui_relative_container(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)275{
276Eo *win, *vbox, *f, *hbox;277
278win = efl_add(EFL_UI_WIN_CLASS, efl_main_loop_get(),279efl_text_set(efl_added, "Efl.Ui.Relative_Container"),280efl_ui_win_autodel_set(efl_added, EINA_TRUE));281
282vbox = efl_add(EFL_UI_BOX_CLASS, win,283efl_ui_layout_orientation_set(efl_added, EFL_UI_LAYOUT_ORIENTATION_VERTICAL),284efl_gfx_arrangement_content_padding_set(efl_added, 10, 10),285efl_gfx_hint_margin_set(efl_added, 5, 5, 5, 5),286efl_content_set(win, efl_added));287
288/* controls */289f = efl_add(EFL_UI_FRAME_CLASS, vbox,290efl_text_set(efl_added, "Controls"),291efl_gfx_hint_weight_set(efl_added, EFL_GFX_HINT_EXPAND, 0),292efl_pack(vbox, efl_added));293
294hbox = efl_add(EFL_UI_BOX_CLASS, f,295efl_ui_layout_orientation_set(efl_added, EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL),296efl_gfx_arrangement_content_padding_set(efl_added, 10, 0),297efl_content_set(f, efl_added));298
299/* contents */300f = efl_add(EFL_UI_FRAME_CLASS, vbox,301efl_text_set(efl_added, "Contents"),302efl_pack(vbox, efl_added));303
304layout = efl_add(EFL_UI_RELATIVE_CONTAINER_CLASS, f,305efl_content_set(f, efl_added));306
307btn1 = efl_add(EFL_UI_BUTTON_CLASS, layout,308efl_text_set(efl_added, "button1"),309efl_gfx_hint_align_set(efl_added, 0.0, 0.0),310efl_event_callback_add(efl_added, EFL_INPUT_EVENT_CLICKED, _btn_color_clicked_cb, layout),311efl_ui_relative_container_relation_right_set(layout, efl_added, layout, 0.0),312efl_ui_relative_container_relation_bottom_set(layout, efl_added, layout, 0.0));313
314btn2 = efl_add(EFL_UI_BUTTON_CLASS, layout,315efl_text_set(efl_added, "button2"),316efl_gfx_hint_align_set(efl_added, 0.5, 0.0),317efl_ui_relative_container_relation_left_set(layout, efl_added, btn1, 1.0),318efl_ui_relative_container_relation_bottom_set(layout, efl_added, layout, 0.0));319
320btn3 = efl_add(EFL_UI_BUTTON_CLASS, layout,321efl_text_set(efl_added, "button3"),322efl_ui_relative_container_relation_left_set(layout, efl_added, btn2, 0.0),323efl_ui_relative_container_relation_top_set(layout, efl_added, btn2, 1.0));324
325_button_frame_add(hbox, btn1);326_button_frame_add(hbox, btn2);327_button_frame_add(hbox, btn3);328
329efl_gfx_entity_size_set(win, EINA_SIZE2D(600, 400));330efl_gfx_entity_visible_set(win, EINA_TRUE);331}
332