Change the parameter of the elm_toolbar_item_show/bring_in. Add the scroll type.

SVN revision: 79333
This commit is contained in:
Jaehwan Kim 2012-11-15 10:27:46 +00:00
parent 71b1ebfea8
commit add19e4e4f
2 changed files with 77 additions and 16 deletions

View File

@ -267,6 +267,59 @@ _items_size_fit(Evas_Object *obj, Evas_Coord *bl, Evas_Coord view)
if (sumf != 0) *bl = (Evas_Coord)(((sumf + sumb) * view) / sumf);
}
static Eina_Bool
_elm_toolbar_item_coordinates_calc(Elm_Object_Item *item,
Elm_Toolbar_Item_Scrollto_Type type,
Evas_Coord *x,
Evas_Coord *y,
Evas_Coord *w,
Evas_Coord *h)
{
Evas_Coord ix, iy, iw, ih, bx, by, vw, vh;
ELM_TOOLBAR_DATA_GET(WIDGET(item), sd);
sd->s_iface->content_viewport_size_get(WIDGET(item), &vw, &vh);
evas_object_geometry_get(sd->bx, &bx, &by, NULL, NULL);
evas_object_geometry_get(VIEW(item), &ix, &iy, &iw, &ih);
switch (type)
{
case ELM_TOOLBAR_ITEM_SCROLLTO_IN:
*x = ix - bx;
*y = iy - by;
*w = iw;
*h = ih;
break;
case ELM_TOOLBAR_ITEM_SCROLLTO_FIRST:
*x = ix - bx;
*y = iy - by;
*w = vw;
*h = vh;
break;
case ELM_TOOLBAR_ITEM_SCROLLTO_MIDDLE:
*x = ix - bx + (iw / 2) - (vw / 2);
*y = iy - by + (ih / 2) - (vh / 2);
*w = vw;
*h = vh;
break;
case ELM_TOOLBAR_ITEM_SCROLLTO_LAST:
*x = ix - bx + iw - vw;
*y = iy - by + ih - vh;
*w = vw;
*h = vh;
break;
default:
return EINA_FALSE;
}
return EINA_TRUE;
}
static void
_resize_job(void *data)
{
@ -3290,33 +3343,27 @@ elm_toolbar_reorder_mode_get(const Evas_Object *obj)
}
EAPI void
elm_toolbar_item_show(Elm_Object_Item *it)
elm_toolbar_item_show(Elm_Object_Item *it, Elm_Toolbar_Item_Scrollto_Type type)
{
Evas_Coord x, y, w, h, bx, by;
Evas_Coord x, y, w, h;
Elm_Toolbar_Item *item = (Elm_Toolbar_Item *)it;
ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(it);
ELM_TOOLBAR_DATA_GET(WIDGET(item), sd);
evas_object_geometry_get(sd->bx, &bx, &by, NULL, NULL);
evas_object_geometry_get(VIEW(item), &x, &y, &w, &h);
x = x - bx;
y = y - by;
sd->s_iface->content_region_show(WIDGET(item), x, y, w, h);
if (_elm_toolbar_item_coordinates_calc(it, type, &x, &y, &w, &h))
sd->s_iface->content_region_show(WIDGET(item), x, y, w, h);
}
EAPI void
elm_toolbar_item_bring_in(Elm_Object_Item *it)
elm_toolbar_item_bring_in(Elm_Object_Item *it, Elm_Toolbar_Item_Scrollto_Type type)
{
Evas_Coord x, y, w, h, bx, by;
Evas_Coord x, y, w, h;
Elm_Toolbar_Item *item = (Elm_Toolbar_Item *)it;
ELM_TOOLBAR_ITEM_CHECK_OR_RETURN(it);
ELM_TOOLBAR_DATA_GET(WIDGET(item), sd);
evas_object_geometry_get(sd->bx, &bx, &by, NULL, NULL);
evas_object_geometry_get(VIEW(item), &x, &y, &w, &h);
x = x - bx;
y = y - by;
sd->s_iface->region_bring_in(WIDGET(item), x, y, w, h);
if (_elm_toolbar_item_coordinates_calc(it, type, &x, &y, &w, &h))
sd->s_iface->region_bring_in(WIDGET(item), x, y, w, h);
}

View File

@ -81,6 +81,20 @@ typedef enum
ELM_TOOLBAR_SHRINK_LAST /**< Indicates error if returned by elm_toolbar_shrink_mode_get() */
} Elm_Toolbar_Shrink_Mode;
/**
* Defines where to position the item in the toolbar.
*
* @ingroup Toolbar
*/
typedef enum
{
ELM_TOOLBAR_ITEM_SCROLLTO_NONE = 0, /**< no scrollto */
ELM_TOOLBAR_ITEM_SCROLLTO_IN = (1 << 0), /**< to the nearest viewport */
ELM_TOOLBAR_ITEM_SCROLLTO_FIRST = (1 << 1), /**< to the first of viewport */
ELM_TOOLBAR_ITEM_SCROLLTO_MIDDLE = (1 << 2), /**< to the middle of viewport */
ELM_TOOLBAR_ITEM_SCROLLTO_LAST = (1 << 3) /**< to the last of viewport */
} Elm_Toolbar_Item_Scrollto_Type;
typedef struct _Elm_Toolbar_Item_State Elm_Toolbar_Item_State; /**< State of a Elm_Toolbar_Item. Can be created with elm_toolbar_item_state_add() and removed with elm_toolbar_item_state_del(). */
/**
@ -1007,7 +1021,7 @@ EAPI Eina_Bool elm_toolbar_reorder_mode_get(const Evas_Objec
* @since 1.8
* @ingroup Toolbar
*/
EAPI void elm_toolbar_item_show(Elm_Object_Item *it);
EAPI void elm_toolbar_item_show(Elm_Object_Item *it, Elm_Toolbar_Item_Scrollto_Type type);
/**
* Show a specific item with scroll animation, when the toolbar can be scrolled.
@ -1019,7 +1033,7 @@ EAPI void elm_toolbar_item_show(Elm_Object_Item *it);
* @since 1.8
* @ingroup Toolbar
*/
EAPI void elm_toolbar_item_bring_in(Elm_Object_Item *it);
EAPI void elm_toolbar_item_bring_in(Elm_Object_Item *it, Elm_Toolbar_Item_Scrollto_Type type);
/**
* @}