Elementary els_scroller: Added mirrored_set and mirroring support.

SVN revision: 56802
This commit is contained in:
Tom Hacohen 2011-02-08 12:08:24 +00:00
parent 7ac159bb4a
commit d6c8dee076
2 changed files with 56 additions and 2 deletions

View File

@ -104,6 +104,7 @@ struct _Smart_Data
unsigned char bounce_vert : 1;
unsigned char momentum_animator_disabled :1;
unsigned char bounce_animator_disabled :1;
Eina_Bool is_mirrored : 1;
};
/* local subsystem functions */
@ -152,6 +153,36 @@ elm_smart_scroller_add(Evas *evas)
return evas_object_smart_add(evas, _smart);
}
static Evas_Coord
_elm_smart_scroller_x_mirrored_get(Evas_Object *obj, Evas_Coord x)
{
API_ENTRY return x;
Evas_Coord cw, ch, w;
elm_smart_scroller_child_viewport_size_get(obj, &w, NULL);
sd->pan_func.child_size_get(sd->pan_obj, &cw, &ch);
return (cw - (x + w));
}
void
elm_smart_scroller_mirrored_set(Evas_Object *obj, Eina_Bool mirrored)
{
API_ENTRY return;
Evas_Coord px, py, wx;
if (sd->is_mirrored == mirrored)
return;
sd->is_mirrored = mirrored;
edje_object_mirrored_set(sd->edje_obj, mirrored);
if (sd->is_mirrored)
wx = _elm_smart_scroller_x_mirrored_get(sd->smart_obj, sd->wx);
else
wx = sd->wx;
elm_smart_scroller_child_pos_set(sd->smart_obj, wx, sd->y);
}
void
elm_smart_scroller_child_set(Evas_Object *obj, Evas_Object *child)
{
@ -166,7 +197,9 @@ elm_smart_scroller_child_set(Evas_Object *obj, Evas_Object *child)
}
sd->child_obj = child;
sd->wx = sd->wy = sd->ww = sd->wh = 0;
sd->wx = sd->wy = 0;
/* (-1) means want viewports size */
sd->ww = sd->wh = -1;
if (!child) return;
if (!sd->pan_obj)
@ -1801,6 +1834,10 @@ _smart_event_mouse_up(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *ev
elm_smart_scroller_child_pos_set(sd->smart_obj, x, y);
sd->wx = x;
sd->wy = y;
if(sd->is_mirrored)
sd->wx = _elm_smart_scroller_x_mirrored_get(sd->smart_obj, sd->wx);
elm_smart_scroller_child_viewport_size_get(sd->smart_obj, &sd->ww, &sd->wh);
if (!_smart_do_page(sd))
bounce_eval(sd);
@ -2523,10 +2560,26 @@ static void
_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
{
INTERNAL_ENTRY;
Evas_Coord ww, wh, wx = sd->wx;
sd->w = w;
sd->h = h;
_smart_reconfigure(sd);
elm_smart_scroller_child_region_set(obj, sd->wx, sd->wy, sd->ww, sd->h);
/* Flip to RTL cords only if init in RTL mode */
if(sd->is_mirrored)
wx = _elm_smart_scroller_x_mirrored_get(obj, sd->wx);
if (sd->ww == -1)
{
elm_smart_scroller_child_viewport_size_get(obj, &ww, &wh);
}
else
{
ww = sd->ww;
wh = sd->wh;
}
elm_smart_scroller_child_region_set(obj, wx, sd->wy, ww, wh);
}
static void

View File

@ -25,6 +25,7 @@ Evas_Object *elm_smart_scroller_edje_object_get (Evas_Object *obj);
void elm_smart_scroller_single_dir_set (Evas_Object *obj, Eina_Bool single_dir);
Eina_Bool elm_smart_scroller_single_dir_get (Evas_Object *obj);
void elm_smart_scroller_object_theme_set (Evas_Object *parent, Evas_Object *obj, const char *clas, const char *group, const char *style);
void elm_smart_scroller_mirrored_set (Evas_Object *obj, Eina_Bool mirrored);
void elm_smart_scroller_hold_set (Evas_Object *obj, Eina_Bool hold);
void elm_smart_scroller_freeze_set (Evas_Object *obj, Eina_Bool freeze);
void elm_smart_scroller_bounce_allow_set (Evas_Object *obj, Eina_Bool horiz, Eina_Bool vert);