#define DIM_EFL_UI_FOCUS_DIRECTION(dim,neg) dim*2+neg
#define NODE_DIRECTIONS_COUNT 4
-#define DIRECTION_CHECK(dir) (dir >= 0 && dir < EFL_UI_FOCUS_DIRECTION_LAST)
+#define DIRECTION_CHECK(dir) (dir >= EFL_UI_FOCUS_DIRECTION_PREVIOUS && dir < EFL_UI_FOCUS_DIRECTION_LAST)
//#define CALC_DEBUG
#define DEBUG_TUPLE(obj) efl_name_get(obj), efl_class_name_get(obj)
#define F_INF(...) EINA_LOG_DOM_INFO(_focus_log_domain, __VA_ARGS__)
#define F_DBG(...) EINA_LOG_DOM_DBG(_focus_log_domain, __VA_ARGS__)
+#define DIRECTION_ACCESS(V, ID) ((V)->graph.directions[(ID) - 2])
+
typedef struct {
Eina_Bool positive;
Efl_Ui_Focus_Object *anchor;
COMP(EFL_UI_FOCUS_DIRECTION_RIGHT, EFL_UI_FOCUS_DIRECTION_LEFT)
COMP(EFL_UI_FOCUS_DIRECTION_UP, EFL_UI_FOCUS_DIRECTION_DOWN)
- COMP(EFL_UI_FOCUS_DIRECTION_PREV, EFL_UI_FOCUS_DIRECTION_NEXT)
+ COMP(EFL_UI_FOCUS_DIRECTION_PREVIOUS, EFL_UI_FOCUS_DIRECTION_NEXT)
#undef COMP
{
Node *partner;
Eina_List *lnode;
- Border *border = &G(node).directions[direction];
+ Border *border = &DIRECTION_ACCESS(node, direction);
EINA_LIST_FREE(border->partners, partner)
{
- Border *comp_border = &G(partner).directions[_complement(direction)];
+ Border *comp_border = &DIRECTION_ACCESS(partner, _complement(direction));
comp_border->partners = eina_list_remove(comp_border->partners, node);
}
EINA_LIST_FOREACH(border->partners, lnode, partner)
{
- Border *comp_border = &G(partner).directions[_complement(direction)];
+ Border *comp_border = &DIRECTION_ACCESS(partner,_complement(direction));
comp_border->partners = eina_list_append(comp_border->partners, node);
}
Node *n;
Eina_List *l;
//free the graph items
- for(int i = 0;i < NODE_DIRECTIONS_COUNT; i++)
+ for(int i = EFL_UI_FOCUS_DIRECTION_UP;i < NODE_DIRECTIONS_COUNT; i++)
{
border_partners_set(item, i, NULL);
}
printf("NODE %s-%s\n", DEBUG_TUPLE(node->focusable));
-#define DIR_LIST(dir) G(node).directions[dir].partners
+#define DIR_LIST(dir) DIRECTION_ACCESS(node,dir).partners
#define DIR_OUT(dir)\
tmp = DIR_LIST(dir); \
pd->focus_stack = eina_list_remove(pd->focus_stack, node);
//add all neighbors of the node to the dirty list
- for(int i = 0; i < 4; i++)
+ for(int i = EFL_UI_FOCUS_DIRECTION_UP; i < NODE_DIRECTIONS_COUNT; i++)
{
Node *partner;
Eina_List *n;
- EINA_LIST_FOREACH(node->graph.directions[i].partners, n, partner)
+ EINA_LIST_FOREACH(DIRECTION_ACCESS(node, i).partners, n, partner)
{
dirty_add(obj, pd, partner);
}
EINA_ITERATOR_FOREACH(it->real_iterator, node)
{
- for(int i = 0 ;i < NODE_DIRECTIONS_COUNT; i++)
+ for(int i = EFL_UI_FOCUS_DIRECTION_UP ;i < NODE_DIRECTIONS_COUNT; i++)
{
if (node->type != NODE_TYPE_ONLY_LOGICAL &&
- !node->graph.directions[i].partners)
+ !DIRECTION_ACCESS(node, i).partners)
{
*data = node->focusable;
return EINA_TRUE;
//we are searching which of the partners is lower to the history
EINA_LIST_REVERSE_FOREACH(pd->focus_stack, node_list, candidate)
{
- if (eina_list_data_find(G(upper).directions[direction].partners, candidate))
+ if (eina_list_data_find(DIRECTION_ACCESS(upper, direction).partners, candidate))
{
//this is the next accessable part
return candidate;
//if we haven't found anything in the history, use the widget with the smallest distance
{
- Eina_List *lst = G(upper).directions[direction].partners;
+ Eina_List *lst = DIRECTION_ACCESS(upper, direction).partners;
Eina_List *n;
Node *node, *min = NULL;
Eina_Vector2 elem, other;
dirty_flush(obj, pd, upper);
- if (direction == EFL_UI_FOCUS_DIRECTION_PREV
+ if (direction == EFL_UI_FOCUS_DIRECTION_PREVIOUS
|| direction == EFL_UI_FOCUS_DIRECTION_NEXT)
dir = _logical_movement(pd, upper, direction);
else
n = eina_hash_find(pd->node_hash, &old_candidate);
if (direction == EFL_UI_FOCUS_DIRECTION_NEXT ||
- direction == EFL_UI_FOCUS_DIRECTION_PREV)
+ direction == EFL_UI_FOCUS_DIRECTION_PREVIOUS)
{
if (n)
{
dirty_flush(obj, pd, n);
-#define DIR_CLONE(dir) _convert(G(n).directions[dir].partners);
+#define DIR_CLONE(dir) _convert(DIRECTION_ACCESS(n,dir).partners);
res->right = DIR_CLONE(EFL_UI_FOCUS_DIRECTION_RIGHT);
res->left = DIR_CLONE(EFL_UI_FOCUS_DIRECTION_LEFT);
last [[Sentinel value to indicate last enum field during iteration]]
}
-enum Elm.Focus_Direction
+enum Efl.Ui.Focus.Direction
{
[[ Focus directions. ]]
- legacy: elm_focus;
- previous, [[ previous direction ]]
- next, [[ next direction ]]
- up, [[ up direction ]]
- down, [[ down direction ]]
- right, [[ right direction ]]
- left, [[ left direction ]]
+ previous = 0, [[ previous direction ]]
+ next = 1, [[ next direction ]]
+ up = 2, [[ up direction ]]
+ down = 3, [[ down direction ]]
+ right = 4, [[ right direction ]]
+ left = 5, [[ left direction ]]
+ last = 6
}
enum Elm.Focus.Region.Show_Mode