Add the option about sending signals in content_pos_set.

When the scroller is resized, the signals("elm,action,scroll", "elm,edge,top" so on) shouldn't be sent,
because it's not a scroll-action. So in this case, the content_pos_set should be called without the signals.
This commit is contained in:
Jaehwan Kim 2013-02-28 15:18:51 +09:00
parent 4392d8a4bf
commit d58d971e6f
10 changed files with 62 additions and 50 deletions

View File

@ -1057,3 +1057,9 @@
* Fix scroller acceleration bug. It was accelerated even it's scrolled * Fix scroller acceleration bug. It was accelerated even it's scrolled
after finishing the previous scroll. This happens with page scroll enabled. after finishing the previous scroll. This happens with page scroll enabled.
2013-02-28 Jaehwan Kim
* Add the option about sending signals in content_pos_set.
When the scroller is resized, the signals("elm,action,scroll", "elm,edge,top" so on) shouldn't be sent,
because it's not a scroll-action. So in this case, the content_pos_set should be called without the signals.

View File

@ -41,6 +41,7 @@ Additions:
* Added new APIs elm_transit_tween_mode_facator_set()/get() * Added new APIs elm_transit_tween_mode_facator_set()/get()
* Support widget orientation mode in order to widgets have multiple styles for each window degree. * Support widget orientation mode in order to widgets have multiple styles for each window degree.
* Add elm_drop_target_add() elm_drop_target_del() and elm_drag_start() * Add elm_drop_target_add() elm_drop_target_del() and elm_drag_start()
* Add the option about sending signals in content_pos_set.
Improvements: Improvements:

View File

@ -1902,7 +1902,7 @@ _elm_gengrid_smart_event(Eo *obj, void *_pd, va_list *list)
else return; else return;
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
eo_do(obj, elm_scrollable_interface_content_pos_set(x, y)); eo_do(obj, elm_scrollable_interface_content_pos_set(x, y, EINA_TRUE));
if (ret) *ret = EINA_TRUE; if (ret) *ret = EINA_TRUE;
} }

View File

@ -537,7 +537,7 @@ _calc_job(void *data)
it_y = sd->anchor_y; it_y = sd->anchor_y;
eo_do(sd->obj, elm_scrollable_interface_content_pos_set eo_do(sd->obj, elm_scrollable_interface_content_pos_set
(sd->pan_x, it->item->block->y (sd->pan_x, it->item->block->y
+ it->y + it_y)); + it->y + it_y, EINA_TRUE));
sd->anchor_item = it; sd->anchor_item = it;
sd->anchor_y = it_y; sd->anchor_y = it_y;
} }
@ -2446,7 +2446,7 @@ _elm_genlist_smart_event(Eo *obj, void *_pd, va_list *list)
if (y < 0) y = 0; if (y < 0) y = 0;
if (y > pan_max_y) y = pan_max_y; if (y > pan_max_y) y = pan_max_y;
eo_do(obj, elm_scrollable_interface_content_pos_set(x, y)); eo_do(obj, elm_scrollable_interface_content_pos_set(x, y, EINA_TRUE));
if (ret) *ret = EINA_TRUE; if (ret) *ret = EINA_TRUE;
} }

View File

@ -1268,7 +1268,7 @@ _elm_scroll_bounce_x_animator(void *data)
} }
x = sid->down.b2x + (int)((double)(dx - odx) * r); x = sid->down.b2x + (int)((double)(dx - odx) * r);
if (!sid->down.cancelled) if (!sid->down.cancelled)
eo_do(sid->obj, elm_scrollable_interface_content_pos_set(x, y)); eo_do(sid->obj, elm_scrollable_interface_content_pos_set(x, y, EINA_TRUE));
if (dt >= 1.0) if (dt >= 1.0)
{ {
if (sid->down.momentum_animator) if (sid->down.momentum_animator)
@ -1325,7 +1325,7 @@ _elm_scroll_bounce_y_animator(void *data)
} }
y = sid->down.b2y + (int)((double)(dy - ody) * r); y = sid->down.b2y + (int)((double)(dy - ody) * r);
if (!sid->down.cancelled) if (!sid->down.cancelled)
eo_do(sid->obj, elm_scrollable_interface_content_pos_set(x, y)); eo_do(sid->obj, elm_scrollable_interface_content_pos_set(x, y, EINA_TRUE));
if (dt >= 1.0) if (dt >= 1.0)
{ {
if (sid->down.momentum_animator) if (sid->down.momentum_animator)
@ -1448,6 +1448,7 @@ _elm_scroll_content_pos_set(Eo *obj, void *_pd, va_list *list)
{ {
Evas_Coord x = va_arg(*list, Evas_Coord); Evas_Coord x = va_arg(*list, Evas_Coord);
Evas_Coord y = va_arg(*list, Evas_Coord); Evas_Coord y = va_arg(*list, Evas_Coord);
Eina_Bool sig = va_arg(*list, int);
Evas_Coord mx = 0, my = 0, px = 0, py = 0, minx = 0, miny = 0; Evas_Coord mx = 0, my = 0, px = 0, py = 0, minx = 0, miny = 0;
double vx, vy; double vx, vy;
@ -1499,7 +1500,7 @@ _elm_scroll_content_pos_set(Eo *obj, void *_pd, va_list *list)
} }
eo_do(sid->pan_obj, elm_obj_pan_pos_set(x, y)); eo_do(sid->pan_obj, elm_obj_pan_pos_set(x, y));
if ((px != x) || (py != y)) if (sig && ((px != x) || (py != y)))
edje_object_signal_emit(sid->edje_obj, "elm,action,scroll", "elm"); edje_object_signal_emit(sid->edje_obj, "elm,action,scroll", "elm");
if (!sid->down.bounce_x_animator) if (!sid->down.bounce_x_animator)
{ {
@ -1529,37 +1530,40 @@ _elm_scroll_content_pos_set(Eo *obj, void *_pd, va_list *list)
if (sid->cb_func.scroll) if (sid->cb_func.scroll)
sid->cb_func.scroll(obj, NULL); sid->cb_func.scroll(obj, NULL);
} }
if (x != px) if (sig)
{ {
if (x == minx) if (x != px)
{ {
if (sid->cb_func.edge_left) if (x == minx)
sid->cb_func.edge_left(obj, NULL); {
edje_object_signal_emit(sid->edje_obj, "elm,edge,left", "elm"); if (sid->cb_func.edge_left)
sid->cb_func.edge_left(obj, NULL);
edje_object_signal_emit(sid->edje_obj, "elm,edge,left", "elm");
}
if (x == (mx + minx))
{
if (sid->cb_func.edge_right)
sid->cb_func.edge_right(obj, NULL);
edje_object_signal_emit(sid->edje_obj, "elm,edge,right", "elm");
}
} }
if (x == (mx + minx)) if (y != py)
{ {
if (sid->cb_func.edge_right) if (y == miny)
sid->cb_func.edge_right(obj, NULL); {
edje_object_signal_emit(sid->edje_obj, "elm,edge,right", "elm"); if (sid->cb_func.edge_top)
sid->cb_func.edge_top(obj, NULL);
edje_object_signal_emit(sid->edje_obj, "elm,edge,top", "elm");
}
if (y == my + miny)
{
if (sid->cb_func.edge_bottom)
sid->cb_func.edge_bottom(obj, NULL);
edje_object_signal_emit(sid->edje_obj, "elm,edge,bottom", "elm");
}
} }
} }
if (y != py)
{
if (y == miny)
{
if (sid->cb_func.edge_top)
sid->cb_func.edge_top(obj, NULL);
edje_object_signal_emit(sid->edje_obj, "elm,edge,top", "elm");
}
if (y == my + miny)
{
if (sid->cb_func.edge_bottom)
sid->cb_func.edge_bottom(obj, NULL);
edje_object_signal_emit(sid->edje_obj, "elm,edge,bottom", "elm");
}
}
_elm_direction_arrows_eval(sid); _elm_direction_arrows_eval(sid);
} }
@ -1586,7 +1590,7 @@ _elm_scroll_mirrored_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
else else
wx = sid->wx; wx = sid->wx;
eo_do(sid->obj, elm_scrollable_interface_content_pos_set(wx, sid->wy)); eo_do(sid->obj, elm_scrollable_interface_content_pos_set(wx, sid->wy, EINA_FALSE));
} }
/* returns TRUE when we need to move the scroller, FALSE otherwise. /* returns TRUE when we need to move the scroller, FALSE otherwise.
@ -1700,7 +1704,7 @@ _elm_scroll_content_region_set(Eo *obj, void *_pd, va_list *list)
if (_elm_scroll_content_region_show_internal(obj, &x, &y, w, h)) if (_elm_scroll_content_region_show_internal(obj, &x, &y, w, h))
{ {
eo_do(obj, elm_scrollable_interface_content_pos_set(x, y)); eo_do(obj, elm_scrollable_interface_content_pos_set(x, y, EINA_FALSE));
sid->down.sx = x; sid->down.sx = x;
sid->down.sy = y; sid->down.sy = y;
sid->down.x = sid->down.history[0].x; sid->down.x = sid->down.history[0].x;
@ -1725,7 +1729,7 @@ _elm_scroll_content_region_show(Eo *obj, void *_pd, va_list *list)
sid->wh = h; sid->wh = h;
if (_elm_scroll_content_region_show_internal(obj, &x, &y, w, h)) if (_elm_scroll_content_region_show_internal(obj, &x, &y, w, h))
{ {
eo_do(obj, elm_scrollable_interface_content_pos_set(x, y)); eo_do(obj, elm_scrollable_interface_content_pos_set(x, y, EINA_TRUE));
sid->down.sx = x; sid->down.sx = x;
sid->down.sy = y; sid->down.sy = y;
sid->down.x = sid->down.history[0].x; sid->down.x = sid->down.history[0].x;
@ -1843,7 +1847,7 @@ _elm_scroll_wheel_event_cb(void *data,
if ((!sid->hold) && (!sid->freeze)) if ((!sid->hold) && (!sid->freeze))
{ {
_elm_scroll_wanted_coordinates_update(sid, x, y); _elm_scroll_wanted_coordinates_update(sid, x, y);
eo_do(sid->obj, elm_scrollable_interface_content_pos_set(x, y)); eo_do(sid->obj, elm_scrollable_interface_content_pos_set(x, y, EINA_TRUE));
} }
} }
@ -1911,7 +1915,7 @@ _elm_scroll_momentum_animator(void *data)
sid->down.by = sid->down.by0 - dy + sid->down.b0y; sid->down.by = sid->down.by0 - dy + sid->down.b0y;
y = py; y = py;
} }
eo_do(sid->obj, elm_scrollable_interface_content_pos_set(x, y)); eo_do(sid->obj, elm_scrollable_interface_content_pos_set(x, y, EINA_TRUE));
_elm_scroll_wanted_coordinates_update(sid, x, y); _elm_scroll_wanted_coordinates_update(sid, x, y);
eo_do(sid->pan_obj, elm_obj_pan_pos_max_get(&maxx, &maxy)); eo_do(sid->pan_obj, elm_obj_pan_pos_max_get(&maxx, &maxy));
eo_do(sid->pan_obj, elm_obj_pan_pos_min_get(&minx, &miny)); eo_do(sid->pan_obj, elm_obj_pan_pos_min_get(&minx, &miny));
@ -2026,7 +2030,7 @@ _elm_scroll_scroll_to_x_animator(void *data)
if (t >= sid->scrollto.x.t_end) if (t >= sid->scrollto.x.t_end)
{ {
px = sid->scrollto.x.end; px = sid->scrollto.x.end;
eo_do(sid->obj, elm_scrollable_interface_content_pos_set(px, py)); eo_do(sid->obj, elm_scrollable_interface_content_pos_set(px, py, EINA_TRUE));
sid->down.sx = px; sid->down.sx = px;
sid->down.x = sid->down.history[0].x; sid->down.x = sid->down.history[0].x;
sid->down.pdx = 0; sid->down.pdx = 0;
@ -2036,7 +2040,7 @@ _elm_scroll_scroll_to_x_animator(void *data)
_elm_scroll_anim_stop(sid); _elm_scroll_anim_stop(sid);
return ECORE_CALLBACK_CANCEL; return ECORE_CALLBACK_CANCEL;
} }
eo_do(sid->obj, elm_scrollable_interface_content_pos_set(px, py)); eo_do(sid->obj, elm_scrollable_interface_content_pos_set(px, py, EINA_TRUE));
_elm_scroll_wanted_coordinates_update(sid, px, py); _elm_scroll_wanted_coordinates_update(sid, px, py);
return ECORE_CALLBACK_RENEW; return ECORE_CALLBACK_RENEW;
} }
@ -2061,7 +2065,7 @@ _elm_scroll_scroll_to_y_animator(void *data)
if (t >= sid->scrollto.y.t_end) if (t >= sid->scrollto.y.t_end)
{ {
py = sid->scrollto.y.end; py = sid->scrollto.y.end;
eo_do(sid->obj, elm_scrollable_interface_content_pos_set(px, py)); eo_do(sid->obj, elm_scrollable_interface_content_pos_set(px, py, EINA_TRUE));
sid->down.sy = py; sid->down.sy = py;
sid->down.y = sid->down.history[0].y; sid->down.y = sid->down.history[0].y;
sid->down.pdy = 0; sid->down.pdy = 0;
@ -2071,7 +2075,7 @@ _elm_scroll_scroll_to_y_animator(void *data)
_elm_scroll_anim_stop(sid); _elm_scroll_anim_stop(sid);
return ECORE_CALLBACK_CANCEL; return ECORE_CALLBACK_CANCEL;
} }
eo_do(sid->obj, elm_scrollable_interface_content_pos_set(px, py)); eo_do(sid->obj, elm_scrollable_interface_content_pos_set(px, py, EINA_TRUE));
_elm_scroll_wanted_coordinates_update(sid, px, py); _elm_scroll_wanted_coordinates_update(sid, px, py);
return ECORE_CALLBACK_RENEW; return ECORE_CALLBACK_RENEW;
@ -2407,7 +2411,7 @@ _elm_scroll_mouse_up_event_cb(void *data,
sid->down.dragged = EINA_FALSE; sid->down.dragged = EINA_FALSE;
sid->down.now = EINA_FALSE; sid->down.now = EINA_FALSE;
eo_do(sid->obj, elm_scrollable_interface_content_pos_get(&x, &y)); eo_do(sid->obj, elm_scrollable_interface_content_pos_get(&x, &y));
eo_do(sid->obj, elm_scrollable_interface_content_pos_set(x, y)); eo_do(sid->obj, elm_scrollable_interface_content_pos_set(x, y, EINA_TRUE));
_elm_scroll_wanted_coordinates_update(sid, x, y); _elm_scroll_wanted_coordinates_update(sid, x, y);
if (sid->content_info.resized) if (sid->content_info.resized)
@ -2779,7 +2783,7 @@ _elm_scroll_hold_animator(void *data)
_elm_scroll_smooth_debug_movetime_add(ox, oy); _elm_scroll_smooth_debug_movetime_add(ox, oy);
#endif #endif
eo_do(sid->obj, elm_scrollable_interface_content_pos_set(ox, oy)); eo_do(sid->obj, elm_scrollable_interface_content_pos_set(ox, oy, EINA_TRUE));
return ECORE_CALLBACK_RENEW; return ECORE_CALLBACK_RENEW;
} }
@ -2827,7 +2831,7 @@ _elm_scroll_on_hold_animator(void *data)
} }
} }
eo_do(sid->obj, elm_scrollable_interface_content_pos_set(x, y)); eo_do(sid->obj, elm_scrollable_interface_content_pos_set(x, y, EINA_TRUE));
} }
sid->down.onhold_tlast = t; sid->down.onhold_tlast = t;
@ -4015,7 +4019,7 @@ _elm_scroll_page_show(Eo *obj, void *_pd, va_list *list)
if (_elm_scroll_content_region_show_internal(obj, &x, &y, w, h)) if (_elm_scroll_content_region_show_internal(obj, &x, &y, w, h))
eo_do(obj, elm_scrollable_interface_content_pos_set(x, y)); eo_do(obj, elm_scrollable_interface_content_pos_set(x, y, EINA_TRUE));
} }
static void static void

View File

@ -427,9 +427,10 @@ enum
* *
* @param[in] x * @param[in] x
* @param[in] y * @param[in] y
* @param[in] sig
* *
*/ */
#define elm_scrollable_interface_content_pos_set(x, y) ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_CONTENT_POS_SET), EO_TYPECHECK(Evas_Coord, x), EO_TYPECHECK(Evas_Coord, y) #define elm_scrollable_interface_content_pos_set(x, y, sig) ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_CONTENT_POS_SET), EO_TYPECHECK(Evas_Coord, x), EO_TYPECHECK(Evas_Coord, y), EO_TYPECHECK(Eina_Bool, sig)
/** /**
* @def elm_scrollable_interface_content_pos_get * @def elm_scrollable_interface_content_pos_get

View File

@ -354,7 +354,7 @@ _elm_list_smart_event(Eo *obj, void *_pd, va_list *list)
else return; else return;
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
eo_do(obj, elm_scrollable_interface_content_pos_set(x, y)); eo_do(obj, elm_scrollable_interface_content_pos_set(x, y, EINA_TRUE));
if (ret) *ret = EINA_TRUE; if (ret) *ret = EINA_TRUE;
} }

View File

@ -3924,7 +3924,7 @@ _elm_map_smart_event(Eo *obj, void *_pd, va_list *list)
else return; else return;
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
eo_do(obj, elm_scrollable_interface_content_pos_set(x, y)); eo_do(obj, elm_scrollable_interface_content_pos_set(x, y, EINA_TRUE));
if (ret) *ret = EINA_TRUE; if (ret) *ret = EINA_TRUE;
} }

View File

@ -1019,7 +1019,7 @@ _elm_photocam_smart_event(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
else return; else return;
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
eo_do(obj, elm_scrollable_interface_content_pos_set(x, y)); eo_do(obj, elm_scrollable_interface_content_pos_set(x, y, EINA_TRUE));
if (ret) *ret = EINA_TRUE; if (ret) *ret = EINA_TRUE;
} }

View File

@ -249,7 +249,7 @@ _elm_scroller_smart_event(Eo *obj, void *_pd, va_list *list)
else return; else return;
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
eo_do(obj, elm_scrollable_interface_content_pos_set(x, y)); eo_do(obj, elm_scrollable_interface_content_pos_set(x, y, EINA_TRUE));
if (ret) *ret = EINA_TRUE; if (ret) *ret = EINA_TRUE;
} }
@ -305,7 +305,7 @@ _elm_scroller_smart_activate(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
x += page_x; x += page_x;
} }
eo_do(obj, elm_scrollable_interface_content_pos_set(x, y)); eo_do(obj, elm_scrollable_interface_content_pos_set(x, y, EINA_TRUE));
if (ret) *ret = EINA_TRUE; if (ret) *ret = EINA_TRUE;
} }