forked from enlightenment/efl
fix some most unfortunate lack of clip honorning :)
SVN revision: 51773
This commit is contained in:
parent
6c5726c16f
commit
42ec2033bb
|
@ -59,22 +59,140 @@ close_cb(void *data, Evas_Object *obj, void *event_info)
|
|||
evas_object_del(data);
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
tim_cb(void *data)
|
||||
{
|
||||
Evas_Object *tb, *sc, *mb;
|
||||
Eina_List *list, *l;
|
||||
|
||||
printf("timeout!\n");
|
||||
evas_object_data_del(data, "timer");
|
||||
tb = evas_object_data_get(data, "tb");
|
||||
sc = evas_object_data_get(data, "sc");
|
||||
mb = evas_object_data_get(data, "mb");
|
||||
elm_object_scroll_freeze_push(sc);
|
||||
evas_object_data_set(data, "dragging", (void *)(1));
|
||||
evas_object_color_set(data, 255, 255, 255, 255);
|
||||
list = (Eina_List *)evas_object_data_get
|
||||
(elm_object_top_widget_get(data), "mbs");
|
||||
EINA_LIST_FOREACH(list, l, mb)
|
||||
evas_object_color_set(mb, 128, 128, 128, 128);
|
||||
elm_table_unpack(tb, data);
|
||||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
ic_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
||||
{
|
||||
Ecore_Timer *tim;
|
||||
|
||||
tim = evas_object_data_get(obj, "timer");
|
||||
if (tim)
|
||||
{
|
||||
printf("nmotim\n");
|
||||
evas_object_data_del(obj, "timer");
|
||||
ecore_timer_del(tim);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
ic_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
||||
{
|
||||
Evas_Event_Mouse_Down *ev = event_info;
|
||||
Ecore_Timer *tim;
|
||||
Evas_Coord x, y, w, h;
|
||||
|
||||
evas_object_color_set(data, 128, 0, 0, 128);
|
||||
|
||||
tim = evas_object_data_get(obj, "timer");
|
||||
if (tim) evas_object_data_del(obj, "timer");
|
||||
tim = ecore_timer_add(1.0, tim_cb, obj);
|
||||
evas_object_data_set(obj, "timer", tim);
|
||||
|
||||
evas_object_geometry_get(data, &x, &y, &w, &h);
|
||||
evas_object_data_set(obj, "x", (void *)(ev->canvas.x));
|
||||
evas_object_data_set(obj, "y", (void *)(ev->canvas.y));
|
||||
evas_object_data_set(obj, "px", (void *)(x));
|
||||
evas_object_data_set(obj, "py", (void *)(y));
|
||||
|
||||
if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK)
|
||||
{
|
||||
printf("double click %p\n", obj);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
ic_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
||||
{
|
||||
Evas_Event_Mouse_Up *ev = event_info;
|
||||
Ecore_Timer *tim;
|
||||
|
||||
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
|
||||
evas_object_color_set(data, 255, 255, 255, 255);
|
||||
tim = evas_object_data_get(obj, "timer");
|
||||
if (tim)
|
||||
{
|
||||
printf("nmotim2\n");
|
||||
evas_object_data_del(obj, "timer");
|
||||
ecore_timer_del(tim);
|
||||
}
|
||||
if (evas_object_data_get(obj, "dragging"))
|
||||
{
|
||||
Evas_Object *tb, *sc, *mb;
|
||||
Eina_List *list, *l;
|
||||
int tbx, tby;
|
||||
|
||||
evas_object_data_del(obj, "dragging");
|
||||
tb = evas_object_data_get(obj, "tb");
|
||||
sc = evas_object_data_get(obj, "sc");
|
||||
mb = evas_object_data_get(data, "mb");
|
||||
elm_object_scroll_freeze_pop(sc);
|
||||
tbx = (int)evas_object_data_get(obj, "tbx");
|
||||
tby = (int)evas_object_data_get(obj, "tby");
|
||||
elm_table_pack(tb, obj, tbx, tby, 1, 1);
|
||||
list = (Eina_List *)evas_object_data_get
|
||||
(elm_object_top_widget_get(obj), "mbs");
|
||||
EINA_LIST_FOREACH(list, l, mb)
|
||||
evas_object_color_set(mb, 255, 255, 255, 255);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
ic_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
||||
{
|
||||
Evas_Event_Mouse_Move *ev = event_info;
|
||||
if (evas_object_data_get(obj, "dragging"))
|
||||
{
|
||||
Evas_Coord x, y, px, py;
|
||||
|
||||
x = (Evas_Coord)evas_object_data_get(obj, "x");
|
||||
y = (Evas_Coord)evas_object_data_get(obj, "y");
|
||||
px = (Evas_Coord)evas_object_data_get(obj, "px");
|
||||
py = (Evas_Coord)evas_object_data_get(obj, "py");
|
||||
evas_object_move(obj,
|
||||
px + ev->cur.canvas.x - x,
|
||||
py + ev->cur.canvas.y - y);
|
||||
}
|
||||
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
|
||||
{
|
||||
Ecore_Timer *tim;
|
||||
|
||||
tim = evas_object_data_get(obj, "timer");
|
||||
if (tim)
|
||||
{
|
||||
printf("nmotim3\n");
|
||||
evas_object_data_del(obj, "timer");
|
||||
ecore_timer_del(tim);
|
||||
}
|
||||
evas_object_color_set(data, 255, 255, 255, 255);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
test_launcher(void *data, Evas_Object *obj, void *event_info)
|
||||
{
|
||||
Evas_Object *win, *bg, *sc, *tb, *pad, *bt, *ic, *lb, *tb2, *mb, *ck, *bx, *rc;
|
||||
Evas_Object *win, *bg, *sc, *tb, *pad, *bt, *ic, *lb, *tb2, *mb, *ck, *bx, *bx2;
|
||||
int i, j, k, n, m;
|
||||
char buf[PATH_MAX];
|
||||
const char *names[] =
|
||||
|
@ -96,11 +214,17 @@ test_launcher(void *data, Evas_Object *obj, void *event_info)
|
|||
evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
elm_win_resize_object_add(win, bg);
|
||||
evas_object_show(bg);
|
||||
|
||||
|
||||
bx = elm_box_add(win);
|
||||
elm_box_homogenous_set(bx, 1);
|
||||
elm_box_horizontal_set(bx, 1);
|
||||
|
||||
sc = elm_scroller_add(win);
|
||||
elm_scroller_bounce_set(sc, 1, 0);
|
||||
elm_scroller_policy_set(sc, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
|
||||
evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
evas_object_size_hint_fill_set(sc, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
||||
|
||||
n = 0; m = 0;
|
||||
for (k = 0 ; k < 8; k++)
|
||||
{
|
||||
|
@ -132,6 +256,10 @@ test_launcher(void *data, Evas_Object *obj, void *event_info)
|
|||
evas_object_size_hint_align_set(pad, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
||||
elm_table_pack(tb, pad, 6, 1, 1, 10);
|
||||
|
||||
mb = elm_mapbuf_add(win);
|
||||
elm_mapbuf_content_set(mb, tb);
|
||||
evas_object_show(tb);
|
||||
|
||||
for (j = 0; j < 5; j++)
|
||||
{
|
||||
for (i = 0; i < 5; i++)
|
||||
|
@ -154,26 +282,24 @@ test_launcher(void *data, Evas_Object *obj, void *event_info)
|
|||
elm_table_pack(tb, lb, 1 + i, 1 + (j * 2) + 1, 1, 1);
|
||||
evas_object_show(lb);
|
||||
|
||||
rc = evas_object_rectangle_add(evas_object_evas_get(win));
|
||||
evas_object_color_set(rc, 0, 0, 0, 0);
|
||||
evas_object_size_hint_weight_set(rc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
evas_object_size_hint_align_set(rc, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
||||
elm_table_pack(tb, rc, 1 + i, 1 + (j * 2), 1, 2);
|
||||
evas_object_show(rc);
|
||||
evas_object_event_callback_add(ic, EVAS_CALLBACK_DEL, ic_del_cb, ic);
|
||||
|
||||
evas_object_event_callback_add(rc, EVAS_CALLBACK_MOUSE_DOWN, ic_down_cb, lb);
|
||||
evas_object_event_callback_add(rc, EVAS_CALLBACK_MOUSE_UP, ic_up_cb, lb);
|
||||
evas_object_event_callback_add(ic, EVAS_CALLBACK_MOUSE_DOWN, ic_down_cb, ic);
|
||||
evas_object_event_callback_add(ic, EVAS_CALLBACK_MOUSE_UP, ic_up_cb, ic);
|
||||
evas_object_event_callback_add(ic, EVAS_CALLBACK_MOUSE_MOVE, ic_move_cb, ic);
|
||||
|
||||
evas_object_event_callback_add(rc, EVAS_CALLBACK_MOUSE_DOWN, ic_down_cb, ic);
|
||||
evas_object_event_callback_add(rc, EVAS_CALLBACK_MOUSE_UP, ic_up_cb, ic);
|
||||
evas_object_data_set(ic, "lb", lb);
|
||||
evas_object_data_set(ic, "tb", tb);
|
||||
evas_object_data_set(ic, "sc", sc);
|
||||
evas_object_data_set(ic, "bx", bx);
|
||||
evas_object_data_set(ic, "mb", mb);
|
||||
evas_object_data_set(ic, "tbx", (void *)(1 + i));
|
||||
evas_object_data_set(ic, "tby", (void *)(1 + (j * 2)));
|
||||
|
||||
n++; if (n > 23) n = 0;
|
||||
m++; if (m > 15) m = 0;
|
||||
}
|
||||
}
|
||||
mb = elm_mapbuf_add(win);
|
||||
elm_mapbuf_content_set(mb, tb);
|
||||
evas_object_show(tb);
|
||||
|
||||
elm_box_pack_end(bx, mb);
|
||||
evas_object_show(mb);
|
||||
|
@ -184,11 +310,11 @@ test_launcher(void *data, Evas_Object *obj, void *event_info)
|
|||
// fixme: free mbs
|
||||
evas_object_data_set(win, "mbs", mbs);
|
||||
|
||||
sc = elm_scroller_add(win);
|
||||
elm_scroller_bounce_set(sc, 1, 0);
|
||||
elm_scroller_policy_set(sc, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
|
||||
evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
elm_win_resize_object_add(win, sc);
|
||||
bx2 = elm_box_add(win);
|
||||
evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
elm_box_horizontal_set(bx2, 0);
|
||||
elm_win_resize_object_add(win, bx2);
|
||||
evas_object_show(bx2);
|
||||
|
||||
elm_scroller_content_set(sc, bx);
|
||||
evas_object_show(bx);
|
||||
|
@ -197,8 +323,11 @@ test_launcher(void *data, Evas_Object *obj, void *event_info)
|
|||
evas_object_show(sc);
|
||||
|
||||
tb2 = elm_table_add(win);
|
||||
evas_object_size_hint_weight_set(tb2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
elm_win_resize_object_add(win, tb2);
|
||||
evas_object_size_hint_weight_set(tb2, EVAS_HINT_EXPAND, 0.0);
|
||||
evas_object_size_hint_fill_set(tb2, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
||||
elm_box_pack_end(bx2, tb2);
|
||||
|
||||
elm_box_pack_end(bx2, sc);
|
||||
|
||||
ck = elm_check_add(win);
|
||||
elm_check_label_set(ck, "Map");
|
||||
|
|
|
@ -335,6 +335,7 @@ elm_flip_add(Evas_Object *parent)
|
|||
evas_object_resize(wd->front.clip, 99999, 99999);
|
||||
elm_widget_sub_object_add(wd->front.clip, obj);
|
||||
evas_object_smart_member_add(wd->front.clip, obj);
|
||||
evas_object_clip_set(wd->front.clip, evas_object_clip_get(obj));
|
||||
|
||||
wd->back.clip = evas_object_rectangle_add(e);
|
||||
evas_object_color_set(wd->back.clip, 255, 255, 255, 255);
|
||||
|
@ -342,6 +343,7 @@ elm_flip_add(Evas_Object *parent)
|
|||
evas_object_resize(wd->back.clip, 99999, 99999);
|
||||
elm_widget_sub_object_add(wd->back.clip, obj);
|
||||
evas_object_smart_member_add(wd->back.clip, obj);
|
||||
evas_object_clip_set(wd->back.clip, evas_object_clip_get(obj));
|
||||
|
||||
evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, obj);
|
||||
evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE, _move, NULL);
|
||||
|
|
|
@ -197,7 +197,9 @@ elm_mapbuf_content_set(Evas_Object *obj, Evas_Object *content)
|
|||
{
|
||||
elm_widget_sub_object_add(content, obj);
|
||||
evas_object_smart_member_add(content, obj);
|
||||
evas_object_event_callback_add(content, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
|
||||
evas_object_clip_set(content, evas_object_clip_get(obj));
|
||||
evas_object_event_callback_add(content,
|
||||
EVAS_CALLBACK_CHANGED_SIZE_HINTS,
|
||||
_changed_size_hints, obj);
|
||||
}
|
||||
_sizing_eval(obj);
|
||||
|
@ -225,6 +227,7 @@ elm_mapbuf_content_unset(Evas_Object *obj)
|
|||
content = wd->content;
|
||||
elm_widget_sub_object_del(obj, wd->content);
|
||||
evas_object_smart_member_del(wd->content);
|
||||
evas_object_clip_unset(wd->content);
|
||||
wd->content = NULL;
|
||||
return content;
|
||||
}
|
||||
|
|
|
@ -1250,37 +1250,67 @@ _smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
|
|||
static void
|
||||
_smart_show(Evas_Object *obj)
|
||||
{
|
||||
Eina_List *list, *l;
|
||||
Evas_Object *o;
|
||||
INTERNAL_ENTRY;
|
||||
evas_object_show(sd->resize_obj);
|
||||
list = evas_object_smart_members_get(obj);
|
||||
EINA_LIST_FOREACH(list, l, o)
|
||||
{
|
||||
evas_object_show(o);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_smart_hide(Evas_Object *obj)
|
||||
{
|
||||
Eina_List *list, *l;
|
||||
Evas_Object *o;
|
||||
INTERNAL_ENTRY;
|
||||
evas_object_hide(sd->resize_obj);
|
||||
list = evas_object_smart_members_get(obj);
|
||||
EINA_LIST_FOREACH(list, l, o)
|
||||
{
|
||||
evas_object_hide(o);
|
||||
}
|
||||
_if_focused_revert(obj);
|
||||
}
|
||||
|
||||
static void
|
||||
_smart_color_set(Evas_Object *obj, int r, int g, int b, int a)
|
||||
{
|
||||
Eina_List *list, *l;
|
||||
Evas_Object *o;
|
||||
INTERNAL_ENTRY;
|
||||
evas_object_color_set(sd->resize_obj, r, g, b, a);
|
||||
list = evas_object_smart_members_get(obj);
|
||||
EINA_LIST_FOREACH(list, l, o)
|
||||
{
|
||||
evas_object_color_set(o, r, g, b, a);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_smart_clip_set(Evas_Object *obj, Evas_Object *clip)
|
||||
{
|
||||
Eina_List *list, *l;
|
||||
Evas_Object *o;
|
||||
INTERNAL_ENTRY;
|
||||
evas_object_clip_set(sd->resize_obj, clip);
|
||||
list = evas_object_smart_members_get(obj);
|
||||
EINA_LIST_FOREACH(list, l, o)
|
||||
{
|
||||
evas_object_clip_set(o, clip);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_smart_clip_unset(Evas_Object *obj)
|
||||
{
|
||||
Eina_List *list, *l;
|
||||
Evas_Object *o;
|
||||
INTERNAL_ENTRY;
|
||||
evas_object_clip_unset(sd->resize_obj);
|
||||
list = evas_object_smart_members_get(obj);
|
||||
EINA_LIST_FOREACH(list, l, o)
|
||||
{
|
||||
evas_object_clip_unset(o);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
Loading…
Reference in New Issue