elm scroller - fix self feeding reconfigure to bail out on many loops

This commit is contained in:
Carsten Haitzler 2014-02-14 17:29:11 +09:00
parent c45fd8aff3
commit 1d4b74e1de
3 changed files with 81 additions and 15 deletions

View File

@ -41,10 +41,7 @@ group { name: "elm/scroller/base/default";
}
// vert bar ////////////////////////////////////////////////////////////////
part { name: "sb_vbar_show"; type: RECT;
scale: 1;
description { state: "default" 0.0;
// rel1.offset: -11 -11;
// rel2.offset: 10 10;
}
description { state: "hidden" 0.0;
inherit: "default" 0.0;
@ -54,8 +51,8 @@ group { name: "elm/scroller/base/default";
part { name: "sb_vbar"; type: RECT;
scale: 1;
description { state: "default" 0.0;
fixed: 1 0;
min: 15 15;
fixed: 1 1;
min: 15 1;
align: 1.0 0.0;
rel1.relative: 1.0 0.0;
rel1.offset: -1 0;
@ -76,6 +73,7 @@ group { name: "elm/scroller/base/default";
rel1.to: "sb_vbar_a1";
rel2.relative: 1.0 0.0;
rel2.to: "sb_vbar_a2";
fixed: 1 1;
}
}
part { name: "sb_vbar_p1"; type: RECT;
@ -86,6 +84,7 @@ group { name: "elm/scroller/base/default";
rel1.to: "sb_vbar_a1";
rel2.relative: 1.0 0.0;
rel2.to: "elm.dragable.vbar";
fixed: 1 1;
}
}
part { name: "sb_vbar_p2"; type: RECT;
@ -96,6 +95,7 @@ group { name: "elm/scroller/base/default";
rel1.to: "elm.dragable.vbar";
rel2.relative: 1.0 0.0;
rel2.to: "sb_vbar_a2";
fixed: 1 1;
}
}
part { name: "elm.dragable.vbar"; type: RECT;
@ -106,13 +106,17 @@ group { name: "elm/scroller/base/default";
dragable.confine: "sb_vbar_base";
description { state: "default" 0.0;
fixed: 1 1;
min: 15 15;
min: 15 1;
rel1.relative: 0.5 0.5;
rel1.to: "sb_vbar_base";
rel2.relative: 0.5 0.5;
rel2.to: "sb_vbar_base";
color: 0 0 0 0;
}
description { state: "hidden" 0.0;
inherit: "default" 0.0;
min: 0 0;
}
}
part { name: "sb_vbar_a1"; type: RECT;
clip_to: "sb_vbar";
@ -127,6 +131,10 @@ group { name: "elm/scroller/base/default";
rel2.relative: 1.0 0.0;
rel2.offset: -1 0;
}
description { state: "hidden" 0.0;
inherit: "default" 0.0;
min: 0 0;
}
}
part { name: "sb_vbar_a2"; type: RECT;
clip_to: "sb_vbar";
@ -141,18 +149,28 @@ group { name: "elm/scroller/base/default";
rel1.relative: 0.0 1.0;
rel2.to: "sb_vbar";
}
description { state: "hidden" 0.0;
inherit: "default" 0.0;
min: 0 0;
}
}
program {
signal: "elm,action,show,vbar"; source: "elm";
action: STATE_SET "default" 0.0;
target: "sb_vbar";
target: "sb_vbar_show";
target: "elm.dragable.vbar";
target: "sb_vbar_a1";
target: "sb_vbar_a2";
}
program {
signal: "elm,action,hide,vbar"; source: "elm";
action: STATE_SET "hidden" 0.0;
target: "sb_vbar";
target: "sb_vbar_show";
target: "elm.dragable.vbar";
target: "sb_vbar_a1";
target: "sb_vbar_a2";
}
program {
signal: "mouse,down,1*"; source: "sb_vbar_a1";
@ -201,10 +219,7 @@ group { name: "elm/scroller/base/default";
// horiz bar /////////////////////////////////////////////////////////////
part { name: "sb_hbar_show"; type: RECT;
scale: 1;
description { state: "default" 0.0;
// rel1.offset: -11 -11;
// rel2.offset: 10 10;
}
description { state: "hidden" 0.0;
inherit: "default" 0.0;
@ -214,8 +229,8 @@ group { name: "elm/scroller/base/default";
part { name: "sb_hbar"; type: RECT; mouse_events: 0;
scale: 1;
description { state: "default" 0.0;
fixed: 0 1;
min: 15 15;
fixed: 1 1;
min: 1 15;
align: 0.0 1.0;
rel1.relative: 0.0 1.0;
rel1.offset: 0 -1;
@ -236,6 +251,7 @@ group { name: "elm/scroller/base/default";
rel1.to: "sb_hbar_a1";
rel2.relative: 0.0 1.0;
rel2.to: "sb_hbar_a2";
fixed: 1 1;
}
}
part { name: "sb_hbar_p1"; type: RECT;
@ -246,6 +262,7 @@ group { name: "elm/scroller/base/default";
rel1.to: "sb_hbar_a1";
rel2.relative: 0.0 1.0;
rel2.to: "elm.dragable.hbar";
fixed: 1 1;
}
}
part { name: "sb_hbar_p2"; type: RECT;
@ -256,6 +273,7 @@ group { name: "elm/scroller/base/default";
rel1.to: "elm.dragable.hbar";
rel2.relative: 0.0 1.0;
rel2.to: "sb_hbar_a2";
fixed: 1 1;
}
}
part { name: "elm.dragable.hbar"; type: RECT;
@ -266,13 +284,17 @@ group { name: "elm/scroller/base/default";
dragable.confine: "sb_hbar_base";
description { state: "default" 0.0;
fixed: 1 1;
min: 15 15;
min: 1 15;
rel1.relative: 0.5 0.5;
rel1.to: "sb_hbar_base";
rel2.relative: 0.5 0.5;
rel2.to: "sb_hbar_base";
color: 0 0 0 0;
}
description { state: "hidden" 0.0;
inherit: "default" 0.0;
min: 0 0;
}
}
part { name: "sb_hbar_a1"; type: RECT;
clip_to: "sb_hbar";
@ -287,6 +309,10 @@ group { name: "elm/scroller/base/default";
rel2.relative: 0.0 1.0;
rel2.offset: 0 -1;
}
description { state: "hidden" 0.0;
inherit: "default" 0.0;
min: 0 0;
}
}
part { name: "sb_hbar_a2"; type: RECT;
clip_to: "sb_hbar";
@ -301,18 +327,28 @@ group { name: "elm/scroller/base/default";
rel1.relative: 1.0 0.0;
rel2.to: "sb_hbar";
}
description { state: "hidden" 0.0;
inherit: "default" 0.0;
min: 0 0;
}
}
program {
signal: "elm,action,show,hbar"; source: "elm";
action: STATE_SET "default" 0.0;
target: "sb_hbar";
target: "sb_hbar_show";
target: "elm.dragable.hbar";
target: "sb_hbar_a1";
target: "sb_hbar_a2";
}
program {
signal: "elm,action,hide,hbar"; source: "elm";
action: STATE_SET "hidden" 0.0;
target: "sb_hbar";
target: "sb_hbar_show";
target: "elm.dragable.hbar";
target: "sb_hbar_a1";
target: "sb_hbar_a2";
}
program {
signal: "mouse,down,1*"; source: "sb_hbar_a1";
@ -424,6 +460,7 @@ group { name: "elm/scroller/base/default";
rel2.to: "elm.swallow.content";
}
}
part { name: "runner_vbar"; mouse_events: 0;
clip_to: "sb_vbar_show";
description { state: "default" 0.0;
@ -434,6 +471,7 @@ group { name: "elm/scroller/base/default";
fill.smooth: 0;
min: 3 4;
max: 3 99999;
fixed: 1 1;
}
}
part { name: "runner_hbar"; mouse_events: 0;
@ -446,6 +484,7 @@ group { name: "elm/scroller/base/default";
fill.smooth: 0;
min: 4 3;
max: 99999 3;
fixed: 1 1;
}
}
part { name: "runner_vbar_clip"; type: RECT;
@ -457,6 +496,7 @@ group { name: "elm/scroller/base/default";
rel1.offset: 0 1;
rel2.to: "runner_vbar";
rel2.offset: -1 -2;
fixed: 1 1;
}
}
part { name: "runner_hbar_clip"; type: RECT;
@ -468,6 +508,7 @@ group { name: "elm/scroller/base/default";
rel1.offset: 1 0;
rel2.to: "runner_hbar";
rel2.offset: -2 -1;
fixed: 1 1;
}
}
@ -507,6 +548,7 @@ group { name: "elm/scroller/base/default";
image.normal: "shadow_square_tiny.png";
image.border: 6 6 6 6;
fill.smooth: 0;
fixed: 1 1;
}
description { state: "clicked" 0.0;
inherit: "default" 0.0;
@ -526,6 +568,7 @@ group { name: "elm/scroller/base/default";
image.border: 7 7 7 7;
fill.smooth: 0;
visible: 0;
fixed: 1 1;
}
description { state: "clicked" 0.0;
inherit: "default" 0.0;
@ -543,6 +586,7 @@ group { name: "elm/scroller/base/default";
rel2.to_y: "base_vbar";
image.normal: "runner_glow_vert.png";
image.border: 0 0 33 33;
fixed: 1 1;
}
}
part { name: "base_vbar"; mouse_events: 0;
@ -557,6 +601,7 @@ group { name: "elm/scroller/base/default";
fill.smooth: 0;
min: 3 13;
TILED_HORIZ(120)
fixed: 1 1;
}
}
part { name: "bevel_vbar"; mouse_events: 0;
@ -569,6 +614,7 @@ group { name: "elm/scroller/base/default";
image.middle: 0;
fill.smooth: 0;
min: 3 3;
fixed: 1 1;
}
}
part { name: "center_vbar"; mouse_events: 0;
@ -631,6 +677,7 @@ group { name: "elm/scroller/base/default";
image.normal: "shadow_square_tiny.png";
image.border: 6 6 6 6;
fill.smooth: 0;
fixed: 1 1;
}
description { state: "clicked" 0.0;
inherit: "default" 0.0;
@ -650,6 +697,7 @@ group { name: "elm/scroller/base/default";
image.border: 7 7 7 7;
fill.smooth: 0;
visible: 0;
fixed: 1 1;
}
description { state: "clicked" 0.0;
inherit: "default" 0.0;
@ -667,6 +715,7 @@ group { name: "elm/scroller/base/default";
rel2.to_y: "runner_hbar_clip";
image.normal: "runner_glow_horiz.png";
image.border: 33 33 0 0;
fixed: 1 1;
}
}
part { name: "base_hbar"; mouse_events: 0;
@ -693,6 +742,7 @@ group { name: "elm/scroller/base/default";
image.middle: 0;
fill.smooth: 0;
min: 3 3;
fixed: 1 1;
}
}
part { name: "center_hbar"; mouse_events: 0;
@ -702,6 +752,7 @@ group { name: "elm/scroller/base/default";
rel2.to: "base_hbar";
image.normal: "holes_tiny_horiz.png";
FIXED_SIZE(11, 3)
fixed: 1 1;
}
}
part { name: "center_glow_hbar"; mouse_events: 0;

View File

@ -3470,19 +3470,32 @@ _on_edje_move(void *data,
static void
_on_edje_resize(void *data,
Evas *e EINA_UNUSED,
Evas *e,
Evas_Object *edje_obj,
void *event_info EINA_UNUSED)
{
Elm_Scrollable_Smart_Interface_Data *sid = data;
int w, h;
Evas_Coord w, h;
int current_calc;
Eina_Bool reconf_ok = EINA_TRUE;
evas_object_geometry_get(edje_obj, NULL, NULL, &w, &h);
sid->w = w;
sid->h = h;
_elm_scroll_reconfigure(sid);
current_calc = evas_smart_objects_calculate_count_get(e);
if (current_calc == sid->current_calc)
{
sid->size_count++;
if (sid->size_count > 3) reconf_ok = EINA_FALSE;
}
else
{
sid->current_calc = current_calc;
sid->size_count = 0;
}
if (reconf_ok) _elm_scroll_reconfigure(sid);
_elm_scroll_wanted_region_set(sid->obj);
}

View File

@ -1193,8 +1193,10 @@ struct _Elm_Scrollable_Smart_Interface_Data
double pagerel_h, pagerel_v;
Evas_Coord pagesize_h, pagesize_v;
int page_limit_h, page_limit_v;
int current_calc;
unsigned char size_adjust_recurse;
unsigned char size_count;
Eina_Bool size_adjust_recurse_abort : 1;
Eina_Bool momentum_animator_disabled : 1;