forked from enlightenment/efl
147 lines
3.2 KiB
C
147 lines
3.2 KiB
C
#define EFL_UI_FOCUS_OBJECT_PROTECTED
|
|
|
|
#include "efl_ui_test_focus_common.h"
|
|
|
|
//#define DEBUG
|
|
|
|
#define Q(o,_x,_y,_w,_h) \
|
|
do {\
|
|
Eina_Rect rect; \
|
|
rect.x = _x; \
|
|
rect.y = _y; \
|
|
rect.w = _w; \
|
|
rect.h = _h; \
|
|
focus_test_size(o, rect); \
|
|
} while (0)
|
|
|
|
Efl_Ui_Focus_Object*
|
|
focus_test_object_new(const char *name, int x, int y, int w, int h)
|
|
{
|
|
Efl_Ui_Focus_Object *ret;
|
|
|
|
ret = efl_add_ref(FOCUS_TEST_CLASS, NULL,
|
|
efl_name_set(efl_added, name)
|
|
);
|
|
Q(ret, x, y, w, h);
|
|
|
|
return ret;
|
|
}
|
|
|
|
void
|
|
focus_test_setup_cross(Efl_Ui_Focus_Object **middle,
|
|
Efl_Ui_Focus_Object **south,
|
|
Efl_Ui_Focus_Object **north,
|
|
Efl_Ui_Focus_Object **east,
|
|
Efl_Ui_Focus_Object **west)
|
|
{
|
|
|
|
*middle = focus_test_object_new("middle", 40, 40, 20, 20);
|
|
*south = focus_test_object_new("south", 40, 80, 20, 20);
|
|
*north = focus_test_object_new("north", 40, 0, 20, 20);
|
|
*east = focus_test_object_new("east", 80, 40, 20, 20);
|
|
*west = focus_test_object_new("west", 0, 40, 20, 20);
|
|
}
|
|
|
|
|
|
Efl_Ui_Focus_Manager*
|
|
focus_test_manager_new(Efl_Ui_Focus_Object **middle, Eina_Bool is_root)
|
|
{
|
|
Efl_Ui_Focus_Object *root;
|
|
Efl_Ui_Focus_Manager *m;
|
|
|
|
|
|
if (!is_root)
|
|
{
|
|
root = focus_test_object_new("middle", 40, 40, 20, 20);
|
|
}
|
|
else
|
|
{
|
|
|
|
root = efl_add_ref(FOCUS_MANAGER_TEST_CLASS, NULL,
|
|
efl_name_set(efl_added, "middle")
|
|
);
|
|
Q(root, 40,40,20,20);
|
|
}
|
|
m = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL,
|
|
efl_ui_focus_manager_root_set(efl_added, root)
|
|
);
|
|
|
|
if (middle)
|
|
*middle = root;
|
|
|
|
return m;
|
|
}
|
|
|
|
//Test class implementation
|
|
|
|
typedef struct {
|
|
Eina_Rect rect;
|
|
Eina_Bool focus;
|
|
Eo *manager;
|
|
} Focus_Test_Data;
|
|
|
|
EOLIAN static Efl_Object*
|
|
_focus_test_efl_object_constructor(Eo *obj, Focus_Test_Data *pd)
|
|
{
|
|
Eo *eo;
|
|
|
|
eo = efl_constructor(efl_super(obj, FOCUS_TEST_CLASS));
|
|
eina_rectangle_coords_from(&pd->rect.rect, 0, 0, 0, 0);
|
|
return eo;
|
|
}
|
|
|
|
EOLIAN static void
|
|
_focus_test_efl_ui_focus_object_focus_set(Eo *obj, Focus_Test_Data *pd, Eina_Bool focus)
|
|
{
|
|
pd->focus = focus;
|
|
#ifdef DEBUG
|
|
printf("Object %p now focused\n", obj);
|
|
#endif
|
|
efl_ui_focus_object_focus_set(efl_super(obj, FOCUS_TEST_CLASS), focus);
|
|
}
|
|
|
|
EOLIAN static Eina_Rect
|
|
_focus_test_efl_ui_focus_object_focus_geometry_get(const Eo *obj EINA_UNUSED, Focus_Test_Data *pd)
|
|
{
|
|
return pd->rect;
|
|
}
|
|
|
|
EOLIAN static void
|
|
_focus_test_test_size(Eo *obj EINA_UNUSED, Focus_Test_Data *pd, Eina_Rect rect)
|
|
{
|
|
pd->rect = rect;
|
|
}
|
|
|
|
EOLIAN static Eina_Rect
|
|
_focus_test_efl_gfx_entity_geometry_get(const Eo *obj EINA_UNUSED, Focus_Test_Data *pd)
|
|
{
|
|
return pd->rect;
|
|
}
|
|
|
|
EOLIAN static Efl_Ui_Focus_Manager*
|
|
_focus_test_efl_ui_focus_object_focus_manager_get(const Eo *obj EINA_UNUSED, Focus_Test_Data *pd)
|
|
{
|
|
return pd->manager;
|
|
}
|
|
|
|
EOLIAN static Efl_Ui_Focus_Object*
|
|
_focus_test_efl_ui_focus_object_focus_parent_get(const Eo *obj, Focus_Test_Data *pd EINA_UNUSED)
|
|
{
|
|
return efl_parent_get(obj);
|
|
}
|
|
|
|
EOLIAN static void
|
|
_focus_test_manager_set(Eo *obj EINA_UNUSED, Focus_Test_Data *pd, Efl_Ui_Focus_Manager *manager)
|
|
{
|
|
pd->manager = manager;
|
|
}
|
|
|
|
|
|
#include "focus_test.eo.c"
|
|
|
|
typedef struct {
|
|
|
|
} Focus_Manager_Test_Data;
|
|
|
|
#include "focus_manager_test.eo.c"
|