forked from enlightenment/efl
efl_ui_widget: move show_region to legacy
summary_: show_region is simular to focus_region. However, it builds up on setting custom functions per setter to the widget, which are then executed. This can be solved better by overwriting the interest_region getter, and using a function like elm_widget_focus_region_show (This function still needs to find its place in the eo api). ref T7553 Depends on D8025 Reviewers: woohyun, cedric, Jaehyun_Cho, zmike, segfaultxavi Reviewed By: segfaultxavi Subscribers: #reviewers, #committers Tags: #efl Maniphest Tasks: T7553 Reviewed-by: Xavi Artigas <xavierartigas@yahoo.es> Differential Revision: https://phab.enlightenment.org/D8026
This commit is contained in:
parent
b704db8f07
commit
29e6d1d364
|
@ -1342,20 +1342,6 @@ _efl_ui_widget_efl_ui_i18n_mirrored_automatic_set(Eo *obj, Elm_Widget_Smart_Data
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EOLIAN static void
|
|
||||||
_efl_ui_widget_on_show_region_hook_set(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd, void *data, Efl_Ui_Scrollable_On_Show_Region func, Eina_Free_Cb func_free_cb)
|
|
||||||
{
|
|
||||||
if ((sd->on_show_region_data == data) && (sd->on_show_region == func))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (sd->on_show_region_data && sd->on_show_region_data_free)
|
|
||||||
sd->on_show_region_data_free(sd->on_show_region_data);
|
|
||||||
|
|
||||||
sd->on_show_region = func;
|
|
||||||
sd->on_show_region_data = data;
|
|
||||||
sd->on_show_region_data_free = func_free_cb;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @internal
|
* @internal
|
||||||
*
|
*
|
||||||
|
@ -2422,66 +2408,6 @@ _efl_ui_widget_disabled_get(const Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *pd
|
||||||
return pd->disabled > 0;
|
return pd->disabled > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
EOLIAN static void
|
|
||||||
_efl_ui_widget_show_region_set(Eo *obj, Elm_Widget_Smart_Data *sd, Eina_Rect sr, Eina_Bool forceshow)
|
|
||||||
{
|
|
||||||
Evas_Object *parent_obj, *child_obj;
|
|
||||||
Evas_Coord px, py, cx, cy, nx = 0, ny = 0;
|
|
||||||
|
|
||||||
evas_smart_objects_calculate(evas_object_evas_get(obj));
|
|
||||||
|
|
||||||
if (!forceshow && eina_rectangle_equal(&sr.rect, &sd->show_region.rect)) return;
|
|
||||||
|
|
||||||
sd->show_region = sr;
|
|
||||||
if (sd->on_show_region)
|
|
||||||
{
|
|
||||||
sd->on_show_region(sd->on_show_region_data, obj, sr);
|
|
||||||
|
|
||||||
if (_elm_scrollable_is(obj))
|
|
||||||
{
|
|
||||||
if (elm_widget_is_legacy(obj))
|
|
||||||
{
|
|
||||||
elm_interface_scrollable_content_pos_get(obj, &nx, &ny);
|
|
||||||
sr.x -= nx;
|
|
||||||
sr.y -= ny;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Eina_Position2D pos;
|
|
||||||
pos = efl_ui_scrollable_content_pos_get(obj);
|
|
||||||
sr.x -= pos.x;
|
|
||||||
sr.y -= pos.y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
parent_obj = sd->parent_obj;
|
|
||||||
child_obj = sd->obj;
|
|
||||||
if ((!parent_obj) || (!_elm_widget_is(parent_obj))) break;
|
|
||||||
sd = efl_data_scope_get(parent_obj, MY_CLASS);
|
|
||||||
if (!sd) break;
|
|
||||||
|
|
||||||
evas_object_geometry_get(parent_obj, &px, &py, NULL, NULL);
|
|
||||||
evas_object_geometry_get(child_obj, &cx, &cy, NULL, NULL);
|
|
||||||
|
|
||||||
sr.x += (cx - px);
|
|
||||||
sr.y += (cy - py);
|
|
||||||
sd->show_region = sr;
|
|
||||||
|
|
||||||
if (sd->on_show_region)
|
|
||||||
sd->on_show_region(sd->on_show_region_data, parent_obj, sr);
|
|
||||||
}
|
|
||||||
while (parent_obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
EOLIAN static Eina_Rect
|
|
||||||
_efl_ui_widget_show_region_get(const Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd)
|
|
||||||
{
|
|
||||||
return (Eina_Rect) sd->show_region;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
*
|
*
|
||||||
|
@ -5481,6 +5407,84 @@ _efl_ui_widget_efl_ui_focus_object_focus_set(Eo *obj, Elm_Widget_Smart_Data *pd,
|
||||||
|
|
||||||
/* Legacy APIs */
|
/* Legacy APIs */
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
elm_widget_on_show_region_hook_set(Eo *obj, void *data, Efl_Ui_Scrollable_On_Show_Region func, Eina_Free_Cb func_free_cb)
|
||||||
|
{
|
||||||
|
ELM_WIDGET_DATA_GET(obj, sd);
|
||||||
|
|
||||||
|
if ((sd->on_show_region_data == data) && (sd->on_show_region == func))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (sd->on_show_region_data && sd->on_show_region_data_free)
|
||||||
|
sd->on_show_region_data_free(sd->on_show_region_data);
|
||||||
|
|
||||||
|
sd->on_show_region = func;
|
||||||
|
sd->on_show_region_data = data;
|
||||||
|
sd->on_show_region_data_free = func_free_cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
elm_widget_show_region_set(Eo *obj, Eina_Rect sr, Eina_Bool forceshow)
|
||||||
|
{
|
||||||
|
Evas_Object *parent_obj, *child_obj;
|
||||||
|
Evas_Coord px, py, cx, cy, nx = 0, ny = 0;
|
||||||
|
|
||||||
|
ELM_WIDGET_DATA_GET_OR_RETURN(obj, sd);
|
||||||
|
|
||||||
|
evas_smart_objects_calculate(evas_object_evas_get(obj));
|
||||||
|
|
||||||
|
if (!forceshow && eina_rectangle_equal(&sr.rect, &sd->show_region.rect)) return;
|
||||||
|
|
||||||
|
sd->show_region = sr;
|
||||||
|
if (sd->on_show_region)
|
||||||
|
{
|
||||||
|
sd->on_show_region(sd->on_show_region_data, obj, sr);
|
||||||
|
|
||||||
|
if (_elm_scrollable_is(obj))
|
||||||
|
{
|
||||||
|
if (elm_widget_is_legacy(obj))
|
||||||
|
{
|
||||||
|
elm_interface_scrollable_content_pos_get(obj, &nx, &ny);
|
||||||
|
sr.x -= nx;
|
||||||
|
sr.y -= ny;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Eina_Position2D pos;
|
||||||
|
pos = efl_ui_scrollable_content_pos_get(obj);
|
||||||
|
sr.x -= pos.x;
|
||||||
|
sr.y -= pos.y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
parent_obj = sd->parent_obj;
|
||||||
|
child_obj = sd->obj;
|
||||||
|
if ((!parent_obj) || (!_elm_widget_is(parent_obj))) break;
|
||||||
|
sd = efl_data_scope_get(parent_obj, MY_CLASS);
|
||||||
|
if (!sd) break;
|
||||||
|
|
||||||
|
evas_object_geometry_get(parent_obj, &px, &py, NULL, NULL);
|
||||||
|
evas_object_geometry_get(child_obj, &cx, &cy, NULL, NULL);
|
||||||
|
|
||||||
|
sr.x += (cx - px);
|
||||||
|
sr.y += (cy - py);
|
||||||
|
sd->show_region = sr;
|
||||||
|
|
||||||
|
if (sd->on_show_region)
|
||||||
|
sd->on_show_region(sd->on_show_region_data, parent_obj, sr);
|
||||||
|
}
|
||||||
|
while (parent_obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI Eina_Rect
|
||||||
|
elm_widget_show_region_get(const Eo *obj)
|
||||||
|
{
|
||||||
|
ELM_WIDGET_DATA_GET_OR_RETURN(obj, sd, EINA_RECT_EMPTY());
|
||||||
|
return (Eina_Rect) sd->show_region;
|
||||||
|
}
|
||||||
/* elm_object_content_xxx APIs are supposed to work on all objects for which
|
/* elm_object_content_xxx APIs are supposed to work on all objects for which
|
||||||
* elm_object_widget_check() returns true. The below checks avoid printing out
|
* elm_object_widget_check() returns true. The below checks avoid printing out
|
||||||
* undesired ERR messages. */
|
* undesired ERR messages. */
|
||||||
|
|
|
@ -329,43 +329,6 @@ abstract @beta Efl.Ui.Widget extends Efl.Canvas.Group implements Efl.Access.Obje
|
||||||
theme or default theme was used.]]
|
theme or default theme was used.]]
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Scroll API. */
|
|
||||||
@property on_show_region_hook @protected {
|
|
||||||
[[Hook function called when the @.show_region is changed.
|
|
||||||
|
|
||||||
See also @.show_region.
|
|
||||||
]]
|
|
||||||
set {}
|
|
||||||
values {
|
|
||||||
func: Efl.Ui.Scrollable_On_Show_Region @nullable; [[Region hook function]]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@property show_region @protected {
|
|
||||||
[[Region inside the widget to show.
|
|
||||||
|
|
||||||
See also @.on_show_region_hook.
|
|
||||||
]]
|
|
||||||
set {
|
|
||||||
[[Request parent scrollers to pan around so that this region
|
|
||||||
of the widget becomes visible.
|
|
||||||
|
|
||||||
If $force is $true this will trigger scroller changes and
|
|
||||||
the @.on_show_region_hook to be called even if the region is
|
|
||||||
unchanged.
|
|
||||||
]]
|
|
||||||
values {
|
|
||||||
region: Eina.Rect; [[The region to show.]]
|
|
||||||
force: bool; [[Set to $true to force show even if unchanged.]]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
get {
|
|
||||||
[[Returns the current region to show.]]
|
|
||||||
values {
|
|
||||||
region: Eina.Rect; [[The region to show.]]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* FIXME: Scroll API. Not sure how those APIs should be exposed with
|
/* FIXME: Scroll API. Not sure how those APIs should be exposed with
|
||||||
* the new scrollable API. */
|
* the new scrollable API. */
|
||||||
scroll_hold_push {
|
scroll_hold_push {
|
||||||
|
@ -410,9 +373,9 @@ abstract @beta Efl.Ui.Widget extends Efl.Canvas.Group implements Efl.Access.Obje
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@property interest_region_mode {
|
@property interest_region_mode {
|
||||||
[[Defines how @.show_region should be calculated.
|
[[Defines how @.interest_region should be calculated.
|
||||||
|
|
||||||
It is up to the implementation of @.show_region.get to take this
|
It is up to the implementation of @.interest_region.get to take this
|
||||||
value into account (or ignore it).
|
value into account (or ignore it).
|
||||||
]]
|
]]
|
||||||
get {
|
get {
|
||||||
|
|
Loading…
Reference in New Issue