Elementary scroller: Fixed an issue in scroller. When a resize happens (or any change for that matter), we should go to the last "asked for" location. This for example fixes an issue with elm_scrolled_entry (and many other widgets) showing "empty regions" on some resizes.
SVN revision: 56276
This commit is contained in:
parent
338cd44b00
commit
5e82ffad18
|
@ -34,6 +34,7 @@ typedef struct _Widget_Data Widget_Data;
|
|||
|
||||
struct _Widget_Data
|
||||
{
|
||||
Evas_Coord wx, wy, ww, wh; /* Last "wanted" geometry */
|
||||
Evas_Object *scr;
|
||||
Evas_Object *content;
|
||||
const char *widget_name, *widget_base;
|
||||
|
@ -247,20 +248,15 @@ _signal_callback_del_hook(Evas_Object *obj, const char *emission, const char *so
|
|||
static void
|
||||
_show_region_hook(void *data, Evas_Object *obj)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(data);
|
||||
Evas_Coord x, y, w, h;
|
||||
if (!wd) return;
|
||||
elm_widget_show_region_get(obj, &x, &y, &w, &h);
|
||||
if (wd->scr)
|
||||
elm_smart_scroller_child_region_show(wd->scr, x, y, w, h);
|
||||
elm_scroller_region_show(data, x, y, w, h);
|
||||
}
|
||||
|
||||
static void
|
||||
_focus_region_hook(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (wd->scr)
|
||||
elm_smart_scroller_child_region_show(wd->scr, x, y, w, h);
|
||||
elm_scroller_region_show(obj, x, y, w, h);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -299,6 +295,7 @@ _sizing_eval(Evas_Object *obj)
|
|||
if ((maxw > 0) && (w > maxw)) w = maxw;
|
||||
if ((maxh > 0) && (h > maxh)) h = maxh;
|
||||
evas_object_size_hint_min_set(obj, w, h);
|
||||
elm_smart_scroller_child_region_show(wd->scr, wd->wx, wd->wy, wd->ww, wd->wh);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -531,6 +528,8 @@ elm_scroller_content_set(Evas_Object *obj, Evas_Object *content)
|
|||
if (!wd) return;
|
||||
if (wd->content == content) return;
|
||||
if (wd->content) evas_object_del(wd->content);
|
||||
wd->wx = wd->wh = wd->ww = wd->wy = 0;
|
||||
|
||||
wd->content = content;
|
||||
if (content)
|
||||
{
|
||||
|
@ -655,6 +654,11 @@ elm_scroller_region_show(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coor
|
|||
ELM_CHECK_WIDTYPE(obj, widtype);
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if ((!wd) || (!wd->scr)) return;
|
||||
wd->wx = x;
|
||||
wd->wh = h;
|
||||
wd->ww = w;
|
||||
wd->wy = y;
|
||||
|
||||
elm_smart_scroller_child_region_show(wd->scr, x, y, w, h);
|
||||
}
|
||||
|
||||
|
@ -872,6 +876,10 @@ elm_scroller_region_bring_in(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_
|
|||
ELM_CHECK_WIDTYPE(obj, widtype);
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if ((!wd) || (!wd->scr)) return;
|
||||
wd->wx = x;
|
||||
wd->wh = h;
|
||||
wd->ww = w;
|
||||
wd->wy = y;
|
||||
elm_smart_scroller_region_bring_in(wd->scr, x, y, w, h);
|
||||
}
|
||||
|
||||
|
|
|
@ -941,7 +941,9 @@ elm_smart_scroller_child_region_show(Evas_Object *obj, Evas_Coord x, Evas_Coord
|
|||
ny = y + h - (ch - my);
|
||||
if (ny > y) ny = y;
|
||||
}
|
||||
if ((nx == px) && (ny == py)) return;
|
||||
/* Note: this function should "show" a cursor position even if it's the same
|
||||
* as the cached position, because it makes sense if the size of the
|
||||
* scroller or the child have changed */
|
||||
if ((sd->down.bounce_x_animator) || (sd->down.bounce_y_animator) ||
|
||||
(sd->scrollto.x.animator) || (sd->scrollto.y.animator))
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue