static void e_gadcon_layout_pack_options_set(Evas_Object *obj, int pos, int size, int res);
static void e_gadcon_layout_pack_min_size_set(Evas_Object *obj, int w, int h);
static void e_gadcon_layout_pack_aspect_set(Evas_Object *obj, int w, int h);
+static void e_gadcon_layout_pack_aspect_pad_set(Evas_Object *obj, int w, int h);
static void e_gadcon_layout_unpack(Evas_Object *obj);
static Evas_Hash *providers = NULL;
style);
if (gcc->o_frame)
{
+ edje_object_size_min_calc(gcc->o_frame,
+ &(gcc->pad.w), &(gcc->pad.h));
edje_object_part_swallow(gcc->o_frame, "items", gcc->o_base);
evas_object_show(gcc->o_frame);
}
evas_object_event_callback_add(gcc->o_event, EVAS_CALLBACK_MOUSE_IN, _e_gadcon_cb_mouse_in, gcc);
evas_object_event_callback_add(gcc->o_event, EVAS_CALLBACK_MOUSE_OUT, _e_gadcon_cb_mouse_out, gcc);
- evas_object_event_callback_add(gcc->o_base, EVAS_CALLBACK_MOVE, _e_gadcon_cb_move, gcc);
- evas_object_event_callback_add(gcc->o_base, EVAS_CALLBACK_RESIZE, _e_gadcon_cb_resize, gcc);
+ if (gcc->o_frame)
+ {
+ evas_object_event_callback_add(gcc->o_frame, EVAS_CALLBACK_MOVE, _e_gadcon_cb_move, gcc);
+ evas_object_event_callback_add(gcc->o_frame, EVAS_CALLBACK_RESIZE, _e_gadcon_cb_resize, gcc);
+ }
+ else
+ {
+ evas_object_event_callback_add(gcc->o_base, EVAS_CALLBACK_MOVE, _e_gadcon_cb_move, gcc);
+ evas_object_event_callback_add(gcc->o_base, EVAS_CALLBACK_RESIZE, _e_gadcon_cb_resize, gcc);
+ }
evas_object_show(gcc->o_event);
evas_object_show(gcc->o_control);
E_OBJECT_CHECK(gcc);
E_OBJECT_TYPE_CHECK(gcc, E_GADCON_CLIENT_TYPE);
- evas_object_event_callback_del(gcc->o_base, EVAS_CALLBACK_MOVE, _e_gadcon_cb_move);
- evas_object_event_callback_del(gcc->o_base, EVAS_CALLBACK_RESIZE, _e_gadcon_cb_resize);
+ if (gcc->o_frame)
+ {
+ evas_object_event_callback_del(gcc->o_frame, EVAS_CALLBACK_MOVE, _e_gadcon_cb_move);
+ evas_object_event_callback_del(gcc->o_frame, EVAS_CALLBACK_RESIZE, _e_gadcon_cb_resize);
+ }
+ else
+ {
+ evas_object_event_callback_del(gcc->o_base, EVAS_CALLBACK_MOVE, _e_gadcon_cb_move);
+ evas_object_event_callback_del(gcc->o_base, EVAS_CALLBACK_RESIZE, _e_gadcon_cb_resize);
+ }
if (gcc->moving)
{
case E_GADCON_ORIENT_TOP:
case E_GADCON_ORIENT_BOTTOM:
if (gcc->o_frame)
- e_gadcon_layout_pack_size_set(gcc->o_frame, w);
+ e_gadcon_layout_pack_size_set(gcc->o_frame, w + gcc->pad.w);
else
e_gadcon_layout_pack_size_set(gcc->o_base, w);
break;
case E_GADCON_ORIENT_LEFT:
case E_GADCON_ORIENT_RIGHT:
if (gcc->o_frame)
- e_gadcon_layout_pack_size_set(gcc->o_frame, h);
+ e_gadcon_layout_pack_size_set(gcc->o_frame, h + gcc->pad.h);
else
e_gadcon_layout_pack_size_set(gcc->o_base, h);
break;
case E_GADCON_ORIENT_CORNER_TR:
case E_GADCON_ORIENT_CORNER_BL:
case E_GADCON_ORIENT_CORNER_BR:
+ case E_GADCON_ORIENT_CORNER_LT:
+ case E_GADCON_ORIENT_CORNER_RT:
+ case E_GADCON_ORIENT_CORNER_LB:
+ case E_GADCON_ORIENT_CORNER_RB:
default:
break;
}
E_OBJECT_CHECK(gcc);
E_OBJECT_TYPE_CHECK(gcc, E_GADCON_CLIENT_TYPE);
if (gcc->o_frame)
- e_gadcon_layout_pack_min_size_set(gcc->o_frame, w, h);
+ e_gadcon_layout_pack_min_size_set(gcc->o_frame, w + gcc->pad.w, h + gcc->pad.h);
else
e_gadcon_layout_pack_min_size_set(gcc->o_base, w, h);
}
E_OBJECT_CHECK(gcc);
E_OBJECT_TYPE_CHECK(gcc, E_GADCON_CLIENT_TYPE);
if (gcc->o_frame)
- e_gadcon_layout_pack_aspect_set(gcc->o_frame, w, h);
+ {
+ e_gadcon_layout_pack_aspect_pad_set(gcc->o_frame, gcc->pad.w, gcc->pad.h);
+ e_gadcon_layout_pack_aspect_set(gcc->o_frame, w, h);
+ }
else
e_gadcon_layout_pack_aspect_set(gcc->o_base, w, h);
}
ev = event_info;
if (ev->button == 3)
{
+ printf("THREE!\n");
}
}
evas_pointer_canvas_xy_get(gcc->gadcon->evas, &x, &y);
x = x - gcc->dx;
y = y - gcc->dy;
- evas_object_geometry_get(gcc->o_base, NULL, NULL, &w, &h);
+ if (gcc->o_frame)
+ evas_object_geometry_get(gcc->o_frame, NULL, NULL, &w, &h);
+ else
+ evas_object_geometry_get(gcc->o_base, NULL, NULL, &w, &h);
if (e_gadcon_layout_orientation_get(gcc->gadcon->o_container))
{
if (gcc->o_frame)
int hookp;
struct {
int w, h;
- } min, aspect;
+ } min, aspect, aspect_pad;
Evas_Coord x, y, w, h;
Evas_Object *obj;
unsigned char can_move : 1;
}
static void
+e_gadcon_layout_pack_aspect_pad_set(Evas_Object *obj, int w, int h)
+{
+ E_Gadcon_Layout_Item *bi;
+
+ bi = evas_object_data_get(obj, "e_gadcon_layout_data");
+ if (!bi) return;
+ bi->aspect_pad.w = w;
+ bi->aspect_pad.h = h;
+}
+
+static void
e_gadcon_layout_unpack(Evas_Object *obj)
{
E_Gadcon_Layout_Item *bi;
{
if (sd->horizontal)
{
- bi->ask.size2 = (h * bi->aspect.w) / bi->aspect.h;
+ bi->ask.size2 = (((h - bi->aspect_pad.h) * bi->aspect.w) /
+ bi->aspect.h) + bi->aspect_pad.w;
if (bi->ask.size2 > bi->min.w)
min += (bi->ask.size2 - bi->min.w);
}
else
{
- bi->ask.size2 = (w * bi->aspect.h) / bi->aspect.w;
+ bi->ask.size2 = (((w - bi->aspect_pad.w) * bi->aspect.h) /
+ bi->aspect.w) + bi->aspect_pad.h;
if (bi->ask.size2 > bi->min.h)
min += (bi->ask.size2 - bi->min.h);
}
#include "e.h"
static void _e_shelf_free(E_Shelf *es);
+static const char *_e_shelf_orient_string_get(E_Shelf *es);
static void _e_shelf_position_calc(E_Shelf *es);
static void _e_shelf_gadcon_size_request(void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord h);
static Evas_Object *_e_shelf_gadcon_frame_request(void *data, E_Gadcon_Client *gcc, const char *style);
static Evas_List *shelves = NULL;
static int shelf_id = 0;
-/* FIXME: shelves need to do this:
- * 1. allow them to be moved, resized etc. etc.
- * 2. have a configuration panel per shelf to select if its inline, layer etc.
- * 3. catch all right clicks not on modules for right click context menu
- * 4. a global config dialog that lists shelves u have to configure them
- */
-
/* externally accessible functions */
EAPI int
e_shelf_init(void)
es);
e_gadcon_orient(es->gadcon, E_GADCON_ORIENT_TOP);
edje_object_signal_emit(es->o_base, "set_orientation", "top");
+ edje_object_message_signal_process(es->o_base);
e_gadcon_zone_set(es->gadcon, zone);
e_gadcon_ecore_evas_set(es->gadcon, es->ee);
E_OBJECT_CHECK(es);
E_OBJECT_TYPE_CHECK(es, E_GADMAN_SHELF_TYPE);
e_gadcon_orient(es->gadcon, orient);
+ edje_object_signal_emit(es->o_base, "set_orientation",
+ _e_shelf_orient_string_get(es));
+ edje_object_message_signal_process(es->o_base);
+}
+
+/* local subsystem functions */
+static void
+_e_shelf_free(E_Shelf *es)
+{
+ shelves = evas_list_remove(shelves, es);
+ e_object_del(E_OBJECT(es->gadcon));
+ evas_stringshare_del(es->name);
+ evas_stringshare_del(es->style);
+ evas_object_del(es->o_base);
+ if (es->popup) e_object_del(E_OBJECT(es->popup));
+ free(es);
+}
+
+static const char *
+_e_shelf_orient_string_get(E_Shelf *es)
+{
+ const char *sig = "";
+
switch (es->gadcon->orient)
{
case E_GADCON_ORIENT_FLOAT:
- edje_object_signal_emit(es->o_base, "set_orientation", "float");
+ sig = "float";
break;
case E_GADCON_ORIENT_HORIZ:
- edje_object_signal_emit(es->o_base, "set_orientation", "horizontal");
+ sig = "horizontal";
break;
case E_GADCON_ORIENT_VERT:
- edje_object_signal_emit(es->o_base, "set_orientation", "vertical");
+ sig = "vertical";
break;
case E_GADCON_ORIENT_LEFT:
- edje_object_signal_emit(es->o_base, "set_orientation", "left");
+ sig = "left";
break;
case E_GADCON_ORIENT_RIGHT:
- edje_object_signal_emit(es->o_base, "set_orientation", "right");
+ sig = "right";
break;
case E_GADCON_ORIENT_TOP:
- edje_object_signal_emit(es->o_base, "set_orientation", "top");
+ sig = "top";
break;
case E_GADCON_ORIENT_BOTTOM:
- edje_object_signal_emit(es->o_base, "set_orientation", "bottom");
+ sig = "bottom";
break;
case E_GADCON_ORIENT_CORNER_TL:
- edje_object_signal_emit(es->o_base, "set_orientation", "top_left");
+ sig = "top_left";
break;
case E_GADCON_ORIENT_CORNER_TR:
- edje_object_signal_emit(es->o_base, "set_orientation", "top_right");
+ sig = "top_right";
break;
case E_GADCON_ORIENT_CORNER_BL:
- edje_object_signal_emit(es->o_base, "set_orientation", "bottom_left");
+ sig = "bottom_left";
break;
case E_GADCON_ORIENT_CORNER_BR:
- edje_object_signal_emit(es->o_base, "set_orientation", "bottom_right");
+ sig = "bottom_right";
+ break;
+ case E_GADCON_ORIENT_CORNER_LT:
+ sig = "left_top";
+ break;
+ case E_GADCON_ORIENT_CORNER_RT:
+ sig = "right_top";
+ break;
+ case E_GADCON_ORIENT_CORNER_LB:
+ sig = "left_bottom";
+ break;
+ case E_GADCON_ORIENT_CORNER_RB:
+ sig = "right_bottom";
break;
default:
break;
}
-}
-
-/* local subsystem functions */
-static void
-_e_shelf_free(E_Shelf *es)
-{
- shelves = evas_list_remove(shelves, es);
- e_object_del(E_OBJECT(es->gadcon));
- evas_stringshare_del(es->name);
- evas_stringshare_del(es->style);
- evas_object_del(es->o_base);
- if (es->popup) e_object_del(E_OBJECT(es->popup));
- free(es);
+ return sig;
}
static void
switch (orient)
{
case E_GADCON_ORIENT_FLOAT:
+ if (!es->fit_along) es->w = es->zone->w;
+ if (!es->fit_size) es->h = size;
break;
case E_GADCON_ORIENT_HORIZ:
+ if (!es->fit_along) es->w = es->zone->w;
+ if (!es->fit_size) es->h = size;
+ es->x = (es->zone->w - es->w) / 2;
break;
case E_GADCON_ORIENT_VERT:
+ if (!es->fit_along) es->h = es->zone->h;
+ if (!es->fit_size) es->w = size;
+ es->y = (es->zone->h - es->h) / 2;
break;
case E_GADCON_ORIENT_LEFT:
+ if (!es->fit_along) es->h = es->zone->h;
+ if (!es->fit_size) es->w = size;
+ es->x = 0;
+ es->y = (es->zone->h - es->h) / 2;
break;
case E_GADCON_ORIENT_RIGHT:
+ if (!es->fit_along) es->h = es->zone->h;
+ if (!es->fit_size) es->w = size;
+ es->x = es->zone->w - es->w;
+ es->y = (es->zone->h - es->h) / 2;
break;
case E_GADCON_ORIENT_TOP:
if (!es->fit_along) es->w = es->zone->w;
es->y = es->zone->h - es->h;
break;
case E_GADCON_ORIENT_CORNER_TL:
+ if (!es->fit_along) es->w = es->zone->w;
+ if (!es->fit_size) es->h = size;
+ es->x = 0;
+ es->y = 0;
break;
case E_GADCON_ORIENT_CORNER_TR:
+ if (!es->fit_along) es->w = es->zone->w;
+ if (!es->fit_size) es->h = size;
+ es->x = es->zone->w - es->w;
+ es->y = 0;
break;
case E_GADCON_ORIENT_CORNER_BL:
+ if (!es->fit_along) es->w = es->zone->w;
+ if (!es->fit_size) es->h = size;
+ es->x = 0;
+ es->y = es->zone->h - es->h;
break;
case E_GADCON_ORIENT_CORNER_BR:
+ if (!es->fit_along) es->w = es->zone->w;
+ if (!es->fit_size) es->h = size;
+ es->x = es->zone->w - es->w;
+ es->y = es->zone->h - es->h;
+ break;
+ case E_GADCON_ORIENT_CORNER_LT:
+ if (!es->fit_along) es->h = es->zone->h;
+ if (!es->fit_size) es->w = size;
+ es->x = 0;
+ es->y = 0;
+ break;
+ case E_GADCON_ORIENT_CORNER_RT:
+ if (!es->fit_along) es->h = es->zone->h;
+ if (!es->fit_size) es->w = size;
+ es->x = es->zone->w - es->w;
+ es->y = 0;
+ break;
+ case E_GADCON_ORIENT_CORNER_LB:
+ if (!es->fit_along) es->h = es->zone->h;
+ if (!es->fit_size) es->w = size;
+ es->x = 0;
+ es->y = es->zone->h - es->h;
+ break;
+ case E_GADCON_ORIENT_CORNER_RB:
+ if (!es->fit_along) es->h = es->zone->h;
+ if (!es->fit_size) es->w = size;
+ es->x = es->zone->w - es->w;
+ es->y = es->zone->h - es->h;
break;
default:
break;
switch (gc->orient)
{
case E_GADCON_ORIENT_FLOAT:
- break;
case E_GADCON_ORIENT_HORIZ:
- break;
- case E_GADCON_ORIENT_VERT:
- break;
- case E_GADCON_ORIENT_LEFT:
- break;
- case E_GADCON_ORIENT_RIGHT:
- break;
case E_GADCON_ORIENT_TOP:
- if (!es->fit_along) w = ww;
- if (!es->fit_size) h = hh;
- break;
case E_GADCON_ORIENT_BOTTOM:
- if (!es->fit_along) w = ww;
- if (!es->fit_size) h = hh;
- break;
case E_GADCON_ORIENT_CORNER_TL:
- break;
case E_GADCON_ORIENT_CORNER_TR:
- break;
case E_GADCON_ORIENT_CORNER_BL:
- break;
case E_GADCON_ORIENT_CORNER_BR:
+ if (!es->fit_along) w = ww;
+ if (!es->fit_size) h = hh;
+ break;
+ case E_GADCON_ORIENT_VERT:
+ case E_GADCON_ORIENT_LEFT:
+ case E_GADCON_ORIENT_RIGHT:
+ case E_GADCON_ORIENT_CORNER_LT:
+ case E_GADCON_ORIENT_CORNER_RT:
+ case E_GADCON_ORIENT_CORNER_LB:
+ case E_GADCON_ORIENT_CORNER_RB:
+ if (!es->fit_along) h = hh;
+ if (!es->fit_size) w = ww;
break;
default:
break;
switch (gc->orient)
{
case E_GADCON_ORIENT_FLOAT:
+ if (!es->fit_along) nw = es->w;
+ if (!es->fit_size) nh = es->h;
+ if (nw > es->zone->w) nw = es->zone->w;
+ if (nh > es->zone->h) nh = es->zone->h;
+ if (nw != es->w) nx = es->x + ((es->w - nw) / 2);
break;
case E_GADCON_ORIENT_HORIZ:
+ if (!es->fit_along) nw = es->w;
+ if (!es->fit_size) nh = es->h;
+ if (nw > es->zone->w) nw = es->zone->w;
+ if (nh > es->zone->h) nh = es->zone->h;
+ if (nw != es->w) nx = es->x + ((es->w - nw) / 2);
break;
case E_GADCON_ORIENT_VERT:
+ if (!es->fit_along) nh = es->h;
+ if (!es->fit_size) nw = es->w;
+ if (nw > es->zone->w) nw = es->zone->w;
+ if (nh > es->zone->h) nh = es->zone->h;
+ if (nh != es->h) ny = es->y + ((es->h - nh) / 2);
break;
case E_GADCON_ORIENT_LEFT:
+ if (!es->fit_along) nh = es->h;
+ if (!es->fit_size) nw = es->w;
+ if (nw > es->zone->w) nw = es->zone->w;
+ if (nh > es->zone->h) nh = es->zone->h;
+ if (nh != es->h) ny = es->y + ((es->h - nh) / 2);
+ nx = 0;
break;
case E_GADCON_ORIENT_RIGHT:
+ if (!es->fit_along) nh = es->h;
+ if (!es->fit_size) nw = es->w;
+ if (nw > es->zone->w) nw = es->zone->w;
+ if (nh > es->zone->h) nh = es->zone->h;
+ if (nh != es->h) ny = es->y + ((es->h - nh) / 2);
+ nx = es->zone->w - nw;
break;
case E_GADCON_ORIENT_TOP:
if (!es->fit_along) nw = es->w;
ny = es->zone->h - nh;
break;
case E_GADCON_ORIENT_CORNER_TL:
+ if (!es->fit_along) nw = es->w;
+ if (!es->fit_size) nh = es->h;
+ if (nw > es->zone->w) nw = es->zone->w;
+ if (nh > es->zone->h) nh = es->zone->h;
+ if (nw != es->w) nx = 0;
+ ny = 0;
break;
case E_GADCON_ORIENT_CORNER_TR:
+ if (!es->fit_along) nw = es->w;
+ if (!es->fit_size) nh = es->h;
+ if (nw > es->zone->w) nw = es->zone->w;
+ if (nh > es->zone->h) nh = es->zone->h;
+ if (nw != es->w) nx = es->zone->w - es->w;
+ ny = 0;
break;
case E_GADCON_ORIENT_CORNER_BL:
+ if (!es->fit_along) nw = es->w;
+ if (!es->fit_size) nh = es->h;
+ if (nw > es->zone->w) nw = es->zone->w;
+ if (nh > es->zone->h) nh = es->zone->h;
+ if (nw != es->w) nx = 0;
+ ny = es->zone->h - nh;
break;
case E_GADCON_ORIENT_CORNER_BR:
+ if (!es->fit_along) nw = es->w;
+ if (!es->fit_size) nh = es->h;
+ if (nw > es->zone->w) nw = es->zone->w;
+ if (nh > es->zone->h) nh = es->zone->h;
+ if (nw != es->w) nx = es->zone->w - es->w;
+ ny = es->zone->h - nh;
+ break;
+ case E_GADCON_ORIENT_CORNER_LT:
+ if (!es->fit_along) nh = es->h;
+ if (!es->fit_size) nw = es->w;
+ if (nw > es->zone->w) nw = es->zone->w;
+ if (nh > es->zone->h) nh = es->zone->h;
+ if (nh != es->h) ny = 0;
+ nx = 0;
+ break;
+ case E_GADCON_ORIENT_CORNER_RT:
+ if (!es->fit_along) nh = es->h;
+ if (!es->fit_size) nw = es->w;
+ if (nw > es->zone->w) nw = es->zone->w;
+ if (nh > es->zone->h) nh = es->zone->h;
+ if (nh != es->h) ny = 0;
+ nx = es->zone->w - nw;
+ break;
+ case E_GADCON_ORIENT_CORNER_LB:
+ if (!es->fit_along) nh = es->h;
+ if (!es->fit_size) nw = es->w;
+ if (nw > es->zone->w) nw = es->zone->w;
+ if (nh > es->zone->h) nh = es->zone->h;
+ if (nh != es->h) ny = es->zone->h - nh;
+ nx = 0;
+ break;
+ case E_GADCON_ORIENT_CORNER_RB:
+ if (!es->fit_along) nh = es->h;
+ if (!es->fit_size) nw = es->w;
+ if (nw > es->zone->w) nw = es->zone->w;
+ if (nh > es->zone->h) nh = es->zone->h;
+ if (nh != es->h) ny = es->zone->h - nh;
+ nx = es->zone->w - nw;
break;
default:
break;
evas_object_del(o);
return NULL;
}
+ edje_object_signal_emit(o, "set_orientation",
+ _e_shelf_orient_string_get(es));
+ edje_object_message_signal_process(o);
return o;
}