2013-04-25 22:13:00 -07:00
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
# include "elementary_config.h"
|
|
|
|
#endif
|
|
|
|
|
2017-10-18 18:13:54 -07:00
|
|
|
#define EFL_ACCESS_PROTECTED
|
2014-10-17 08:56:11 -07:00
|
|
|
#define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED
|
|
|
|
|
2008-09-29 23:58:56 -07:00
|
|
|
#include <Elementary.h>
|
2013-04-25 22:13:00 -07:00
|
|
|
|
2008-09-29 23:58:56 -07:00
|
|
|
#include "elm_priv.h"
|
2012-11-25 22:32:53 -08:00
|
|
|
#include "elm_interface_scrollable.h"
|
|
|
|
#include "elm_widget_layout.h"
|
2012-07-31 15:05:55 -07:00
|
|
|
#include "elm_widget_scroller.h"
|
2012-11-25 22:32:53 -08:00
|
|
|
|
edje/elm: Rename _internal_ to _part_ (EO)
In Edje and Elementary, we have part objects, which are what is returned
by the interface efl_part(). Those objects can't be of an opaque type as
this doesn't work nicely with strongly typed languages such as C++ or
C#. In JS, Lua, C the types are weak and mostly runtime-based so it
doesn't matter much.
As a consequence, the documentation and the types need to look nice in
this EO API. Thus, we remove the abusive term "internal" and explicitly
call all those classes "part" something.
Eventually we want the types to be declared in the EO file so bindings
(C#, C++, ...) can generate the proper access methods, returning the
best possible types.
Note that right now a few of those part types are used in the legacy API
but don't actually need to be exposed externally.
This is kind of a mega commit that does all the renaming at once, but
it's really just a big sed operation. The power of good IDEs :)
Ref T5315
Ref T5306
2017-09-12 21:29:25 -07:00
|
|
|
#include "elm_scroller_part.eo.h"
|
2016-05-24 04:40:18 -07:00
|
|
|
#include "elm_part_helper.h"
|
|
|
|
|
2014-06-03 03:35:28 -07:00
|
|
|
#define MY_CLASS ELM_SCROLLER_CLASS
|
2012-11-25 22:32:53 -08:00
|
|
|
|
2013-11-07 03:44:22 -08:00
|
|
|
#define MY_CLASS_NAME "Elm_Scroller"
|
|
|
|
#define MY_CLASS_NAME_LEGACY "elm_scroller"
|
2008-09-29 23:58:56 -07:00
|
|
|
|
2013-07-15 16:11:52 -07:00
|
|
|
#define ELM_PRIV_SCROLLER_SIGNALS(cmd) \
|
|
|
|
cmd(SIG_SCROLL, "scroll", "") \
|
|
|
|
cmd(SIG_SCROLL_LEFT, "scroll,left", "") \
|
|
|
|
cmd(SIG_SCROLL_RIGHT, "scroll,right", "") \
|
|
|
|
cmd(SIG_SCROLL_UP, "scroll,up", "") \
|
|
|
|
cmd(SIG_SCROLL_DOWN, "scroll,down", "") \
|
|
|
|
cmd(SIG_SCROLL_ANIM_START, "scroll,anim,start", "") \
|
|
|
|
cmd(SIG_SCROLL_ANIM_STOP, "scroll,anim,stop", "") \
|
|
|
|
cmd(SIG_SCROLL_DRAG_START, "scroll,drag,start", "") \
|
|
|
|
cmd(SIG_SCROLL_DRAG_STOP, "scroll,drag,stop", "") \
|
|
|
|
cmd(SIG_EDGE_LEFT, "edge,left", "") \
|
|
|
|
cmd(SIG_EDGE_RIGHT, "edge,right", "") \
|
|
|
|
cmd(SIG_EDGE_TOP, "edge,top", "") \
|
|
|
|
cmd(SIG_EDGE_BOTTOM, "edge,bottom", "") \
|
|
|
|
cmd(SIG_VBAR_DRAG, "vbar,drag", "") \
|
|
|
|
cmd(SIG_VBAR_PRESS, "vbar,press", "") \
|
|
|
|
cmd(SIG_VBAR_UNPRESS, "vbar,unpress", "") \
|
|
|
|
cmd(SIG_HBAR_DRAG, "hbar,drag", "") \
|
|
|
|
cmd(SIG_HBAR_PRESS, "hbar,press", "") \
|
|
|
|
cmd(SIG_HBAR_UNPRESS, "hbar,unpress", "") \
|
|
|
|
cmd(SIG_SCROLL_PAGE_CHANGE, "scroll,page,changed", "") \
|
2013-05-15 14:56:04 -07:00
|
|
|
|
2013-07-15 16:11:52 -07:00
|
|
|
ELM_PRIV_SCROLLER_SIGNALS(ELM_PRIV_STATIC_VARIABLE_DECLARE);
|
|
|
|
|
|
|
|
static const Evas_Smart_Cb_Description _smart_callbacks[] = {
|
|
|
|
ELM_PRIV_SCROLLER_SIGNALS(ELM_PRIV_SMART_CALLBACKS_DESC)
|
2014-02-05 23:18:57 -08:00
|
|
|
{SIG_LAYOUT_FOCUSED, ""}, /**< handled by elm_layout */
|
|
|
|
{SIG_LAYOUT_UNFOCUSED, ""}, /**< handled by elm_layout */
|
2012-07-04 14:42:35 -07:00
|
|
|
{NULL, NULL}
|
2010-03-26 03:59:56 -07:00
|
|
|
};
|
2013-07-15 16:11:52 -07:00
|
|
|
#undef ELM_PRIV_SCROLLER_SIGNALS
|
2010-03-26 03:59:56 -07:00
|
|
|
|
2014-04-10 01:10:00 -07:00
|
|
|
static Eina_Bool _key_action_move(Evas_Object *obj, const char *params);
|
|
|
|
|
|
|
|
static const Elm_Action key_actions[] = {
|
|
|
|
{"move", _key_action_move},
|
|
|
|
{NULL, NULL}
|
|
|
|
};
|
2012-07-04 14:42:35 -07:00
|
|
|
|
2015-01-23 19:01:03 -08:00
|
|
|
static void
|
|
|
|
_elm_scroller_proxy_set(Evas_Object *obj, Elm_Scroller_Data *sd, Evas_Object *proxy)
|
|
|
|
{
|
|
|
|
Evas_Coord h_pagesize, v_pagesize;
|
2016-01-26 15:51:19 -08:00
|
|
|
Evas_Coord cw = 0, ch = 0;
|
2015-01-23 19:01:03 -08:00
|
|
|
Evas_Object *content = sd->content;
|
|
|
|
|
|
|
|
if (!content) return;
|
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_paging_get(obj, NULL, NULL, &h_pagesize, &v_pagesize);
|
|
|
|
elm_interface_scrollable_content_size_get(obj, &cw, &ch);
|
2015-01-23 19:01:03 -08:00
|
|
|
/* Since Proxy has the texture size limitation problem, we set a key value
|
|
|
|
for evas works in some hackish way to avoid this problem. This hackish
|
|
|
|
code should be removed once evas supports a mechanism like a virtual
|
|
|
|
texture. */
|
|
|
|
evas_object_image_fill_set(proxy, 0, 0, cw, ch);
|
|
|
|
evas_object_size_hint_min_set(proxy, h_pagesize, v_pagesize);
|
|
|
|
evas_object_image_source_clip_set(proxy, EINA_FALSE);
|
|
|
|
evas_object_image_source_set(proxy, content);
|
|
|
|
evas_object_show(proxy);
|
|
|
|
}
|
2016-12-20 08:34:08 -08:00
|
|
|
//describe position of rect2 relative to rect1
|
|
|
|
// 1 = top outside
|
|
|
|
// 2 = left outside
|
|
|
|
// 4 = bottom outside
|
|
|
|
// 8 = right outside
|
|
|
|
static char
|
|
|
|
_intersect_direction(Eina_Rectangle *rect1, Eina_Rectangle *rect2)
|
|
|
|
{
|
|
|
|
char ret = 0;
|
|
|
|
|
|
|
|
if (rect1->y > rect2->y)
|
|
|
|
ret |= 1;
|
|
|
|
if (rect1->x > rect2->x)
|
|
|
|
ret |= 2;
|
|
|
|
if (rect1->y + rect1->h < rect2->y + rect2->h)
|
|
|
|
ret |= 4;
|
|
|
|
if (rect1->x + rect1->w < rect2->x + rect2->w)
|
|
|
|
ret |= 8;
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|
2015-01-23 19:01:03 -08:00
|
|
|
|
2014-04-10 01:10:00 -07:00
|
|
|
static Eina_Bool
|
|
|
|
_key_action_move(Evas_Object *obj, const char *params)
|
|
|
|
{
|
|
|
|
ELM_SCROLLER_DATA_GET(obj, sd);
|
|
|
|
const char *dir = params;
|
2010-10-01 12:03:07 -07:00
|
|
|
Evas_Coord x = 0;
|
|
|
|
Evas_Coord y = 0;
|
2015-08-11 02:56:52 -07:00
|
|
|
Evas_Coord v_x = 0;
|
|
|
|
Evas_Coord v_y = 0;
|
2010-10-01 12:03:07 -07:00
|
|
|
Evas_Coord v_w = 0;
|
|
|
|
Evas_Coord v_h = 0;
|
2012-07-04 14:42:35 -07:00
|
|
|
Evas_Coord max_x = 0;
|
|
|
|
Evas_Coord max_y = 0;
|
2010-10-01 12:03:07 -07:00
|
|
|
Evas_Coord page_x = 0;
|
|
|
|
Evas_Coord page_y = 0;
|
2016-12-20 08:34:08 -08:00
|
|
|
|
2012-07-04 14:42:35 -07:00
|
|
|
Evas_Coord step_x = 0;
|
|
|
|
Evas_Coord step_y = 0;
|
2016-11-23 19:10:45 -08:00
|
|
|
Evas_Coord pagesize_h = 0, pagesize_v = 0;
|
|
|
|
Evas_Coord pagenumber_h = 0, pagenumber_v = 0;
|
2010-10-01 12:03:07 -07:00
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_content_pos_get(obj, &x, &y);
|
|
|
|
elm_interface_scrollable_step_size_get(obj, &step_x, &step_y);
|
|
|
|
elm_interface_scrollable_page_size_get(obj, &page_x, &page_y);
|
|
|
|
elm_interface_scrollable_content_viewport_geometry_get
|
|
|
|
(obj, &v_x, &v_y, &v_w, &v_h);
|
2016-12-20 08:34:08 -08:00
|
|
|
evas_object_geometry_get(sd->content, NULL, NULL, &max_x, &max_y);
|
2010-10-01 12:03:07 -07:00
|
|
|
|
2016-12-20 08:34:08 -08:00
|
|
|
{
|
|
|
|
Efl_Ui_Focus_Object *focused;
|
|
|
|
Eina_Rectangle focused_geom, viewport;
|
2015-09-10 02:29:24 -07:00
|
|
|
|
2017-07-18 03:40:17 -07:00
|
|
|
focused = efl_ui_focus_manager_focus_get(obj);
|
2014-04-10 01:10:00 -07:00
|
|
|
|
2016-12-20 08:34:08 -08:00
|
|
|
if (focused &&
|
|
|
|
(!strcmp(dir, "next") ||
|
|
|
|
!strcmp(dir, "prior")))
|
|
|
|
return EINA_FALSE;
|
2015-08-24 21:05:05 -07:00
|
|
|
|
2016-12-20 08:34:08 -08:00
|
|
|
if (focused &&
|
|
|
|
(!strcmp(dir, "left") ||
|
|
|
|
!strcmp(dir, "right") ||
|
|
|
|
!strcmp(dir, "up") ||
|
|
|
|
!strcmp(dir, "down")))
|
|
|
|
{
|
|
|
|
char relative;
|
|
|
|
|
|
|
|
evas_object_geometry_get(focused,
|
|
|
|
&focused_geom.x, &focused_geom.y, &focused_geom.w, &focused_geom.h);
|
|
|
|
elm_interface_scrollable_content_viewport_geometry_get(obj,
|
|
|
|
&viewport.x, &viewport.y, &viewport.w, &viewport.h);
|
|
|
|
|
|
|
|
relative = _intersect_direction(&viewport, &focused_geom);
|
|
|
|
|
|
|
|
//now precisly check if the direction is also lapping out
|
|
|
|
if ((!strcmp(dir, "up") && !(relative & 1)) ||
|
|
|
|
(!strcmp(dir, "left") && !(relative & 2)) ||
|
|
|
|
(!strcmp(dir, "down") && !(relative & 4)) ||
|
|
|
|
(!strcmp(dir, "right") && !(relative & 8)))
|
|
|
|
{
|
|
|
|
//focus will handle that
|
|
|
|
return EINA_FALSE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2015-08-24 21:05:05 -07:00
|
|
|
|
2016-11-23 19:10:45 -08:00
|
|
|
elm_interface_scrollable_paging_get(obj, NULL, NULL, &pagesize_h, &pagesize_v);
|
|
|
|
elm_interface_scrollable_current_page_get(obj, &pagenumber_h, &pagenumber_v);
|
|
|
|
|
2014-04-10 01:10:00 -07:00
|
|
|
if (!strcmp(dir, "left"))
|
2010-10-01 12:03:07 -07:00
|
|
|
{
|
2015-07-19 07:40:28 -07:00
|
|
|
if ((x <= 0) && (!sd->loop_h)) return EINA_FALSE;
|
2016-11-23 19:10:45 -08:00
|
|
|
if (pagesize_h)
|
|
|
|
{
|
|
|
|
elm_interface_scrollable_page_bring_in(obj, pagenumber_h - 1, pagenumber_v);
|
|
|
|
return EINA_TRUE;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
x -= step_x;
|
2010-10-01 12:03:07 -07:00
|
|
|
}
|
2014-04-10 01:10:00 -07:00
|
|
|
else if (!strcmp(dir, "right"))
|
2010-10-01 12:03:07 -07:00
|
|
|
{
|
2015-07-19 07:40:28 -07:00
|
|
|
if ((x >= (max_x - v_w)) && (!sd->loop_h)) return EINA_FALSE;
|
2016-11-23 19:10:45 -08:00
|
|
|
if (pagesize_h)
|
|
|
|
{
|
|
|
|
elm_interface_scrollable_page_bring_in(obj, pagenumber_h + 1, pagenumber_v);
|
|
|
|
return EINA_TRUE;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
x += step_x;
|
2010-10-01 12:03:07 -07:00
|
|
|
}
|
2014-04-10 01:10:00 -07:00
|
|
|
else if (!strcmp(dir, "up"))
|
2010-10-01 12:03:07 -07:00
|
|
|
{
|
2015-07-19 07:40:28 -07:00
|
|
|
if ((y <= 0) && (!sd->loop_v)) return EINA_FALSE;
|
2016-11-23 19:10:45 -08:00
|
|
|
if (pagesize_v)
|
|
|
|
{
|
|
|
|
elm_interface_scrollable_page_bring_in(obj, pagenumber_h, pagenumber_v - 1);
|
|
|
|
return EINA_TRUE;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
y -= step_y;
|
2010-10-01 12:03:07 -07:00
|
|
|
}
|
2014-04-10 01:10:00 -07:00
|
|
|
else if (!strcmp(dir, "down"))
|
2010-10-01 12:03:07 -07:00
|
|
|
{
|
2015-07-19 07:40:28 -07:00
|
|
|
if ((y >= (max_y - v_h)) && (!sd->loop_v)) return EINA_FALSE;
|
2016-11-23 19:10:45 -08:00
|
|
|
if (pagesize_v)
|
|
|
|
{
|
|
|
|
elm_interface_scrollable_page_bring_in(obj, pagenumber_h, pagenumber_v + 1);
|
|
|
|
return EINA_TRUE;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
y += step_y;
|
2010-10-01 12:03:07 -07:00
|
|
|
}
|
2014-04-10 01:10:00 -07:00
|
|
|
else if (!strcmp(dir, "first"))
|
2010-10-01 12:03:07 -07:00
|
|
|
{
|
|
|
|
y = 0;
|
|
|
|
}
|
2014-04-10 01:10:00 -07:00
|
|
|
else if (!strcmp(dir, "last"))
|
2010-10-01 12:03:07 -07:00
|
|
|
{
|
|
|
|
y = max_y - v_h;
|
|
|
|
}
|
2014-04-10 01:10:00 -07:00
|
|
|
else if (!strcmp(dir, "prior"))
|
2010-10-01 12:03:07 -07:00
|
|
|
{
|
2016-11-23 19:10:45 -08:00
|
|
|
if (pagesize_v)
|
|
|
|
{
|
|
|
|
elm_interface_scrollable_page_bring_in(obj, pagenumber_h, pagenumber_v - 1);
|
|
|
|
return EINA_TRUE;
|
|
|
|
}
|
2011-04-01 04:24:15 -07:00
|
|
|
else
|
2016-11-23 19:10:45 -08:00
|
|
|
{
|
|
|
|
if (page_y < 0)
|
|
|
|
y -= -(page_y * v_h) / 100;
|
|
|
|
else
|
|
|
|
y -= page_y;
|
|
|
|
}
|
2010-10-01 12:03:07 -07:00
|
|
|
}
|
2014-04-10 01:10:00 -07:00
|
|
|
else if (!strcmp(dir, "next"))
|
2010-10-01 12:03:07 -07:00
|
|
|
{
|
2016-11-23 19:10:45 -08:00
|
|
|
if (pagesize_v)
|
|
|
|
{
|
|
|
|
elm_interface_scrollable_page_bring_in(obj, pagenumber_h, pagenumber_v + 1);
|
|
|
|
return EINA_TRUE;
|
|
|
|
}
|
2011-04-01 04:24:15 -07:00
|
|
|
else
|
2016-11-23 19:10:45 -08:00
|
|
|
{
|
|
|
|
if (page_y < 0)
|
|
|
|
y += -(page_y * v_h) / 100;
|
|
|
|
else
|
|
|
|
y += page_y;
|
|
|
|
}
|
2010-10-01 12:03:07 -07:00
|
|
|
}
|
2014-03-26 01:54:49 -07:00
|
|
|
else return EINA_FALSE;
|
2010-10-01 12:03:07 -07:00
|
|
|
|
2017-10-18 04:15:12 -07:00
|
|
|
elm_interface_scrollable_content_region_show(obj, x, y, v_w, v_h);
|
2016-12-20 08:34:08 -08:00
|
|
|
|
2014-04-10 01:10:00 -07:00
|
|
|
return EINA_TRUE;
|
|
|
|
}
|
2012-07-04 14:42:35 -07:00
|
|
|
|
2014-03-26 01:54:49 -07:00
|
|
|
EOLIAN static Eina_Bool
|
2017-10-15 21:33:52 -07:00
|
|
|
_elm_scroller_elm_widget_on_access_activate(Eo *obj, Elm_Scroller_Data *_pd EINA_UNUSED, Efl_Ui_Activate act)
|
2012-09-16 20:01:46 -07:00
|
|
|
{
|
|
|
|
Evas_Coord x = 0;
|
|
|
|
Evas_Coord y = 0;
|
|
|
|
Evas_Coord v_w = 0;
|
|
|
|
Evas_Coord v_h = 0;
|
|
|
|
Evas_Coord page_x = 0;
|
|
|
|
Evas_Coord page_y = 0;
|
|
|
|
|
2014-03-26 01:54:49 -07:00
|
|
|
if (elm_widget_disabled_get(obj)) return EINA_FALSE;
|
2017-10-15 21:33:52 -07:00
|
|
|
if (act == EFL_UI_ACTIVATE_DEFAULT) return EINA_FALSE;
|
2012-09-16 20:01:46 -07:00
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_content_pos_get(obj, &x, &y);
|
|
|
|
elm_interface_scrollable_page_size_get(obj, &page_x, &page_y);
|
|
|
|
elm_interface_scrollable_content_viewport_geometry_get
|
|
|
|
(obj, NULL, NULL, &v_w, &v_h);
|
2012-09-16 20:01:46 -07:00
|
|
|
|
2017-10-15 21:33:52 -07:00
|
|
|
if (act == EFL_UI_ACTIVATE_UP)
|
2012-09-16 20:01:46 -07:00
|
|
|
{
|
|
|
|
if (page_y < 0)
|
|
|
|
y -= -(page_y * v_h) / 100;
|
|
|
|
else
|
|
|
|
y -= page_y;
|
|
|
|
}
|
2017-10-15 21:33:52 -07:00
|
|
|
else if (act == EFL_UI_ACTIVATE_DOWN)
|
2012-09-16 20:01:46 -07:00
|
|
|
{
|
|
|
|
if (page_y < 0)
|
|
|
|
y += -(page_y * v_h) / 100;
|
|
|
|
else
|
|
|
|
y += page_y;
|
|
|
|
}
|
2017-10-15 21:33:52 -07:00
|
|
|
else if (act == EFL_UI_ACTIVATE_LEFT)
|
2012-09-16 20:01:46 -07:00
|
|
|
{
|
|
|
|
if (page_x < 0)
|
|
|
|
x -= -(page_x * v_w) / 100;
|
|
|
|
else
|
|
|
|
x -= page_x;
|
|
|
|
}
|
2017-10-15 21:33:52 -07:00
|
|
|
else if (act == EFL_UI_ACTIVATE_RIGHT)
|
2012-09-16 20:01:46 -07:00
|
|
|
{
|
|
|
|
if (page_x < 0)
|
|
|
|
x += -(page_x * v_w) / 100;
|
|
|
|
else
|
|
|
|
x += page_x;
|
|
|
|
}
|
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_content_pos_set(obj, x, y, EINA_TRUE);
|
2014-03-26 01:54:49 -07:00
|
|
|
|
|
|
|
return EINA_TRUE;
|
2012-09-16 20:01:46 -07:00
|
|
|
}
|
|
|
|
|
2014-03-26 01:54:49 -07:00
|
|
|
EOLIAN static void
|
|
|
|
_elm_scroller_elm_layout_sizing_eval(Eo *obj, Elm_Scroller_Data *sd)
|
2010-10-01 12:03:07 -07:00
|
|
|
{
|
2012-07-04 14:42:35 -07:00
|
|
|
Evas_Coord vw = 0, vh = 0, minw = 0, minh = 0, maxw = 0, maxh = 0, w, h,
|
|
|
|
vmw, vmh;
|
2015-01-23 19:01:03 -08:00
|
|
|
Evas_Coord h_pagesize, v_pagesize;
|
2012-07-04 14:42:35 -07:00
|
|
|
double xw = 0.0, yw = 0.0;
|
2015-01-23 19:01:03 -08:00
|
|
|
int i;
|
2012-07-04 14:42:35 -07:00
|
|
|
|
2013-10-05 01:15:27 -07:00
|
|
|
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
2012-07-04 14:42:35 -07:00
|
|
|
|
|
|
|
if (sd->content)
|
2010-10-01 12:03:07 -07:00
|
|
|
{
|
2017-09-18 00:22:01 -07:00
|
|
|
evas_object_size_hint_combined_min_get(sd->content, &minw, &minh);
|
2012-07-04 14:42:35 -07:00
|
|
|
evas_object_size_hint_max_get(sd->content, &maxw, &maxh);
|
|
|
|
evas_object_size_hint_weight_get(sd->content, &xw, &yw);
|
2010-10-01 12:03:07 -07:00
|
|
|
}
|
2012-07-04 14:42:35 -07:00
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_content_viewport_geometry_get
|
|
|
|
(obj, NULL, NULL, &vw, &vh);
|
2012-07-04 14:42:35 -07:00
|
|
|
if (xw > 0.0)
|
2010-10-01 12:03:07 -07:00
|
|
|
{
|
2012-07-04 14:42:35 -07:00
|
|
|
if ((minw > 0) && (vw < minw))
|
|
|
|
vw = minw;
|
|
|
|
else if ((maxw > 0) && (vw > maxw))
|
|
|
|
vw = maxw;
|
2010-10-01 12:03:07 -07:00
|
|
|
}
|
2012-07-04 14:42:35 -07:00
|
|
|
else if (minw > 0)
|
|
|
|
vw = minw;
|
2010-10-01 12:03:07 -07:00
|
|
|
|
2012-07-04 14:42:35 -07:00
|
|
|
if (yw > 0.0)
|
|
|
|
{
|
|
|
|
if ((minh > 0) && (vh < minh))
|
|
|
|
vh = minh;
|
|
|
|
else if ((maxh > 0) && (vh > maxh))
|
|
|
|
vh = maxh;
|
|
|
|
}
|
|
|
|
else if (minh > 0)
|
|
|
|
vh = minh;
|
|
|
|
|
|
|
|
if (sd->content) evas_object_resize(sd->content, vw, vh);
|
2015-01-23 19:01:03 -08:00
|
|
|
if (sd->contents) evas_object_resize(sd->contents, vw, vh);
|
|
|
|
|
|
|
|
for (i = 0 ; i < 3 ; i++)
|
|
|
|
{
|
|
|
|
if (!sd->proxy_content[i]) continue;
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_paging_get((Eo *)obj, NULL, NULL, &h_pagesize, &v_pagesize);
|
2015-01-23 19:01:03 -08:00
|
|
|
evas_object_image_fill_set(sd->proxy_content[i], 0, 0, vw, vh);
|
|
|
|
evas_object_size_hint_min_set(sd->proxy_content[i],
|
|
|
|
h_pagesize, v_pagesize);
|
|
|
|
}
|
2012-07-04 14:42:35 -07:00
|
|
|
|
|
|
|
w = -1;
|
|
|
|
h = -1;
|
2013-11-28 08:33:46 -08:00
|
|
|
vmw = vmh = 0;
|
2012-11-25 22:32:53 -08:00
|
|
|
edje_object_size_min_calc(wd->resize_obj, &vmw, &vmh);
|
2012-07-04 14:42:35 -07:00
|
|
|
|
|
|
|
if (sd->min_w) w = vmw + minw;
|
|
|
|
if (sd->min_h) h = vmh + minh;
|
2012-07-24 19:39:33 -07:00
|
|
|
|
2012-07-04 14:42:35 -07:00
|
|
|
evas_object_size_hint_max_get(obj, &maxw, &maxh);
|
|
|
|
if ((maxw > 0) && (w > maxw)) w = maxw;
|
|
|
|
if ((maxh > 0) && (h > maxh)) h = maxh;
|
|
|
|
|
|
|
|
evas_object_size_hint_min_set(obj, w, h);
|
2017-06-06 23:17:45 -07:00
|
|
|
}
|
2008-09-29 23:58:56 -07:00
|
|
|
|
2017-06-06 23:17:45 -07:00
|
|
|
static void
|
|
|
|
_mirrored_set(Evas_Object *obj,
|
|
|
|
Eina_Bool mirrored)
|
|
|
|
{
|
|
|
|
elm_interface_scrollable_mirrored_set(obj, mirrored);
|
2011-02-08 04:08:28 -08:00
|
|
|
}
|
|
|
|
|
2017-08-09 00:13:06 -07:00
|
|
|
EOLIAN static Efl_Ui_Theme_Apply
|
2014-03-26 01:54:49 -07:00
|
|
|
_elm_scroller_elm_widget_theme_apply(Eo *obj, Elm_Scroller_Data *sd EINA_UNUSED)
|
2008-11-15 05:58:50 -08:00
|
|
|
{
|
2017-08-09 00:13:06 -07:00
|
|
|
Efl_Ui_Theme_Apply int_ret = EFL_UI_THEME_APPLY_FAILED;
|
2016-08-15 06:44:41 -07:00
|
|
|
int_ret = elm_obj_widget_theme_apply(efl_super(obj, MY_CLASS));
|
2017-08-09 00:13:06 -07:00
|
|
|
if (!int_ret) return EFL_UI_THEME_APPLY_FAILED;
|
2012-07-04 14:42:35 -07:00
|
|
|
|
2017-06-13 03:41:15 -07:00
|
|
|
_mirrored_set(obj, efl_ui_mirrored_get(obj));
|
2017-06-06 23:17:45 -07:00
|
|
|
|
2012-07-04 14:42:35 -07:00
|
|
|
elm_layout_sizing_eval(obj);
|
|
|
|
|
theme: return enum from elm_widget_style_set instead of bool
Summary:
if trying to apply incorrect theme, widget apply default theme and return TRUE.
so there is no way to check it really apply correct theme.
To resolve this problem, _elm_theme_set return three type enum
* related history : 4ca3ef45146e05908a13d1010909abeba9693ad6
* elm_object_style_set is public api, so I didn't change it.
* typedef name [ Theme_Apply ] is temporarily, please suggest better one.
@fix
Reviewers: singh.amitesh, herb, Hermet, cedric, jpeg, raster
Subscribers: cedric, jpeg
Differential Revision: https://phab.enlightenment.org/D4073
2016-06-30 23:09:42 -07:00
|
|
|
return int_ret;
|
2012-11-25 22:32:53 -08:00
|
|
|
}
|
|
|
|
|
2010-06-15 08:04:05 -07:00
|
|
|
static void
|
2017-09-13 19:59:44 -07:00
|
|
|
_show_region_hook(void *data, Evas_Object *content_obj EINA_UNUSED, Eina_Rect r)
|
2010-06-15 08:04:05 -07:00
|
|
|
{
|
2017-08-21 23:16:54 -07:00
|
|
|
elm_interface_scrollable_content_region_show(data, r.x, r.y, r.w, r.h);
|
2010-09-09 11:53:36 -07:00
|
|
|
}
|
|
|
|
|
2010-10-22 11:29:51 -07:00
|
|
|
static void
|
2012-07-04 14:42:35 -07:00
|
|
|
_changed_size_hints_cb(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas *e EINA_UNUSED,
|
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
void *event_info EINA_UNUSED)
|
2010-10-22 11:29:51 -07:00
|
|
|
{
|
2012-07-04 14:42:35 -07:00
|
|
|
elm_layout_sizing_eval(data);
|
2010-10-22 11:29:51 -07:00
|
|
|
}
|
|
|
|
|
2014-03-26 01:54:49 -07:00
|
|
|
EOLIAN static Eina_Bool
|
2017-08-23 04:41:37 -07:00
|
|
|
_elm_scroller_elm_widget_widget_sub_object_del(Eo *obj, Elm_Scroller_Data *sd, Evas_Object *sobj)
|
2008-09-29 23:58:56 -07:00
|
|
|
{
|
2014-04-12 09:58:43 -07:00
|
|
|
Eina_Bool int_ret = EINA_FALSE;
|
2017-08-23 04:41:37 -07:00
|
|
|
int_ret = elm_widget_sub_object_del(efl_super(obj, MY_CLASS), sobj);
|
2014-03-26 01:54:49 -07:00
|
|
|
if (!int_ret) return EINA_FALSE;
|
2012-07-04 14:42:35 -07:00
|
|
|
|
|
|
|
if (sobj == sd->content)
|
2008-09-29 23:58:56 -07:00
|
|
|
{
|
2014-03-21 22:40:48 -07:00
|
|
|
if (elm_widget_is(sobj))
|
2017-08-21 23:16:54 -07:00
|
|
|
elm_widget_on_show_region_hook_set(sd->content, NULL, NULL, NULL);
|
2012-07-04 14:42:35 -07:00
|
|
|
|
|
|
|
sd->content = NULL;
|
2008-09-29 23:58:56 -07:00
|
|
|
}
|
2012-07-04 14:42:35 -07:00
|
|
|
|
2014-03-26 01:54:49 -07:00
|
|
|
return EINA_TRUE;
|
2008-09-29 23:58:56 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-07-04 14:42:35 -07:00
|
|
|
_resize_cb(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas *e EINA_UNUSED,
|
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
void *event_info EINA_UNUSED)
|
2008-09-29 23:58:56 -07:00
|
|
|
{
|
2012-07-04 14:42:35 -07:00
|
|
|
elm_layout_sizing_eval(data);
|
2008-09-29 23:58:56 -07:00
|
|
|
}
|
|
|
|
|
2008-10-06 23:55:11 -07:00
|
|
|
static void
|
2012-07-04 14:42:35 -07:00
|
|
|
_edge_left_cb(Evas_Object *obj,
|
2014-01-06 06:30:02 -08:00
|
|
|
void *data EINA_UNUSED)
|
2008-10-06 23:55:11 -07:00
|
|
|
{
|
2016-08-22 15:40:39 -07:00
|
|
|
efl_event_callback_legacy_call(obj, ELM_SCROLLER_EVENT_EDGE_LEFT, NULL);
|
2008-10-06 23:55:11 -07:00
|
|
|
}
|
|
|
|
|
2009-03-20 08:08:33 -07:00
|
|
|
static void
|
2012-07-04 14:42:35 -07:00
|
|
|
_edge_right_cb(Evas_Object *obj,
|
2014-01-06 06:30:02 -08:00
|
|
|
void *data EINA_UNUSED)
|
2009-03-20 08:08:33 -07:00
|
|
|
{
|
2016-08-22 15:40:39 -07:00
|
|
|
efl_event_callback_legacy_call(obj, ELM_SCROLLER_EVENT_EDGE_RIGHT, NULL);
|
2009-03-20 08:08:33 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-07-04 14:42:35 -07:00
|
|
|
_edge_top_cb(Evas_Object *obj,
|
2014-01-06 06:30:02 -08:00
|
|
|
void *data EINA_UNUSED)
|
2009-03-20 08:08:33 -07:00
|
|
|
{
|
2016-08-22 15:40:39 -07:00
|
|
|
efl_event_callback_legacy_call(obj, ELM_SCROLLER_EVENT_EDGE_TOP, NULL);
|
2009-03-20 08:08:33 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-07-04 14:42:35 -07:00
|
|
|
_edge_bottom_cb(Evas_Object *obj,
|
2014-01-06 06:30:02 -08:00
|
|
|
void *data EINA_UNUSED)
|
2009-03-20 08:08:33 -07:00
|
|
|
{
|
2016-08-22 15:40:39 -07:00
|
|
|
efl_event_callback_legacy_call(obj, ELM_SCROLLER_EVENT_EDGE_BOTTOM, NULL);
|
2009-03-20 08:08:33 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-07-04 14:42:35 -07:00
|
|
|
_scroll_cb(Evas_Object *obj,
|
2014-01-06 06:30:02 -08:00
|
|
|
void *data EINA_UNUSED)
|
2009-03-20 08:08:33 -07:00
|
|
|
{
|
2016-08-22 15:40:39 -07:00
|
|
|
efl_event_callback_legacy_call
|
2016-06-10 01:51:20 -07:00
|
|
|
(obj, EFL_UI_EVENT_SCROLL, NULL);
|
2009-03-20 08:08:33 -07:00
|
|
|
}
|
|
|
|
|
2013-03-15 02:53:17 -07:00
|
|
|
static void
|
|
|
|
_scroll_left_cb(Evas_Object *obj,
|
2014-01-06 06:30:02 -08:00
|
|
|
void *data EINA_UNUSED)
|
2013-03-15 02:53:17 -07:00
|
|
|
{
|
2016-08-22 15:40:39 -07:00
|
|
|
efl_event_callback_legacy_call(obj, ELM_SCROLLER_EVENT_SCROLL_LEFT, NULL);
|
2013-03-15 02:53:17 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_scroll_right_cb(Evas_Object *obj,
|
2014-01-06 06:30:02 -08:00
|
|
|
void *data EINA_UNUSED)
|
2013-03-15 02:53:17 -07:00
|
|
|
{
|
2016-08-22 15:40:39 -07:00
|
|
|
efl_event_callback_legacy_call(obj, ELM_SCROLLER_EVENT_SCROLL_RIGHT, NULL);
|
2013-03-15 02:53:17 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_scroll_up_cb(Evas_Object *obj,
|
2014-01-06 06:30:02 -08:00
|
|
|
void *data EINA_UNUSED)
|
2013-03-15 02:53:17 -07:00
|
|
|
{
|
2016-08-22 15:40:39 -07:00
|
|
|
efl_event_callback_legacy_call(obj, ELM_SCROLLER_EVENT_SCROLL_UP, NULL);
|
2013-03-15 02:53:17 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_scroll_down_cb(Evas_Object *obj,
|
2014-01-06 06:30:02 -08:00
|
|
|
void *data EINA_UNUSED)
|
2013-03-15 02:53:17 -07:00
|
|
|
{
|
2016-08-22 15:40:39 -07:00
|
|
|
efl_event_callback_legacy_call(obj, ELM_SCROLLER_EVENT_SCROLL_DOWN, NULL);
|
2013-03-15 02:53:17 -07:00
|
|
|
}
|
|
|
|
|
2008-09-29 23:58:56 -07:00
|
|
|
static void
|
2012-07-04 14:42:35 -07:00
|
|
|
_scroll_anim_start_cb(Evas_Object *obj,
|
2014-01-06 06:30:02 -08:00
|
|
|
void *data EINA_UNUSED)
|
2008-09-29 23:58:56 -07:00
|
|
|
{
|
2016-08-22 15:40:39 -07:00
|
|
|
efl_event_callback_legacy_call
|
2016-06-10 01:51:20 -07:00
|
|
|
(obj, EFL_UI_EVENT_SCROLL_ANIM_START, NULL);
|
2008-09-29 23:58:56 -07:00
|
|
|
}
|
|
|
|
|
2009-05-08 04:27:32 -07:00
|
|
|
static void
|
2012-07-04 14:42:35 -07:00
|
|
|
_scroll_anim_stop_cb(Evas_Object *obj,
|
2014-01-06 06:30:02 -08:00
|
|
|
void *data EINA_UNUSED)
|
2009-05-08 04:27:32 -07:00
|
|
|
{
|
2016-08-22 15:40:39 -07:00
|
|
|
efl_event_callback_legacy_call
|
2016-06-10 01:51:20 -07:00
|
|
|
(obj, EFL_UI_EVENT_SCROLL_ANIM_STOP, NULL);
|
2009-05-08 04:27:32 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-07-04 14:42:35 -07:00
|
|
|
_scroll_drag_start_cb(Evas_Object *obj,
|
2014-01-06 06:30:02 -08:00
|
|
|
void *data EINA_UNUSED)
|
2009-05-08 04:27:32 -07:00
|
|
|
{
|
2016-08-22 15:40:39 -07:00
|
|
|
efl_event_callback_legacy_call
|
2016-06-10 01:51:20 -07:00
|
|
|
(obj, EFL_UI_EVENT_SCROLL_DRAG_START, NULL);
|
2009-05-08 04:27:32 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-07-04 14:42:35 -07:00
|
|
|
_scroll_drag_stop_cb(Evas_Object *obj,
|
2014-01-06 06:30:02 -08:00
|
|
|
void *data EINA_UNUSED)
|
2009-05-08 04:27:32 -07:00
|
|
|
{
|
2016-08-22 15:40:39 -07:00
|
|
|
efl_event_callback_legacy_call
|
2016-06-10 01:51:20 -07:00
|
|
|
(obj, EFL_UI_EVENT_SCROLL_DRAG_STOP, NULL);
|
2009-05-08 04:27:32 -07:00
|
|
|
}
|
|
|
|
|
Add smart callback signals of a scroller. "vbar,drag", "vbar,press", "vbar,unpress", "hbar,drag", "hbar,press", "hbar,unpress".
SVN revision: 83703
2013-02-06 22:13:31 -08:00
|
|
|
static void
|
|
|
|
_vbar_drag_cb(Evas_Object *obj,
|
2014-01-06 06:30:02 -08:00
|
|
|
void *data EINA_UNUSED)
|
Add smart callback signals of a scroller. "vbar,drag", "vbar,press", "vbar,unpress", "hbar,drag", "hbar,press", "hbar,unpress".
SVN revision: 83703
2013-02-06 22:13:31 -08:00
|
|
|
{
|
2016-08-22 15:40:39 -07:00
|
|
|
efl_event_callback_legacy_call(obj, ELM_SCROLLER_EVENT_VBAR_DRAG, NULL);
|
Add smart callback signals of a scroller. "vbar,drag", "vbar,press", "vbar,unpress", "hbar,drag", "hbar,press", "hbar,unpress".
SVN revision: 83703
2013-02-06 22:13:31 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_vbar_press_cb(Evas_Object *obj,
|
2014-01-06 06:30:02 -08:00
|
|
|
void *data EINA_UNUSED)
|
Add smart callback signals of a scroller. "vbar,drag", "vbar,press", "vbar,unpress", "hbar,drag", "hbar,press", "hbar,unpress".
SVN revision: 83703
2013-02-06 22:13:31 -08:00
|
|
|
{
|
2016-08-22 15:40:39 -07:00
|
|
|
efl_event_callback_legacy_call(obj, ELM_SCROLLER_EVENT_VBAR_PRESS, NULL);
|
Add smart callback signals of a scroller. "vbar,drag", "vbar,press", "vbar,unpress", "hbar,drag", "hbar,press", "hbar,unpress".
SVN revision: 83703
2013-02-06 22:13:31 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_vbar_unpress_cb(Evas_Object *obj,
|
2014-01-06 06:30:02 -08:00
|
|
|
void *data EINA_UNUSED)
|
Add smart callback signals of a scroller. "vbar,drag", "vbar,press", "vbar,unpress", "hbar,drag", "hbar,press", "hbar,unpress".
SVN revision: 83703
2013-02-06 22:13:31 -08:00
|
|
|
{
|
2016-08-22 15:40:39 -07:00
|
|
|
efl_event_callback_legacy_call(obj, ELM_SCROLLER_EVENT_VBAR_UNPRESS, NULL);
|
Add smart callback signals of a scroller. "vbar,drag", "vbar,press", "vbar,unpress", "hbar,drag", "hbar,press", "hbar,unpress".
SVN revision: 83703
2013-02-06 22:13:31 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_hbar_drag_cb(Evas_Object *obj,
|
2014-01-06 06:30:02 -08:00
|
|
|
void *data EINA_UNUSED)
|
Add smart callback signals of a scroller. "vbar,drag", "vbar,press", "vbar,unpress", "hbar,drag", "hbar,press", "hbar,unpress".
SVN revision: 83703
2013-02-06 22:13:31 -08:00
|
|
|
{
|
2016-08-22 15:40:39 -07:00
|
|
|
efl_event_callback_legacy_call(obj, ELM_SCROLLER_EVENT_HBAR_DRAG, NULL);
|
Add smart callback signals of a scroller. "vbar,drag", "vbar,press", "vbar,unpress", "hbar,drag", "hbar,press", "hbar,unpress".
SVN revision: 83703
2013-02-06 22:13:31 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_hbar_press_cb(Evas_Object *obj,
|
2014-01-06 06:30:02 -08:00
|
|
|
void *data EINA_UNUSED)
|
Add smart callback signals of a scroller. "vbar,drag", "vbar,press", "vbar,unpress", "hbar,drag", "hbar,press", "hbar,unpress".
SVN revision: 83703
2013-02-06 22:13:31 -08:00
|
|
|
{
|
2016-08-22 15:40:39 -07:00
|
|
|
efl_event_callback_legacy_call(obj, ELM_SCROLLER_EVENT_HBAR_PRESS, NULL);
|
Add smart callback signals of a scroller. "vbar,drag", "vbar,press", "vbar,unpress", "hbar,drag", "hbar,press", "hbar,unpress".
SVN revision: 83703
2013-02-06 22:13:31 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_hbar_unpress_cb(Evas_Object *obj,
|
2014-01-06 06:30:02 -08:00
|
|
|
void *data EINA_UNUSED)
|
Add smart callback signals of a scroller. "vbar,drag", "vbar,press", "vbar,unpress", "hbar,drag", "hbar,press", "hbar,unpress".
SVN revision: 83703
2013-02-06 22:13:31 -08:00
|
|
|
{
|
2016-08-22 15:40:39 -07:00
|
|
|
efl_event_callback_legacy_call(obj, ELM_SCROLLER_EVENT_HBAR_UNPRESS, NULL);
|
Add smart callback signals of a scroller. "vbar,drag", "vbar,press", "vbar,unpress", "hbar,drag", "hbar,press", "hbar,unpress".
SVN revision: 83703
2013-02-06 22:13:31 -08:00
|
|
|
}
|
|
|
|
|
2013-05-15 14:56:04 -07:00
|
|
|
static void
|
|
|
|
_page_change_cb(Evas_Object *obj,
|
2014-01-06 06:30:02 -08:00
|
|
|
void *data EINA_UNUSED)
|
2013-05-15 14:56:04 -07:00
|
|
|
{
|
2016-08-22 15:40:39 -07:00
|
|
|
efl_event_callback_legacy_call
|
2016-03-02 04:10:48 -08:00
|
|
|
(obj, ELM_SCROLLER_EVENT_SCROLL_PAGE_CHANGED, NULL);
|
2013-05-15 14:56:04 -07:00
|
|
|
}
|
|
|
|
|
2015-01-23 19:01:03 -08:00
|
|
|
static void
|
|
|
|
_loop_content_set(Evas_Object *obj, Elm_Scroller_Data *sd, Evas_Object *content)
|
|
|
|
{
|
|
|
|
if (!sd->contents)
|
|
|
|
{
|
|
|
|
sd->contents = elm_layout_add(obj);
|
|
|
|
evas_object_smart_member_add(sd->contents, obj);
|
2015-04-06 23:04:52 -07:00
|
|
|
if (!elm_layout_theme_set(sd->contents, "scroller", "contents", elm_widget_style_get(obj)))
|
|
|
|
CRI("Failed to set layout!");
|
|
|
|
|
2015-01-23 19:01:03 -08:00
|
|
|
evas_object_size_hint_weight_set(sd->contents, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
|
|
|
evas_object_size_hint_align_set(sd->contents, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
|
|
|
|
|
|
|
elm_widget_sub_object_add(obj, sd->contents);
|
2017-08-21 23:16:54 -07:00
|
|
|
elm_widget_on_show_region_hook_set(sd->contents, obj, _show_region_hook, NULL);
|
2017-02-07 15:03:45 -08:00
|
|
|
|
2017-06-14 19:12:00 -07:00
|
|
|
efl_ui_mirrored_automatic_set(sd->contents, EINA_FALSE);
|
2017-06-13 03:41:15 -07:00
|
|
|
efl_ui_mirrored_set(sd->contents, EINA_FALSE);
|
2015-01-23 19:01:03 -08:00
|
|
|
}
|
|
|
|
elm_object_part_content_set(sd->contents, "elm.swallow.content", content);
|
|
|
|
sd->content = content;
|
|
|
|
|
|
|
|
if (sd->loop_h)
|
|
|
|
{
|
|
|
|
if (!sd->proxy_content[0])
|
|
|
|
sd->proxy_content[0] =
|
|
|
|
evas_object_image_add(evas_object_evas_get(sd->contents));
|
|
|
|
_elm_scroller_proxy_set(obj, sd, sd->proxy_content[0]);
|
|
|
|
elm_object_part_content_set(sd->contents, "elm.swallow.content_r",
|
|
|
|
sd->proxy_content[0]);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sd->loop_v)
|
|
|
|
{
|
|
|
|
if (!sd->proxy_content[1])
|
|
|
|
sd->proxy_content[1] =
|
|
|
|
evas_object_image_add(evas_object_evas_get(sd->contents));
|
|
|
|
_elm_scroller_proxy_set(obj, sd, sd->proxy_content[1]);
|
|
|
|
elm_object_part_content_set(sd->contents, "elm.swallow.content_b",
|
|
|
|
sd->proxy_content[1]);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sd->loop_h && sd->loop_v)
|
|
|
|
{
|
|
|
|
if (!sd->proxy_content[2])
|
|
|
|
sd->proxy_content[2] =
|
|
|
|
evas_object_image_add(evas_object_evas_get(sd->contents));
|
|
|
|
_elm_scroller_proxy_set(obj, sd, sd->proxy_content[2]);
|
|
|
|
elm_object_part_content_set(sd->contents, "elm.swallow.content_rb",
|
|
|
|
sd->proxy_content[2]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-05-24 04:40:18 -07:00
|
|
|
static Eina_Bool
|
|
|
|
_elm_scroller_content_set(Eo *obj, Elm_Scroller_Data *sd, const char *part, Evas_Object *content)
|
2009-05-08 04:27:32 -07:00
|
|
|
{
|
2012-07-04 14:42:35 -07:00
|
|
|
if (part && strcmp(part, "default"))
|
2012-11-25 22:32:53 -08:00
|
|
|
{
|
2016-08-15 06:44:41 -07:00
|
|
|
return efl_content_set(efl_part(efl_super(obj, MY_CLASS), part), content);
|
2012-11-25 22:32:53 -08:00
|
|
|
}
|
2012-07-04 14:42:35 -07:00
|
|
|
|
2014-03-26 01:54:49 -07:00
|
|
|
if (sd->content == content) return EINA_TRUE;
|
2012-07-04 14:42:35 -07:00
|
|
|
|
2014-01-21 17:38:55 -08:00
|
|
|
evas_object_del(sd->content);
|
2012-07-04 14:42:35 -07:00
|
|
|
sd->content = content;
|
|
|
|
|
|
|
|
if (content)
|
|
|
|
{
|
2014-03-19 10:13:03 -07:00
|
|
|
if (elm_widget_is(content))
|
2017-08-21 23:16:54 -07:00
|
|
|
elm_widget_on_show_region_hook_set(content, obj, _show_region_hook, NULL);
|
2012-07-04 14:42:35 -07:00
|
|
|
elm_widget_sub_object_add(obj, content);
|
|
|
|
|
2015-01-23 19:01:03 -08:00
|
|
|
if (sd->loop_h || sd->loop_v)
|
|
|
|
{
|
|
|
|
_loop_content_set(obj, sd, content);
|
|
|
|
if(sd->contents)
|
|
|
|
content = sd->contents;
|
|
|
|
}
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_content_set(obj, content);
|
2012-07-04 14:42:35 -07:00
|
|
|
}
|
2015-01-23 19:01:03 -08:00
|
|
|
else
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
for (i = 0; i < 3; i ++)
|
|
|
|
{
|
|
|
|
if (!sd->proxy_content[i]) continue;
|
|
|
|
evas_object_del(sd->proxy_content[i]);
|
|
|
|
sd->proxy_content[i] = NULL;
|
|
|
|
}
|
|
|
|
}
|
2012-07-04 14:42:35 -07:00
|
|
|
|
|
|
|
elm_layout_sizing_eval(obj);
|
|
|
|
|
2014-03-26 01:54:49 -07:00
|
|
|
return EINA_TRUE;
|
2009-05-08 04:27:32 -07:00
|
|
|
}
|
|
|
|
|
2016-05-24 04:40:18 -07:00
|
|
|
static Evas_Object*
|
|
|
|
_elm_scroller_content_get(Eo *obj, Elm_Scroller_Data *sd, const char *part)
|
2009-05-08 04:27:32 -07:00
|
|
|
{
|
2012-07-04 14:42:35 -07:00
|
|
|
if (part && strcmp(part, "default"))
|
2012-11-25 22:32:53 -08:00
|
|
|
{
|
2016-08-15 06:44:41 -07:00
|
|
|
return efl_content_get(efl_part(efl_super(obj, MY_CLASS), part));
|
2012-11-25 22:32:53 -08:00
|
|
|
}
|
2012-07-04 14:42:35 -07:00
|
|
|
|
2014-03-26 01:54:49 -07:00
|
|
|
return sd->content;
|
2009-05-08 04:27:32 -07:00
|
|
|
}
|
|
|
|
|
2016-05-24 04:40:18 -07:00
|
|
|
static Evas_Object*
|
|
|
|
_elm_scroller_content_unset(Eo *obj, Elm_Scroller_Data *sd, const char *part)
|
2009-09-01 03:42:52 -07:00
|
|
|
{
|
2014-03-26 01:54:49 -07:00
|
|
|
Evas_Object *ret = NULL;
|
2012-07-04 14:42:35 -07:00
|
|
|
if (part && strcmp(part, "default"))
|
2012-11-25 22:32:53 -08:00
|
|
|
{
|
2016-08-15 06:44:41 -07:00
|
|
|
return efl_content_unset(efl_part(efl_super(obj, MY_CLASS), part));
|
2012-11-25 22:32:53 -08:00
|
|
|
}
|
2012-07-04 14:42:35 -07:00
|
|
|
|
2014-03-26 01:54:49 -07:00
|
|
|
if (!sd->content) return NULL;
|
2012-07-04 14:42:35 -07:00
|
|
|
|
2014-03-26 01:54:49 -07:00
|
|
|
ret = sd->content;
|
2015-01-23 19:01:03 -08:00
|
|
|
if (sd->loop_h || sd->loop_v)
|
2016-05-29 17:47:39 -07:00
|
|
|
_elm_widget_sub_object_redirect_to_top(obj, sd->contents);
|
2015-01-23 19:01:03 -08:00
|
|
|
else
|
2016-05-29 17:47:39 -07:00
|
|
|
_elm_widget_sub_object_redirect_to_top(obj, sd->content);
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_content_set(obj, NULL);
|
2012-07-04 14:42:35 -07:00
|
|
|
sd->content = NULL;
|
2014-03-26 01:54:49 -07:00
|
|
|
|
|
|
|
return ret;
|
2009-09-01 03:42:52 -07:00
|
|
|
}
|
|
|
|
|
2017-08-02 04:55:20 -07:00
|
|
|
EOLIAN static Eina_Bool
|
|
|
|
_elm_scroller_efl_container_content_set(Eo *obj, Elm_Scroller_Data *sd, Eo *content)
|
|
|
|
{
|
|
|
|
return _elm_scroller_content_set(obj, sd, "default", content);
|
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static Eo *
|
|
|
|
_elm_scroller_efl_container_content_get(Eo *obj, Elm_Scroller_Data *sd)
|
|
|
|
{
|
|
|
|
return _elm_scroller_content_get(obj, sd, "default");
|
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static Eo *
|
|
|
|
_elm_scroller_efl_container_content_unset(Eo *obj, Elm_Scroller_Data *sd)
|
|
|
|
{
|
|
|
|
return _elm_scroller_content_unset(obj, sd, "default");
|
|
|
|
}
|
|
|
|
|
2012-07-17 07:56:44 -07:00
|
|
|
static void
|
|
|
|
_elm_scroller_content_min_limit_cb(Evas_Object *obj,
|
|
|
|
Eina_Bool w,
|
|
|
|
Eina_Bool h)
|
|
|
|
{
|
|
|
|
ELM_SCROLLER_DATA_GET(obj, sd);
|
|
|
|
|
|
|
|
sd->min_w = !!w;
|
|
|
|
sd->min_h = !!h;
|
|
|
|
|
|
|
|
elm_layout_sizing_eval(obj);
|
|
|
|
}
|
|
|
|
|
2013-06-29 22:42:34 -07:00
|
|
|
static void
|
|
|
|
_elm_scroller_content_viewport_resize_cb(Evas_Object *obj,
|
|
|
|
Evas_Coord w EINA_UNUSED,
|
|
|
|
Evas_Coord h EINA_UNUSED)
|
|
|
|
{
|
|
|
|
elm_layout_sizing_eval(obj);
|
|
|
|
}
|
|
|
|
|
2014-03-26 01:54:49 -07:00
|
|
|
EOLIAN static void
|
2016-06-17 01:26:08 -07:00
|
|
|
_elm_scroller_efl_canvas_group_group_add(Eo *obj, Elm_Scroller_Data *priv)
|
2009-09-01 03:42:52 -07:00
|
|
|
{
|
2013-10-05 01:15:27 -07:00
|
|
|
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
2013-09-24 21:33:39 -07:00
|
|
|
Evas_Coord minw, minh;
|
2012-07-04 14:42:35 -07:00
|
|
|
|
2016-08-15 06:44:41 -07:00
|
|
|
efl_canvas_group_add(efl_super(obj, MY_CLASS));
|
2013-09-24 21:33:39 -07:00
|
|
|
elm_widget_sub_object_parent_add(obj);
|
2012-07-04 14:42:35 -07:00
|
|
|
elm_widget_can_focus_set(obj, EINA_TRUE);
|
2012-07-17 07:56:44 -07:00
|
|
|
|
2013-03-01 18:04:31 -08:00
|
|
|
if (!elm_layout_theme_set
|
|
|
|
(obj, "scroller", "base", elm_widget_style_get(obj)))
|
2013-12-25 20:03:55 -08:00
|
|
|
CRI("Failed to set layout!");
|
2012-07-17 07:56:44 -07:00
|
|
|
|
|
|
|
priv->hit_rect = evas_object_rectangle_add(evas_object_evas_get(obj));
|
|
|
|
evas_object_smart_member_add(priv->hit_rect, obj);
|
|
|
|
elm_widget_sub_object_add(obj, priv->hit_rect);
|
|
|
|
|
|
|
|
evas_object_color_set(priv->hit_rect, 0, 0, 0, 0);
|
|
|
|
evas_object_show(priv->hit_rect);
|
|
|
|
evas_object_repeat_events_set(priv->hit_rect, EINA_TRUE);
|
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_objects_set(obj, wd->resize_obj, priv->hit_rect);
|
2012-07-17 07:56:44 -07:00
|
|
|
|
|
|
|
evas_object_event_callback_add
|
|
|
|
(obj, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints_cb, obj);
|
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
edje_object_size_min_calc(wd->resize_obj, &minw, &minh);
|
2012-07-17 07:56:44 -07:00
|
|
|
evas_object_size_hint_min_set(obj, minw, minh);
|
|
|
|
evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _resize_cb, obj);
|
|
|
|
|
2017-06-13 03:41:15 -07:00
|
|
|
_mirrored_set(obj, efl_ui_mirrored_get(obj));
|
scroller : Call mirrored_set function after edje_obj is initialized
Summary:
Problem that scroller is not mirrored in RTL mode has been fixed in D4908.
However, I found a problem in init process.
I will revert D4908 commit(https://phab.enlightenment.org/D4908).
After edje_obj is initialized, mirrored_set is called.
When wanted_region_set is called, x-coordinate flip normally and acts as RTL.
Test Plan: scroller test on elementary_test.
Reviewers: raster, woohyun, SanghyeonLee, akanad, eagleeye, cedric, singh.amitesh, eunue
Subscribers: jpeg, cedric
Differential Revision: https://phab.enlightenment.org/D4944
2017-06-06 23:20:17 -07:00
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_edge_left_cb_set(obj, _edge_left_cb);
|
|
|
|
elm_interface_scrollable_edge_right_cb_set(obj, _edge_right_cb);
|
|
|
|
elm_interface_scrollable_edge_top_cb_set(obj, _edge_top_cb);
|
|
|
|
elm_interface_scrollable_edge_bottom_cb_set(obj, _edge_bottom_cb);
|
|
|
|
elm_interface_scrollable_scroll_cb_set(obj, _scroll_cb);
|
|
|
|
elm_interface_scrollable_scroll_left_cb_set(obj, _scroll_left_cb);
|
|
|
|
elm_interface_scrollable_scroll_right_cb_set(obj, _scroll_right_cb);
|
|
|
|
elm_interface_scrollable_scroll_up_cb_set(obj, _scroll_up_cb);
|
|
|
|
elm_interface_scrollable_scroll_down_cb_set(obj, _scroll_down_cb);
|
|
|
|
elm_interface_scrollable_animate_start_cb_set(obj, _scroll_anim_start_cb);
|
|
|
|
elm_interface_scrollable_animate_stop_cb_set(obj, _scroll_anim_stop_cb);
|
|
|
|
elm_interface_scrollable_drag_start_cb_set(obj, _scroll_drag_start_cb);
|
|
|
|
elm_interface_scrollable_drag_stop_cb_set(obj, _scroll_drag_stop_cb);
|
|
|
|
elm_interface_scrollable_vbar_drag_cb_set(obj, _vbar_drag_cb);
|
|
|
|
elm_interface_scrollable_vbar_press_cb_set(obj, _vbar_press_cb);
|
|
|
|
elm_interface_scrollable_vbar_unpress_cb_set(obj, _vbar_unpress_cb);
|
|
|
|
elm_interface_scrollable_hbar_drag_cb_set(obj, _hbar_drag_cb);
|
|
|
|
elm_interface_scrollable_hbar_press_cb_set(obj, _hbar_press_cb);
|
|
|
|
elm_interface_scrollable_hbar_unpress_cb_set(obj, _hbar_unpress_cb);
|
|
|
|
elm_interface_scrollable_page_change_cb_set(obj, _page_change_cb);
|
|
|
|
elm_interface_scrollable_content_min_limit_cb_set
|
|
|
|
(obj, _elm_scroller_content_min_limit_cb);
|
|
|
|
elm_interface_scrollable_content_viewport_resize_cb_set
|
|
|
|
(obj, _elm_scroller_content_viewport_resize_cb);
|
2009-09-01 03:42:52 -07:00
|
|
|
}
|
|
|
|
|
2014-03-26 01:54:49 -07:00
|
|
|
EOLIAN static void
|
2017-09-14 20:14:32 -07:00
|
|
|
_elm_scroller_efl_gfx_position_set(Eo *obj, Elm_Scroller_Data *sd, Eina_Position2D pos)
|
2009-09-01 03:42:52 -07:00
|
|
|
{
|
2017-09-14 20:14:32 -07:00
|
|
|
if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_MOVE, 0, pos.x, pos.y))
|
2016-10-10 20:39:05 -07:00
|
|
|
return;
|
|
|
|
|
2017-09-14 20:14:32 -07:00
|
|
|
efl_gfx_position_set(efl_super(obj, MY_CLASS), pos);
|
|
|
|
efl_gfx_position_set(sd->hit_rect, pos);
|
2009-09-01 03:42:52 -07:00
|
|
|
}
|
|
|
|
|
2014-03-26 01:54:49 -07:00
|
|
|
EOLIAN static void
|
2017-09-15 02:37:25 -07:00
|
|
|
_elm_scroller_efl_gfx_size_set(Eo *obj, Elm_Scroller_Data *sd, Eina_Size2D sz)
|
2009-09-01 03:42:52 -07:00
|
|
|
{
|
2017-09-15 02:37:25 -07:00
|
|
|
if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_RESIZE, 0, sz.w, sz.h))
|
evas/elm: Remove function group_resize
This is an override of efl_gfx_size_set. Same as before, the
order of operations matter so it is possible that a corner
case will break. In particular, legacy code was:
- intercept
- smart resize (do stuff), super, super, super
- evas object resize
The new code is more like:
- intercept
- super, super, super, evas object resize
- do stuff
But unfortunately this broke elm_widget (read: all widgets) as
the internal resize was done before the object resize. So,
inside the resize event cb, the resize_obj size would not match
the smart object size. >_<
2016-10-11 00:54:31 -07:00
|
|
|
return;
|
|
|
|
|
2017-09-15 02:37:25 -07:00
|
|
|
efl_gfx_size_set(efl_super(obj, MY_CLASS), sz);
|
|
|
|
efl_gfx_size_set(sd->hit_rect, sz);
|
2011-10-30 19:56:03 -07:00
|
|
|
}
|
|
|
|
|
2014-03-26 01:54:49 -07:00
|
|
|
EOLIAN static void
|
2016-06-17 01:26:08 -07:00
|
|
|
_elm_scroller_efl_canvas_group_group_member_add(Eo *obj, Elm_Scroller_Data *sd, Evas_Object *member)
|
2012-07-04 14:42:35 -07:00
|
|
|
{
|
2016-08-15 06:44:41 -07:00
|
|
|
efl_canvas_group_member_add(efl_super(obj, MY_CLASS), member);
|
2012-07-04 14:42:35 -07:00
|
|
|
|
|
|
|
if (sd->hit_rect)
|
|
|
|
evas_object_raise(sd->hit_rect);
|
2011-10-30 19:56:03 -07:00
|
|
|
}
|
|
|
|
|
2008-10-06 18:23:49 -07:00
|
|
|
EAPI Evas_Object *
|
|
|
|
elm_scroller_add(Evas_Object *parent)
|
2008-09-29 23:58:56 -07:00
|
|
|
{
|
2012-07-04 14:42:35 -07:00
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
|
2017-07-06 00:47:41 -07:00
|
|
|
return efl_add(MY_CLASS, parent, efl_canvas_object_legacy_ctor(efl_added));
|
2012-11-25 22:32:53 -08:00
|
|
|
}
|
2012-07-04 14:42:35 -07:00
|
|
|
|
2015-05-19 05:34:07 -07:00
|
|
|
EOLIAN static Eo *
|
2016-08-10 07:23:04 -07:00
|
|
|
_elm_scroller_efl_object_constructor(Eo *obj, Elm_Scroller_Data *_pd EINA_UNUSED)
|
2012-11-25 22:32:53 -08:00
|
|
|
{
|
2016-08-15 06:44:41 -07:00
|
|
|
obj = efl_constructor(efl_super(obj, MY_CLASS));
|
2016-06-20 21:26:15 -07:00
|
|
|
efl_canvas_object_type_set(obj, MY_CLASS_NAME_LEGACY);
|
2016-06-16 22:12:02 -07:00
|
|
|
evas_object_smart_callbacks_descriptions_set(obj, _smart_callbacks);
|
2017-10-18 18:13:54 -07:00
|
|
|
efl_access_role_set(obj, EFL_ACCESS_ROLE_SCROLL_PANE);
|
2015-05-19 05:34:07 -07:00
|
|
|
|
|
|
|
return obj;
|
2008-10-06 18:23:49 -07:00
|
|
|
}
|
2008-09-29 23:58:56 -07:00
|
|
|
|
2012-07-04 14:42:35 -07:00
|
|
|
/* deprecated */
|
2014-03-26 01:54:49 -07:00
|
|
|
EOLIAN static void
|
|
|
|
_elm_scroller_custom_widget_base_theme_set(Eo *obj, Elm_Scroller_Data *_pd EINA_UNUSED, const char *klass, const char *group)
|
2010-03-22 21:46:53 -07:00
|
|
|
{
|
2017-08-07 21:28:50 -07:00
|
|
|
EFL_UI_LAYOUT_DATA_GET(obj, ld);
|
2012-07-04 14:42:35 -07:00
|
|
|
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN(klass);
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN(group);
|
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
if (eina_stringshare_replace(&(ld->klass), klass) ||
|
|
|
|
eina_stringshare_replace(&(ld->group), group))
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_obj_widget_theme_apply(obj);
|
2010-03-22 21:46:53 -07:00
|
|
|
}
|
|
|
|
|
2008-10-22 01:58:56 -07:00
|
|
|
EAPI void
|
2012-07-04 14:42:35 -07:00
|
|
|
elm_scroller_content_min_limit(Evas_Object *obj,
|
|
|
|
Eina_Bool w,
|
|
|
|
Eina_Bool h)
|
2008-10-22 01:58:56 -07:00
|
|
|
{
|
2012-07-04 14:42:35 -07:00
|
|
|
ELM_SCROLLABLE_CHECK(obj);
|
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_content_min_limit(obj, w, h);
|
2008-10-22 01:58:56 -07:00
|
|
|
}
|
2009-01-08 23:35:52 -08:00
|
|
|
|
|
|
|
EAPI void
|
2012-07-04 14:42:35 -07:00
|
|
|
elm_scroller_region_show(Evas_Object *obj,
|
|
|
|
Evas_Coord x,
|
|
|
|
Evas_Coord y,
|
|
|
|
Evas_Coord w,
|
|
|
|
Evas_Coord h)
|
2009-01-08 23:35:52 -08:00
|
|
|
{
|
2012-07-04 14:42:35 -07:00
|
|
|
ELM_SCROLLABLE_CHECK(obj);
|
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_content_region_show(obj, x, y, w, h);
|
2009-01-08 23:35:52 -08:00
|
|
|
}
|
2009-04-23 05:58:34 -07:00
|
|
|
|
|
|
|
EAPI void
|
2012-07-04 14:42:35 -07:00
|
|
|
elm_scroller_policy_set(Evas_Object *obj,
|
|
|
|
Elm_Scroller_Policy policy_h,
|
|
|
|
Elm_Scroller_Policy policy_v)
|
2009-04-23 05:58:34 -07:00
|
|
|
{
|
2012-07-04 14:42:35 -07:00
|
|
|
ELM_SCROLLABLE_CHECK(obj);
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_policy_set(obj, policy_h, policy_v);
|
2012-11-25 22:32:53 -08:00
|
|
|
}
|
|
|
|
|
2014-03-26 01:54:49 -07:00
|
|
|
EOLIAN static void
|
|
|
|
_elm_scroller_elm_interface_scrollable_policy_set(Eo *obj, Elm_Scroller_Data *sd EINA_UNUSED, Elm_Scroller_Policy policy_h, Elm_Scroller_Policy policy_v)
|
2012-11-25 22:32:53 -08:00
|
|
|
{
|
2011-08-29 09:30:14 -07:00
|
|
|
if ((policy_h >= ELM_SCROLLER_POLICY_LAST) ||
|
|
|
|
(policy_v >= ELM_SCROLLER_POLICY_LAST))
|
|
|
|
return;
|
2012-07-04 14:42:35 -07:00
|
|
|
|
2016-08-15 06:44:41 -07:00
|
|
|
elm_interface_scrollable_policy_set(efl_super(obj, MY_CLASS), policy_h, policy_v);
|
2009-04-23 05:58:34 -07:00
|
|
|
}
|
|
|
|
|
2010-04-06 07:01:04 -07:00
|
|
|
EAPI void
|
2012-07-04 14:42:35 -07:00
|
|
|
elm_scroller_policy_get(const Evas_Object *obj,
|
|
|
|
Elm_Scroller_Policy *policy_h,
|
|
|
|
Elm_Scroller_Policy *policy_v)
|
2010-04-06 07:01:04 -07:00
|
|
|
{
|
2012-07-04 14:42:35 -07:00
|
|
|
ELM_SCROLLABLE_CHECK(obj);
|
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_policy_get((Eo *) obj, policy_h, policy_v);
|
2010-04-06 07:01:04 -07:00
|
|
|
}
|
|
|
|
|
2013-04-10 04:06:41 -07:00
|
|
|
EAPI void
|
|
|
|
elm_scroller_single_direction_set(Evas_Object *obj,
|
|
|
|
Elm_Scroller_Single_Direction single_dir)
|
|
|
|
{
|
|
|
|
ELM_SCROLLABLE_CHECK(obj);
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_single_direction_set(obj, single_dir);
|
2013-04-10 04:06:41 -07:00
|
|
|
}
|
|
|
|
|
2014-03-26 01:54:49 -07:00
|
|
|
EOLIAN static void
|
|
|
|
_elm_scroller_elm_interface_scrollable_single_direction_set(Eo *obj, Elm_Scroller_Data *sd EINA_UNUSED, Elm_Scroller_Single_Direction single_dir)
|
2013-04-10 04:06:41 -07:00
|
|
|
{
|
|
|
|
if (single_dir >= ELM_SCROLLER_SINGLE_DIRECTION_LAST)
|
|
|
|
return;
|
|
|
|
|
2016-08-15 06:44:41 -07:00
|
|
|
elm_interface_scrollable_single_direction_set(efl_super(obj, MY_CLASS), single_dir);
|
2013-04-10 04:06:41 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EAPI Elm_Scroller_Single_Direction
|
|
|
|
elm_scroller_single_direction_get(const Evas_Object *obj)
|
|
|
|
{
|
|
|
|
ELM_SCROLLABLE_CHECK(obj, ELM_SCROLLER_SINGLE_DIRECTION_NONE);
|
2014-04-03 08:50:15 -07:00
|
|
|
Elm_Scroller_Single_Direction single_dir = ELM_SCROLLER_SINGLE_DIRECTION_NONE;
|
2013-04-10 04:06:41 -07:00
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
single_dir = elm_interface_scrollable_single_direction_get((Eo *) obj);
|
2013-04-10 04:06:41 -07:00
|
|
|
return single_dir;
|
|
|
|
}
|
|
|
|
|
2014-03-26 01:54:49 -07:00
|
|
|
EOLIAN static Elm_Scroller_Single_Direction
|
|
|
|
_elm_scroller_elm_interface_scrollable_single_direction_get(Eo *obj, Elm_Scroller_Data *sd EINA_UNUSED)
|
2013-04-10 04:06:41 -07:00
|
|
|
{
|
2016-08-15 06:44:41 -07:00
|
|
|
return elm_interface_scrollable_single_direction_get(efl_super(obj, MY_CLASS));
|
2013-04-10 04:06:41 -07:00
|
|
|
}
|
|
|
|
|
2009-04-23 05:58:34 -07:00
|
|
|
EAPI void
|
2012-07-04 14:42:35 -07:00
|
|
|
elm_scroller_region_get(const Evas_Object *obj,
|
|
|
|
Evas_Coord *x,
|
|
|
|
Evas_Coord *y,
|
|
|
|
Evas_Coord *w,
|
|
|
|
Evas_Coord *h)
|
2009-04-23 05:58:34 -07:00
|
|
|
{
|
2012-07-04 14:42:35 -07:00
|
|
|
ELM_SCROLLABLE_CHECK(obj);
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_content_region_get((Eo *) obj, x, y, w, h);
|
2009-04-23 05:58:34 -07:00
|
|
|
}
|
2009-05-08 04:27:32 -07:00
|
|
|
|
|
|
|
EAPI void
|
2012-07-04 14:42:35 -07:00
|
|
|
elm_scroller_child_size_get(const Evas_Object *obj,
|
|
|
|
Evas_Coord *w,
|
|
|
|
Evas_Coord *h)
|
2009-05-08 04:27:32 -07:00
|
|
|
{
|
2012-07-04 14:42:35 -07:00
|
|
|
ELM_SCROLLABLE_CHECK(obj);
|
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_content_size_get((Eo *) obj, w, h);
|
2009-05-08 04:27:32 -07:00
|
|
|
}
|
|
|
|
|
2013-05-17 07:30:42 -07:00
|
|
|
EAPI void
|
|
|
|
elm_scroller_page_snap_set(Evas_Object *obj,
|
|
|
|
Eina_Bool page_snap_h,
|
|
|
|
Eina_Bool page_snap_v)
|
|
|
|
{
|
|
|
|
ELM_SCROLLABLE_CHECK(obj);
|
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_page_snap_allow_set
|
|
|
|
(obj, page_snap_h, page_snap_v);
|
2013-05-17 07:30:42 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EAPI void
|
|
|
|
elm_scroller_page_snap_get(const Evas_Object *obj,
|
|
|
|
Eina_Bool *page_snap_h,
|
|
|
|
Eina_Bool *page_snap_v)
|
|
|
|
{
|
|
|
|
ELM_SCROLLABLE_CHECK(obj);
|
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_page_snap_allow_get
|
|
|
|
((Eo *) obj, page_snap_h, page_snap_v);
|
2013-05-17 07:30:42 -07:00
|
|
|
}
|
|
|
|
|
2009-05-08 04:27:32 -07:00
|
|
|
EAPI void
|
2012-07-04 14:42:35 -07:00
|
|
|
elm_scroller_bounce_set(Evas_Object *obj,
|
|
|
|
Eina_Bool h_bounce,
|
|
|
|
Eina_Bool v_bounce)
|
2009-05-08 04:27:32 -07:00
|
|
|
{
|
2012-07-04 14:42:35 -07:00
|
|
|
ELM_SCROLLABLE_CHECK(obj);
|
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_bounce_allow_set(obj, h_bounce, v_bounce);
|
2009-05-08 04:27:32 -07:00
|
|
|
}
|
2009-09-01 03:42:52 -07:00
|
|
|
|
2010-11-04 17:45:59 -07:00
|
|
|
EAPI void
|
2012-07-04 14:42:35 -07:00
|
|
|
elm_scroller_bounce_get(const Evas_Object *obj,
|
|
|
|
Eina_Bool *h_bounce,
|
|
|
|
Eina_Bool *v_bounce)
|
2010-11-04 17:45:59 -07:00
|
|
|
{
|
2012-07-04 14:42:35 -07:00
|
|
|
ELM_SCROLLABLE_CHECK(obj);
|
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_bounce_allow_get((Eo *) obj, h_bounce, v_bounce);
|
2010-11-04 17:45:59 -07:00
|
|
|
}
|
|
|
|
|
2009-09-01 03:42:52 -07:00
|
|
|
EAPI void
|
2012-07-04 14:42:35 -07:00
|
|
|
elm_scroller_page_relative_set(Evas_Object *obj,
|
|
|
|
double h_pagerel,
|
|
|
|
double v_pagerel)
|
2012-11-25 22:32:53 -08:00
|
|
|
{
|
|
|
|
ELM_SCROLLABLE_CHECK(obj);
|
2013-04-17 06:50:41 -07:00
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_page_relative_set((Eo *)obj, h_pagerel, v_pagerel);
|
2009-09-01 03:42:52 -07:00
|
|
|
}
|
|
|
|
|
2012-07-10 14:40:30 -07:00
|
|
|
EAPI void
|
|
|
|
elm_scroller_page_relative_get(const Evas_Object *obj,
|
|
|
|
double *h_pagerel,
|
|
|
|
double *v_pagerel)
|
|
|
|
{
|
2012-09-10 07:06:53 -07:00
|
|
|
ELM_SCROLLABLE_CHECK(obj);
|
2012-07-10 14:40:30 -07:00
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_paging_get((Eo *)obj, h_pagerel, v_pagerel, NULL, NULL);
|
2012-07-10 14:40:30 -07:00
|
|
|
}
|
|
|
|
|
2009-09-01 03:42:52 -07:00
|
|
|
EAPI void
|
2012-07-04 14:42:35 -07:00
|
|
|
elm_scroller_page_size_set(Evas_Object *obj,
|
|
|
|
Evas_Coord h_pagesize,
|
|
|
|
Evas_Coord v_pagesize)
|
2012-11-25 22:32:53 -08:00
|
|
|
{
|
|
|
|
ELM_SCROLLABLE_CHECK(obj);
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_page_size_set(obj, h_pagesize, v_pagesize);
|
2012-11-25 22:32:53 -08:00
|
|
|
}
|
|
|
|
|
2014-03-26 01:54:49 -07:00
|
|
|
EOLIAN static void
|
|
|
|
_elm_scroller_elm_interface_scrollable_page_size_set(Eo *obj, Elm_Scroller_Data *sd EINA_UNUSED, Evas_Coord h_pagesize, Evas_Coord v_pagesize)
|
2009-09-01 03:42:52 -07:00
|
|
|
{
|
2014-04-12 09:58:43 -07:00
|
|
|
double pagerel_h = 0.0, pagerel_v = 0.0;
|
2012-07-04 14:42:35 -07:00
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_paging_get(obj, &pagerel_h, &pagerel_v, NULL, NULL);
|
2012-07-04 14:42:35 -07:00
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_paging_set(obj, pagerel_h, pagerel_v, h_pagesize, v_pagesize);
|
2009-09-01 03:42:52 -07:00
|
|
|
}
|
2009-09-03 05:36:39 -07:00
|
|
|
|
2012-07-10 14:40:30 -07:00
|
|
|
EAPI void
|
|
|
|
elm_scroller_page_size_get(const Evas_Object *obj,
|
|
|
|
Evas_Coord *h_pagesize,
|
|
|
|
Evas_Coord *v_pagesize)
|
|
|
|
{
|
2012-09-10 07:06:53 -07:00
|
|
|
ELM_SCROLLABLE_CHECK(obj);
|
2012-07-10 14:40:30 -07:00
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_paging_get((Eo *)obj, NULL, NULL, h_pagesize, v_pagesize);
|
2012-07-10 14:40:30 -07:00
|
|
|
}
|
|
|
|
|
2014-03-26 01:54:49 -07:00
|
|
|
EOLIAN static void
|
2015-06-25 04:21:00 -07:00
|
|
|
_elm_scroller_page_scroll_limit_set(const Eo *obj, Elm_Scroller_Data *_pd EINA_UNUSED, int page_limit_h, int page_limit_v)
|
2013-04-05 21:06:43 -07:00
|
|
|
{
|
|
|
|
if (page_limit_h < 1)
|
|
|
|
page_limit_h = 9999;
|
|
|
|
if (page_limit_v < 1)
|
|
|
|
page_limit_v = 9999;
|
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_page_scroll_limit_set
|
2016-03-02 07:21:42 -08:00
|
|
|
((Eo *) obj, page_limit_h, page_limit_v);
|
2013-04-05 21:06:43 -07:00
|
|
|
}
|
|
|
|
|
2014-03-26 01:54:49 -07:00
|
|
|
EOLIAN static void
|
2015-06-25 04:21:00 -07:00
|
|
|
_elm_scroller_page_scroll_limit_get(const Eo *obj, Elm_Scroller_Data *_pd EINA_UNUSED, int *page_limit_h, int *page_limit_v)
|
2013-04-05 21:06:43 -07:00
|
|
|
{
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_page_scroll_limit_get
|
|
|
|
(obj, page_limit_h, page_limit_v);
|
2013-04-05 21:06:43 -07:00
|
|
|
}
|
|
|
|
|
2011-08-16 03:52:01 -07:00
|
|
|
EAPI void
|
2012-07-04 14:42:35 -07:00
|
|
|
elm_scroller_current_page_get(const Evas_Object *obj,
|
|
|
|
int *h_pagenumber,
|
|
|
|
int *v_pagenumber)
|
2011-08-16 03:52:01 -07:00
|
|
|
{
|
2012-07-04 14:42:35 -07:00
|
|
|
ELM_SCROLLABLE_CHECK(obj);
|
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_current_page_get((Eo *) obj, h_pagenumber, v_pagenumber);
|
2011-08-16 03:52:01 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EAPI void
|
2012-07-04 14:42:35 -07:00
|
|
|
elm_scroller_last_page_get(const Evas_Object *obj,
|
|
|
|
int *h_pagenumber,
|
|
|
|
int *v_pagenumber)
|
2011-08-16 03:52:01 -07:00
|
|
|
{
|
2012-07-04 14:42:35 -07:00
|
|
|
ELM_SCROLLABLE_CHECK(obj);
|
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_last_page_get((Eo *) obj, h_pagenumber, v_pagenumber);
|
2011-08-16 03:52:01 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EAPI void
|
2012-07-04 14:42:35 -07:00
|
|
|
elm_scroller_page_show(Evas_Object *obj,
|
|
|
|
int h_pagenumber,
|
|
|
|
int v_pagenumber)
|
2011-08-16 03:52:01 -07:00
|
|
|
{
|
2012-07-04 14:42:35 -07:00
|
|
|
ELM_SCROLLABLE_CHECK(obj);
|
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_page_show(obj, h_pagenumber, v_pagenumber);
|
2011-08-16 03:52:01 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EAPI void
|
2012-07-04 14:42:35 -07:00
|
|
|
elm_scroller_page_bring_in(Evas_Object *obj,
|
|
|
|
int h_pagenumber,
|
|
|
|
int v_pagenumber)
|
2011-08-16 03:52:01 -07:00
|
|
|
{
|
2012-07-04 14:42:35 -07:00
|
|
|
ELM_SCROLLABLE_CHECK(obj);
|
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_page_bring_in(obj, h_pagenumber, v_pagenumber);
|
2011-08-16 03:52:01 -07:00
|
|
|
}
|
|
|
|
|
2009-09-03 05:36:39 -07:00
|
|
|
EAPI void
|
2012-07-04 14:42:35 -07:00
|
|
|
elm_scroller_region_bring_in(Evas_Object *obj,
|
|
|
|
Evas_Coord x,
|
|
|
|
Evas_Coord y,
|
|
|
|
Evas_Coord w,
|
|
|
|
Evas_Coord h)
|
2009-09-03 05:36:39 -07:00
|
|
|
{
|
2012-07-04 14:42:35 -07:00
|
|
|
ELM_SCROLLABLE_CHECK(obj);
|
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_region_bring_in(obj, x, y, w, h);
|
2009-09-03 05:36:39 -07:00
|
|
|
}
|
2010-12-17 02:47:55 -08:00
|
|
|
|
|
|
|
EAPI void
|
2012-07-04 14:42:35 -07:00
|
|
|
elm_scroller_gravity_set(Evas_Object *obj,
|
|
|
|
double x,
|
|
|
|
double y)
|
2010-12-17 02:47:55 -08:00
|
|
|
{
|
2012-07-04 14:42:35 -07:00
|
|
|
ELM_SCROLLABLE_CHECK(obj);
|
2010-12-17 02:47:55 -08:00
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_gravity_set(obj, x, y);
|
2010-12-17 02:47:55 -08:00
|
|
|
}
|
|
|
|
|
2012-07-04 14:42:35 -07:00
|
|
|
EAPI void
|
|
|
|
elm_scroller_gravity_get(const Evas_Object *obj,
|
|
|
|
double *x,
|
|
|
|
double *y)
|
2010-12-17 02:47:55 -08:00
|
|
|
{
|
2012-07-04 14:42:35 -07:00
|
|
|
ELM_SCROLLABLE_CHECK(obj);
|
2010-12-17 02:47:55 -08:00
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_gravity_get((Eo *) obj, x, y);
|
2010-12-17 02:47:55 -08:00
|
|
|
}
|
2011-10-14 03:57:31 -07:00
|
|
|
|
2013-05-09 12:26:29 -07:00
|
|
|
EAPI void
|
|
|
|
elm_scroller_movement_block_set(Evas_Object *obj,
|
|
|
|
Elm_Scroller_Movement_Block block)
|
|
|
|
{
|
|
|
|
ELM_SCROLLABLE_CHECK(obj);
|
2017-08-29 01:49:38 -07:00
|
|
|
Efl_Ui_Scroll_Block mode = EFL_UI_SCROLL_BLOCK_NONE;
|
2013-05-09 12:26:29 -07:00
|
|
|
|
2017-08-29 01:49:38 -07:00
|
|
|
// legacy -> eo
|
|
|
|
if (block & ELM_SCROLLER_MOVEMENT_BLOCK_HORIZONTAL)
|
|
|
|
mode |= EFL_UI_SCROLL_BLOCK_HORIZONTAL;
|
|
|
|
if (block & ELM_SCROLLER_MOVEMENT_BLOCK_VERTICAL)
|
|
|
|
mode |= EFL_UI_SCROLL_BLOCK_VERTICAL;
|
|
|
|
|
|
|
|
elm_interface_scrollable_movement_block_set(obj, mode);
|
2013-05-09 12:26:29 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EAPI Elm_Scroller_Movement_Block
|
|
|
|
elm_scroller_movement_block_get(const Evas_Object *obj)
|
|
|
|
{
|
2014-04-03 08:50:15 -07:00
|
|
|
Elm_Scroller_Movement_Block block = ELM_SCROLLER_MOVEMENT_NO_BLOCK;
|
2017-08-29 01:49:38 -07:00
|
|
|
Efl_Ui_Scroll_Block mode;
|
2013-05-09 12:26:29 -07:00
|
|
|
|
2013-11-28 08:17:15 -08:00
|
|
|
ELM_SCROLLABLE_CHECK(obj, ELM_SCROLLER_MOVEMENT_NO_BLOCK);
|
2013-05-09 12:26:29 -07:00
|
|
|
|
2017-08-29 01:49:38 -07:00
|
|
|
mode = elm_interface_scrollable_movement_block_get(obj);
|
|
|
|
|
|
|
|
// eo -> legacy
|
|
|
|
if (mode & EFL_UI_SCROLL_BLOCK_HORIZONTAL)
|
|
|
|
block |= ELM_SCROLLER_MOVEMENT_BLOCK_HORIZONTAL;
|
|
|
|
if (mode & EFL_UI_SCROLL_BLOCK_VERTICAL)
|
|
|
|
block |= ELM_SCROLLER_MOVEMENT_BLOCK_VERTICAL;
|
2013-05-09 12:26:29 -07:00
|
|
|
|
|
|
|
return block;
|
|
|
|
}
|
|
|
|
|
2014-11-20 00:48:36 -08:00
|
|
|
EAPI void
|
|
|
|
elm_scroller_step_size_set(Evas_Object *obj,
|
|
|
|
Evas_Coord x,
|
|
|
|
Evas_Coord y)
|
|
|
|
{
|
|
|
|
ELM_SCROLLABLE_CHECK(obj);
|
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_step_size_set(obj, x, y);
|
2014-11-20 00:48:36 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
EAPI void
|
|
|
|
elm_scroller_step_size_get(const Evas_Object *obj,
|
|
|
|
Evas_Coord *x,
|
|
|
|
Evas_Coord *y)
|
|
|
|
{
|
|
|
|
ELM_SCROLLABLE_CHECK(obj);
|
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_step_size_get((Eo *) obj, x, y);
|
2014-11-20 00:48:36 -08:00
|
|
|
}
|
|
|
|
|
2015-01-23 19:01:03 -08:00
|
|
|
EAPI void
|
|
|
|
elm_scroller_loop_set(Evas_Object *obj,
|
|
|
|
Eina_Bool loop_h,
|
|
|
|
Eina_Bool loop_v)
|
|
|
|
{
|
|
|
|
ELM_SCROLLABLE_CHECK(obj);
|
|
|
|
ELM_SCROLLER_DATA_GET(obj, sd);
|
|
|
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
if (sd->loop_h == loop_h && sd->loop_v == loop_v) return;
|
|
|
|
|
|
|
|
sd->loop_h = loop_h;
|
|
|
|
sd->loop_v = loop_v;
|
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_loop_set(obj, loop_h, loop_v);
|
2015-01-23 19:01:03 -08:00
|
|
|
|
|
|
|
if (sd->content)
|
|
|
|
{
|
|
|
|
if (sd->loop_h || sd->loop_v)
|
|
|
|
{
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_content_set(obj, NULL);
|
2015-01-23 19:01:03 -08:00
|
|
|
_loop_content_set(obj, sd, sd->content);
|
|
|
|
|
|
|
|
if (sd->contents)
|
|
|
|
{
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_content_set(obj, sd->contents);
|
2015-01-23 19:01:03 -08:00
|
|
|
elm_widget_sub_object_add(obj, sd->contents);
|
2017-08-21 23:16:54 -07:00
|
|
|
elm_widget_on_show_region_hook_set(sd->contents, obj, _show_region_hook, NULL);
|
2015-01-23 19:01:03 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
for (i = 0 ; i < 3 ; i++)
|
|
|
|
{
|
|
|
|
if (sd->proxy_content[i])
|
|
|
|
{
|
|
|
|
evas_object_del(sd->proxy_content[i]);
|
|
|
|
sd->proxy_content[i]= NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
elm_layout_sizing_eval(obj);
|
|
|
|
}
|
|
|
|
|
|
|
|
EAPI void
|
|
|
|
elm_scroller_loop_get(const Evas_Object *obj,
|
|
|
|
Eina_Bool *loop_h,
|
|
|
|
Eina_Bool *loop_v)
|
|
|
|
{
|
|
|
|
ELM_SCROLLABLE_CHECK(obj);
|
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_loop_get(obj, loop_h, loop_v);
|
2015-01-23 19:01:03 -08:00
|
|
|
}
|
|
|
|
|
2015-06-22 02:57:51 -07:00
|
|
|
EAPI void
|
|
|
|
elm_scroller_wheel_disabled_set(Evas_Object *obj, Eina_Bool disabled)
|
|
|
|
{
|
|
|
|
ELM_SCROLLABLE_CHECK(obj);
|
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
elm_interface_scrollable_wheel_disabled_set((Eo *)obj, disabled);
|
2015-06-22 02:57:51 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EAPI Eina_Bool
|
|
|
|
elm_scroller_wheel_disabled_get(const Evas_Object *obj)
|
|
|
|
{
|
|
|
|
ELM_SCROLLABLE_CHECK(obj, EINA_FALSE);
|
|
|
|
|
2016-03-02 04:10:48 -08:00
|
|
|
return elm_interface_scrollable_wheel_disabled_get((Eo *) obj);
|
2015-06-22 02:57:51 -07:00
|
|
|
}
|
|
|
|
|
2017-06-13 23:20:23 -07:00
|
|
|
EAPI void
|
|
|
|
elm_scroller_propagate_events_set(Evas_Object *obj, Eina_Bool propagation)
|
2012-11-25 22:32:53 -08:00
|
|
|
{
|
2017-06-13 23:20:23 -07:00
|
|
|
evas_object_propagate_events_set(elm_layout_edje_get(obj), propagation);
|
2011-10-14 03:57:31 -07:00
|
|
|
}
|
|
|
|
|
2017-06-13 23:20:23 -07:00
|
|
|
EAPI Eina_Bool
|
|
|
|
elm_scroller_propagate_events_get(const Evas_Object *obj)
|
2011-10-14 03:57:31 -07:00
|
|
|
{
|
2017-06-13 23:20:23 -07:00
|
|
|
return evas_object_propagate_events_get(elm_layout_edje_get(obj));
|
2012-11-25 22:32:53 -08:00
|
|
|
}
|
2011-10-14 03:57:31 -07:00
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
static void
|
2016-08-10 07:23:04 -07:00
|
|
|
_elm_scroller_class_constructor(Efl_Class *klass)
|
2012-11-25 22:32:53 -08:00
|
|
|
{
|
2013-11-07 03:44:22 -08:00
|
|
|
evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass);
|
2012-11-25 22:32:53 -08:00
|
|
|
}
|
|
|
|
|
2016-12-20 08:34:08 -08:00
|
|
|
EOLIAN static Eina_Bool
|
2017-09-02 10:08:18 -07:00
|
|
|
_elm_scroller_elm_widget_focus_state_apply(Eo *obj, Elm_Scroller_Data *pd EINA_UNUSED, Elm_Widget_Focus_State current_state, Elm_Widget_Focus_State *configured_state, Elm_Widget *redirect EINA_UNUSED)
|
2016-12-20 08:34:08 -08:00
|
|
|
{
|
|
|
|
//undepended from logical or not we always reigster as full with ourself as redirect
|
2017-09-02 10:08:18 -07:00
|
|
|
configured_state->logical = EINA_TRUE;
|
|
|
|
return elm_obj_widget_focus_state_apply(efl_super(obj, MY_CLASS), current_state, configured_state, obj);
|
2016-12-20 08:34:08 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2014-07-25 01:33:19 -07:00
|
|
|
EOLIAN const Elm_Atspi_Action *
|
|
|
|
_elm_scroller_elm_interface_atspi_widget_action_elm_actions_get(Eo *obj EINA_UNUSED, Elm_Scroller_Data *pd EINA_UNUSED)
|
|
|
|
{
|
|
|
|
static Elm_Atspi_Action atspi_actions[] = {
|
|
|
|
{ "move,prior", "move", "prior", _key_action_move},
|
|
|
|
{ "move,next", "move", "next", _key_action_move},
|
|
|
|
{ "move,left", "move", "left", _key_action_move},
|
|
|
|
{ "move,right", "move", "right", _key_action_move},
|
|
|
|
{ "move,up", "move", "up", _key_action_move},
|
|
|
|
{ "move,down", "move", "down", _key_action_move},
|
|
|
|
{ "move,first", "move", "first", _key_action_move},
|
|
|
|
{ "move,last", "move", "last", _key_action_move},
|
|
|
|
{ NULL, NULL, NULL, NULL }
|
|
|
|
};
|
|
|
|
return &atspi_actions[0];
|
|
|
|
}
|
|
|
|
|
2017-08-16 23:08:00 -07:00
|
|
|
/* Standard widget overrides */
|
|
|
|
|
|
|
|
ELM_WIDGET_KEY_DOWN_DEFAULT_IMPLEMENT(elm_scroller, Elm_Scroller_Data)
|
|
|
|
|
2016-05-24 04:40:18 -07:00
|
|
|
/* Efl.Part begin */
|
|
|
|
|
2017-09-19 04:02:26 -07:00
|
|
|
ELM_PART_OVERRIDE(elm_scroller, ELM_SCROLLER, Elm_Scroller_Data)
|
|
|
|
ELM_PART_OVERRIDE_CONTENT_SET(elm_scroller, ELM_SCROLLER, Elm_Scroller_Data)
|
|
|
|
ELM_PART_OVERRIDE_CONTENT_GET(elm_scroller, ELM_SCROLLER, Elm_Scroller_Data)
|
|
|
|
ELM_PART_OVERRIDE_CONTENT_UNSET(elm_scroller, ELM_SCROLLER, Elm_Scroller_Data)
|
2017-08-02 04:55:20 -07:00
|
|
|
// FIXME: should be "content" but "default" was legacy API
|
2017-06-29 04:02:59 -07:00
|
|
|
ELM_PART_CONTENT_DEFAULT_SET(elm_scroller, "default")
|
edje/elm: Rename _internal_ to _part_ (EO)
In Edje and Elementary, we have part objects, which are what is returned
by the interface efl_part(). Those objects can't be of an opaque type as
this doesn't work nicely with strongly typed languages such as C++ or
C#. In JS, Lua, C the types are weak and mostly runtime-based so it
doesn't matter much.
As a consequence, the documentation and the types need to look nice in
this EO API. Thus, we remove the abusive term "internal" and explicitly
call all those classes "part" something.
Eventually we want the types to be declared in the EO file so bindings
(C#, C++, ...) can generate the proper access methods, returning the
best possible types.
Note that right now a few of those part types are used in the legacy API
but don't actually need to be exposed externally.
This is kind of a mega commit that does all the renaming at once, but
it's really just a big sed operation. The power of good IDEs :)
Ref T5315
Ref T5306
2017-09-12 21:29:25 -07:00
|
|
|
#include "elm_scroller_part.eo.c"
|
2016-05-24 04:40:18 -07:00
|
|
|
|
|
|
|
/* Efl.Part end */
|
|
|
|
|
2017-05-18 01:52:17 -07:00
|
|
|
/* Internal EO APIs and hidden overrides */
|
|
|
|
|
|
|
|
#define ELM_SCROLLER_EXTRA_OPS \
|
2017-06-29 04:02:59 -07:00
|
|
|
ELM_PART_CONTENT_DEFAULT_OPS(elm_scroller), \
|
2017-08-07 00:13:38 -07:00
|
|
|
ELM_LAYOUT_SIZING_EVAL_OPS(elm_scroller), \
|
2017-05-18 01:52:17 -07:00
|
|
|
EFL_CANVAS_GROUP_ADD_OPS(elm_scroller)
|
|
|
|
|
2014-03-26 01:54:49 -07:00
|
|
|
#include "elm_scroller.eo.c"
|