From: cnook <kimcinoo@gmail.com>

Subject: Re: [E-devel] [Patch][CtxPopup] Add Arrow on the drag-able
area of Base

Dear Mr. Hermet,
Hello, I have attached more accurate patch based on latest elementary. The
last patch already there.
All your review items are reflected on the attached patch.
Please review this again, sorry for any inconvenient.



SVN revision: 59911
This commit is contained in:
cnook 2011-06-03 07:16:39 +00:00 committed by Carsten Haitzler
parent 45eaf731bd
commit fc1fae8eb0
2 changed files with 28 additions and 72 deletions

View File

@ -7980,7 +7980,7 @@ collections {
}
}
}
part { name: "elm.swallow.arrowUp";
part { name: "elm.swallow.arrow_up";
type: SWALLOW;
mouse_events: 0;
scale: 1;
@ -7994,14 +7994,9 @@ collections {
min: 40 40;
fixed: 1 1;
visible: 1;
align: 0.5 1;
rel2 {
relative: 1 0;
to: "arrow_area_up";
}
}
}
part { name: "elm.swallow.arrowDown";
part { name: "elm.swallow.arrow_down";
type: SWALLOW;
mouse_events: 0;
scale: 1;
@ -8015,14 +8010,9 @@ collections {
min: 40 40;
fixed: 1 1;
visible: 1;
align: 0.5 0;
rel1 {
relative: 1 1;
to: "arrow_area_down";
}
}
}
part { name: "elm.swallow.arrowLeft";
part { name: "elm.swallow.arrow_left";
type: SWALLOW;
mouse_events: 0;
scale: 1;
@ -8036,14 +8026,9 @@ collections {
min: 40 40;
fixed: 1 1;
visible: 1;
align: 1 0.5;
rel2 {
relative: 0 1;
to: "arrow_area_left";
}
}
}
part { name: "elm.swallow.arrowRight";
part { name: "elm.swallow.arrow_right";
type: SWALLOW;
mouse_events: 0;
scale: 1;
@ -8057,11 +8042,6 @@ collections {
min: 40 40;
fixed: 1 1;
visible: 1;
align: 0 0.5;
rel1 {
relative: 1 0;
to: "arrow_area_right";
}
}
}
part { name: "base";

View File

@ -484,79 +484,55 @@ _update_arrow(Evas_Object *obj, Elm_Ctxpopup_Direction dir)
{
case ELM_CTXPOPUP_DIRECTION_LEFT:
edje_object_signal_emit(wd->arrow, "elm,state,left", "elm");
// if user does not use dragable part
arrow_size.y = (y - (arrow_size.h * 0.5));
arrow_size.x = x;
edje_object_part_swallow(wd->base, "elm.swallow.arrowLeft", wd->arrow);
edje_object_part_swallow(wd->base, "elm.swallow.arrow_left", wd->arrow);
if (base_size.h > 0)
{
if (y - base_size.y < 0) y = 0;
else if (y > base_size.y + base_size.h) y = base_size.h;
else y = y - base_size.y;
edje_object_part_drag_value_set(wd->base, "elm.swallow.arrowLeft", 0.5,
(double) (y) / (double) (base_size.h));
if (y < (arrow_size.h * 0.5) + base_size.y) y = 0;
else if (y > base_size.y + base_size.h - (arrow_size.h * 0.5)) y = base_size.h - arrow_size.h;
else y = y - base_size.y - (arrow_size.h * 0.5);
edje_object_part_drag_value_set(wd->base, "elm.swallow.arrow_left", 0.5,
(double) (y) / (double) (base_size.h - arrow_size.h));
}
break;
case ELM_CTXPOPUP_DIRECTION_RIGHT:
edje_object_signal_emit(wd->arrow, "elm,state,right", "elm");
// if user does not use dragable part
arrow_size.y = (y - (arrow_size.h * 0.5));
arrow_size.x = (x - arrow_size.w);
edje_object_part_swallow(wd->base, "elm.swallow.arrowRight", wd->arrow);
edje_object_part_swallow(wd->base, "elm.swallow.arrow_right", wd->arrow);
if (base_size.h > 0)
{
if (y -base_size.y < 0) y = 0;
else if (y > base_size.y + base_size.h) y = base_size.h;
else y = y - base_size.y;
edje_object_part_drag_value_set(wd->base, "elm.swallow.arrowRight", 0.5,
(double) (y) / (double) (base_size.h));
if (y < (arrow_size.h * 0.5) + base_size.y) y = 0;
else if (y > base_size.y + base_size.h - (arrow_size.h * 0.5)) y = base_size.h - arrow_size.h;
else y = y - base_size.y - (arrow_size.h * 0.5);
edje_object_part_drag_value_set(wd->base, "elm.swallow.arrow_right", 0.5,
(double) (y) / (double) (base_size.h - arrow_size.h));
}
break;
case ELM_CTXPOPUP_DIRECTION_UP:
edje_object_signal_emit(wd->arrow, "elm,state,top", "elm");
// if user does not use dragable part
arrow_size.x = (x - (arrow_size.w * 0.5));
arrow_size.y = y;
edje_object_part_swallow(wd->base, "elm.swallow.arrowUp", wd->arrow);
edje_object_part_swallow(wd->base, "elm.swallow.arrow_up", wd->arrow);
if (base_size.w > 0)
{
if (x - base_size.x < 0) x = 0;
else if (x > base_size.x + base_size.w) x = base_size.w;
else x = x - base_size.x;
edje_object_part_drag_value_set(wd->base, "elm.swallow.arrowUp",
(double) (x) / (double) (base_size.w), 0.5);
if (x < (arrow_size.w * 0.5) + base_size.x) x = 0;
else if (x > base_size.x + base_size.w - (arrow_size.w * 0.5)) x = base_size.w - arrow_size.w;
else x = x - base_size.x - (arrow_size.w * 0.5);
edje_object_part_drag_value_set(wd->base, "elm.swallow.arrow_up",
(double) (x) / (double) (base_size.w - arrow_size.w), 0.5);
}
break;
case ELM_CTXPOPUP_DIRECTION_DOWN:
edje_object_signal_emit(wd->arrow, "elm,state,bottom", "elm");
// if user does not use dragable part
arrow_size.x = (x - (arrow_size.w * 0.5));
arrow_size.y = (y - arrow_size.h);
edje_object_signal_emit(wd->arrow, "elm,state,bottom", "elm");
edje_object_part_swallow(wd->base, "elm.swallow.arrowDown", wd->arrow);
edje_object_part_swallow(wd->base, "elm.swallow.arrow_down", wd->arrow);
if (base_size.w > 0)
{
if (x - base_size.x < 0) x = 0;
else if (x > base_size.x + base_size.w) x = base_size.w;
else x = x - base_size.x;
edje_object_part_drag_value_set(wd->base, "elm.swallow.arrowDown",
(double) (x) / (double) (base_size.w), 0.5);
if (x < (arrow_size.w * 0.5) + base_size.x) x = 0;
else if (x > base_size.x + base_size.w - (arrow_size.w * 0.5)) x = base_size.w - arrow_size.w;
else x = x - base_size.x - (arrow_size.w * 0.5);
edje_object_part_drag_value_set(wd->base, "elm.swallow.arrow_down",
(double) (x) / (double) (base_size.w - arrow_size.w), 0.5);
}
break;
default:
break;
}
// if user does not use dragable part
evas_object_move(wd->arrow, arrow_size.x, arrow_size.y);
}
static void