forked from enlightenment/enlightenment
add frame object selection ability - broke move of the framed "ibar" test.
need to fix framed gadcon clients to account for frame size. SVN revision: 21807
This commit is contained in:
parent
5828935a95
commit
cc6b6a326c
|
@ -1,6 +1,8 @@
|
|||
images {
|
||||
image: "e17_shelf_bg_h.png" COMP;
|
||||
image: "e17_shelf_sh_h.png" COMP;
|
||||
image: "e17_ibar_bg_h.png" COMP;
|
||||
image: "e17_ibar_over_h.png" COMP;
|
||||
}
|
||||
|
||||
group {
|
||||
|
@ -112,3 +114,76 @@ group {
|
|||
}
|
||||
}
|
||||
}
|
||||
group {
|
||||
name: "shelf/default/inset";
|
||||
parts {
|
||||
part {
|
||||
name: "background";
|
||||
mouse_events: 0;
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
rel1 {
|
||||
to: "overlay";
|
||||
}
|
||||
rel2 {
|
||||
to: "overlay";
|
||||
}
|
||||
image {
|
||||
normal: "e17_ibar_bg_h.png";
|
||||
border: 6 6 6 6;
|
||||
}
|
||||
fill {
|
||||
smooth: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
part {
|
||||
name: "items_clip";
|
||||
type: RECT;
|
||||
mouse_events: 0;
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
rel1 {
|
||||
to: "background";
|
||||
offset: 4 4;
|
||||
}
|
||||
rel2 {
|
||||
to: "background";
|
||||
offset: -5 -5;
|
||||
}
|
||||
color: 255 255 255 255;
|
||||
}
|
||||
}
|
||||
part {
|
||||
name: "items";
|
||||
type: SWALLOW;
|
||||
mouse_events: 0;
|
||||
clip_to: "items_clip";
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
rel1 {
|
||||
offset: 4 4;
|
||||
}
|
||||
rel2 {
|
||||
offset: -5 -5;
|
||||
}
|
||||
color: 0 0 0 0;
|
||||
}
|
||||
}
|
||||
part {
|
||||
name: "overlay";
|
||||
mouse_events: 0;
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
image {
|
||||
normal: "e17_ibar_over_h.png";
|
||||
border: 13 13 13 13;
|
||||
middle: 0;
|
||||
}
|
||||
fill {
|
||||
smooth: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,7 +38,6 @@ static E_Config_DD *_e_config_color_class_edd = NULL;
|
|||
static E_Config_DD *_e_config_gadcon_edd = NULL;
|
||||
static E_Config_DD *_e_config_gadcon_client_edd = NULL;
|
||||
static E_Config_DD *_e_config_shelf_edd = NULL;
|
||||
static E_Config_DD *_e_config_shelf_config_edd = NULL;
|
||||
|
||||
|
||||
/* externally accessible functions */
|
||||
|
@ -90,6 +89,8 @@ e_config_init(void)
|
|||
E_CONFIG_VAL(D, T, geom.pos, INT);
|
||||
E_CONFIG_VAL(D, T, geom.size, INT);
|
||||
E_CONFIG_VAL(D, T, geom.res, INT);
|
||||
E_CONFIG_VAL(D, T, style, STR);
|
||||
E_CONFIG_VAL(D, T, autoscroll, UCHAR);
|
||||
|
||||
_e_config_gadcon_edd = E_CONFIG_DD_NEW("E_Config_Gadcon", E_Config_Gadcon);
|
||||
#undef T
|
||||
|
@ -100,22 +101,6 @@ e_config_init(void)
|
|||
E_CONFIG_VAL(D, T, id, STR);
|
||||
E_CONFIG_LIST(D, T, clients, _e_config_gadcon_client_edd);
|
||||
|
||||
_e_config_shelf_config_edd = E_CONFIG_DD_NEW("E_Config_Shelf_Config", E_Config_Shelf_Config);
|
||||
#undef T
|
||||
#undef D
|
||||
#define T E_Config_Shelf_Config
|
||||
#define D _e_config_shelf_config_edd
|
||||
E_CONFIG_VAL(D, T, res.w, INT);
|
||||
E_CONFIG_VAL(D, T, res.h, INT);
|
||||
E_CONFIG_VAL(D, T, x, INT);
|
||||
E_CONFIG_VAL(D, T, y, INT);
|
||||
E_CONFIG_VAL(D, T, w, INT);
|
||||
E_CONFIG_VAL(D, T, h, INT);
|
||||
E_CONFIG_VAL(D, T, orient, INT);
|
||||
E_CONFIG_VAL(D, T, style, STR);
|
||||
E_CONFIG_VAL(D, T, fit_along, UCHAR);
|
||||
E_CONFIG_VAL(D, T, fit_size, UCHAR);
|
||||
|
||||
_e_config_shelf_edd = E_CONFIG_DD_NEW("E_Config_Shelf", E_Config_Shelf);
|
||||
#undef T
|
||||
#undef D
|
||||
|
@ -126,7 +111,11 @@ e_config_init(void)
|
|||
E_CONFIG_VAL(D, T, zone, INT);
|
||||
E_CONFIG_VAL(D, T, layer, INT);
|
||||
E_CONFIG_VAL(D, T, popup, UCHAR);
|
||||
E_CONFIG_LIST(D, T, configs, _e_config_shelf_config_edd);
|
||||
E_CONFIG_VAL(D, T, orient, INT);
|
||||
E_CONFIG_VAL(D, T, fit_along, UCHAR);
|
||||
E_CONFIG_VAL(D, T, fit_size, UCHAR);
|
||||
E_CONFIG_VAL(D, T, style, STR);
|
||||
E_CONFIG_VAL(D, T, size, INT);
|
||||
|
||||
_e_config_desktop_bg_edd = E_CONFIG_DD_NEW("E_Config_Desktop_Background", E_Config_Desktop_Background);
|
||||
#undef T
|
||||
|
@ -1026,10 +1015,14 @@ e_config_init(void)
|
|||
E_BINDING_MODIFIER_ALT, 0,
|
||||
"desk_linear_flip_by", "1");
|
||||
}
|
||||
IFCFGEND;
|
||||
/* yes - this causes a small leak - i know. it is for testing temporarily x*/
|
||||
e_config->shelves = NULL;
|
||||
e_config->gadcons = NULL;
|
||||
// IFCFG(0x008e); /* the version # where this value(s) was introduced */
|
||||
#if 1 // this is liable to change
|
||||
{
|
||||
E_Config_Shelf *cf_es;
|
||||
E_Config_Shelf_Config *cf_escf;
|
||||
|
||||
cf_es = E_NEW(E_Config_Shelf, 1);
|
||||
cf_es->name = evas_stringshare_add("shelf");
|
||||
|
@ -1037,20 +1030,12 @@ e_config_init(void)
|
|||
cf_es->zone = 0;
|
||||
cf_es->popup = 1;
|
||||
cf_es->layer = 200;
|
||||
cf_es->orient = E_GADCON_ORIENT_TOP;
|
||||
cf_es->fit_along = 1;
|
||||
cf_es->fit_size = 0;
|
||||
cf_es->style = evas_stringshare_add("default");
|
||||
cf_es->size = 40;
|
||||
e_config->shelves = evas_list_append(e_config->shelves, cf_es);
|
||||
|
||||
cf_escf = E_NEW(E_Config_Shelf_Config, 1);
|
||||
cf_escf->res.w = 800;
|
||||
cf_escf->res.h = 600;
|
||||
cf_escf->x = 0;
|
||||
cf_escf->y = 0;
|
||||
cf_escf->w = 800;
|
||||
cf_escf->h = 40;
|
||||
cf_escf->orient = E_GADCON_ORIENT_TOP;
|
||||
cf_escf->fit_along = 1;
|
||||
cf_escf->fit_size = 0;
|
||||
cf_escf->style = evas_stringshare_add("default");
|
||||
cf_es->configs = evas_list_append(cf_es->configs, cf_escf);
|
||||
}
|
||||
{
|
||||
E_Config_Gadcon *cf_gc;
|
||||
|
@ -1067,6 +1052,8 @@ e_config_init(void)
|
|||
cf_gcc->geom.res = 800;
|
||||
cf_gcc->geom.size = 200;
|
||||
cf_gcc->geom.pos = 400 - (cf_gcc->geom.size / 2);
|
||||
cf_gcc->style = evas_stringshare_add("inset");
|
||||
cf_gcc->autoscroll = 0;
|
||||
cf_gc->clients = evas_list_append(cf_gc->clients, cf_gcc);
|
||||
|
||||
cf_gcc = E_NEW(E_Config_Gadcon_Client, 1);
|
||||
|
@ -1075,6 +1062,8 @@ e_config_init(void)
|
|||
cf_gcc->geom.res = 800;
|
||||
cf_gcc->geom.size = 32;
|
||||
cf_gcc->geom.pos = 800 - (cf_gcc->geom.size);
|
||||
cf_gcc->style = NULL;
|
||||
cf_gcc->autoscroll = 0;
|
||||
cf_gc->clients = evas_list_append(cf_gc->clients, cf_gcc);
|
||||
|
||||
cf_gcc = E_NEW(E_Config_Gadcon_Client, 1);
|
||||
|
@ -1083,10 +1072,12 @@ e_config_init(void)
|
|||
cf_gcc->geom.res = 800;
|
||||
cf_gcc->geom.size = 32;
|
||||
cf_gcc->geom.pos = 0;
|
||||
cf_gcc->style = NULL;
|
||||
cf_gcc->autoscroll = 0;
|
||||
cf_gc->clients = evas_list_append(cf_gc->clients, cf_gcc);
|
||||
}
|
||||
#endif
|
||||
IFCFGEND;
|
||||
// IFCFGEND;
|
||||
|
||||
#if 0 /* example of new config */
|
||||
IFCFG(0x008e); /* the version # where this value(s) was introduced */
|
||||
|
@ -1201,7 +1192,6 @@ e_config_shutdown(void)
|
|||
E_CONFIG_DD_FREE(_e_config_gadcon_edd);
|
||||
E_CONFIG_DD_FREE(_e_config_gadcon_client_edd);
|
||||
E_CONFIG_DD_FREE(_e_config_shelf_edd);
|
||||
E_CONFIG_DD_FREE(_e_config_shelf_config_edd);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -36,7 +36,6 @@ typedef struct _E_Config_Desktop_Name E_Config_Desktop_Name;
|
|||
typedef struct _E_Config_Gadcon E_Config_Gadcon;
|
||||
typedef struct _E_Config_Gadcon_Client E_Config_Gadcon_Client;
|
||||
typedef struct _E_Config_Shelf E_Config_Shelf;
|
||||
typedef struct _E_Config_Shelf_Config E_Config_Shelf_Config;
|
||||
|
||||
typedef Eet_Data_Descriptor E_Config_DD;
|
||||
|
||||
|
@ -316,6 +315,8 @@ struct _E_Config_Gadcon_Client
|
|||
struct {
|
||||
int pos, size, res;
|
||||
} geom;
|
||||
const char *style;
|
||||
unsigned char autoscroll;
|
||||
};
|
||||
|
||||
struct _E_Config_Shelf
|
||||
|
@ -324,19 +325,11 @@ struct _E_Config_Shelf
|
|||
int container, zone;
|
||||
int layer;
|
||||
unsigned char popup;
|
||||
Evas_List *configs;
|
||||
};
|
||||
|
||||
struct _E_Config_Shelf_Config
|
||||
{
|
||||
struct {
|
||||
int w, h;
|
||||
} res;
|
||||
int x, y, w, h;
|
||||
int orient;
|
||||
const char *style;
|
||||
unsigned char fit_along;
|
||||
unsigned char fit_size;
|
||||
const char *style;
|
||||
int size;
|
||||
};
|
||||
|
||||
EAPI int e_config_init(void);
|
||||
|
|
|
@ -8,7 +8,7 @@ static void _e_gadcon_client_free(E_Gadcon_Client *gcc);
|
|||
|
||||
static void _e_gadcon_client_save(E_Gadcon_Client *gcc);
|
||||
|
||||
static void _e_gadcon_cb_size_request(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||
static void _e_gadcon_cb_size_request(void *data, Evas_Object *obj, void *event_info);
|
||||
static void _e_gadcon_cb_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event_info);
|
||||
static void _e_gadcon_cb_mouse_up(void *data, Evas *evas, Evas_Object *obj, void *event_info);
|
||||
static void _e_gadcon_cb_mouse_in(void *data, Evas *evas, Evas_Object *obj, void *event_info);
|
||||
|
@ -51,17 +51,17 @@ static Evas_Hash *providers = NULL;
|
|||
static Evas_List *gadcons = NULL;
|
||||
|
||||
static E_Gadcon_Client *
|
||||
__test(E_Gadcon *gc, char *name, char *id)
|
||||
__test(E_Gadcon *gc, char *name, char *id, char *style)
|
||||
{
|
||||
Evas_Object *o;
|
||||
E_Gadcon_Client *gcc;
|
||||
|
||||
printf("create gadcon client \"%s\" \"%s\" for \"%s\" \"%s\"\n",
|
||||
name, id,
|
||||
printf("create gadcon client \"%s\" \"%s\" \"%s\" for \"%s\" \"%s\"\n",
|
||||
name, id, style,
|
||||
gc->name, gc->id);
|
||||
o = evas_object_rectangle_add(gc->evas);
|
||||
evas_object_color_set(o, rand() & 0xff, rand() & 0xff, rand() & 0xff, 150);
|
||||
gcc = e_gadcon_client_new(gc, name, id, o);
|
||||
gcc = e_gadcon_client_new(gc, name, id, style, o);
|
||||
gcc->data = NULL; // this is where a module would hook private data
|
||||
return gcc;
|
||||
}
|
||||
|
@ -181,6 +181,16 @@ e_gadcon_size_request_callback_set(E_Gadcon *gc, void (*func) (void *data, E_Gad
|
|||
gc->resize_request.data = data;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_gadcon_frame_request_callback_set(E_Gadcon *gc, Evas_Object *(*func) (void *data, E_Gadcon_Client *gcc, const char *style), void *data)
|
||||
{
|
||||
E_OBJECT_CHECK(gc);
|
||||
E_OBJECT_TYPE_CHECK(gc, E_GADCON_TYPE);
|
||||
|
||||
gc->frame_request.func = func;
|
||||
gc->frame_request.data = data;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
e_gadcon_layout_policy_set(E_Gadcon *gc, E_Gadcon_Layout_Policy layout_policy)
|
||||
{
|
||||
|
@ -227,17 +237,24 @@ e_gadcon_populate(E_Gadcon *gc)
|
|||
{
|
||||
E_Gadcon_Client *gcc;
|
||||
|
||||
gcc = cc->func.init(gc, cf_gcc->name, cf_gcc->id);
|
||||
gcc = cc->func.init(gc, cf_gcc->name, cf_gcc->id,
|
||||
cf_gcc->style);
|
||||
if (gcc)
|
||||
{
|
||||
gcc->client_class = *cc;
|
||||
gcc->config.pos = cf_gcc->geom.pos;
|
||||
gcc->config.size = cf_gcc->geom.size;
|
||||
gcc->config.res = cf_gcc->geom.res;
|
||||
e_gadcon_layout_pack_options_set(gcc->o_base,
|
||||
gcc->config.pos,
|
||||
gcc->config.size,
|
||||
gcc->config.res);
|
||||
if (gcc->o_frame)
|
||||
e_gadcon_layout_pack_options_set(gcc->o_frame,
|
||||
gcc->config.pos,
|
||||
gcc->config.size,
|
||||
gcc->config.res);
|
||||
else
|
||||
e_gadcon_layout_pack_options_set(gcc->o_base,
|
||||
gcc->config.pos,
|
||||
gcc->config.size,
|
||||
gcc->config.res);
|
||||
if (gcc->client_class.func.orient)
|
||||
gcc->client_class.func.orient(gcc);
|
||||
}
|
||||
|
@ -372,7 +389,7 @@ e_gadcon_canvas_zone_geometry_get(E_Gadcon *gc, int *x, int *y, int *w, int *h)
|
|||
}
|
||||
|
||||
EAPI E_Gadcon_Client *
|
||||
e_gadcon_client_new(E_Gadcon *gc, char *name, char *id, Evas_Object *base_obj)
|
||||
e_gadcon_client_new(E_Gadcon *gc, char *name, char *id, char *style, Evas_Object *base_obj)
|
||||
{
|
||||
E_Gadcon_Client *gcc;
|
||||
|
||||
|
@ -385,7 +402,20 @@ e_gadcon_client_new(E_Gadcon *gc, char *name, char *id, Evas_Object *base_obj)
|
|||
gcc->name = evas_stringshare_add(name);
|
||||
gcc->id = evas_stringshare_add(id);
|
||||
gc->clients = evas_list_append(gc->clients, gcc);
|
||||
e_gadcon_layout_pack(gc->o_container, gcc->o_base);
|
||||
if ((gc->frame_request.func) && (style))
|
||||
{
|
||||
gcc->o_frame = gc->frame_request.func(gc->frame_request.data, gcc,
|
||||
style);
|
||||
if (gcc->o_frame)
|
||||
{
|
||||
edje_object_part_swallow(gcc->o_frame, "items", gcc->o_base);
|
||||
evas_object_show(gcc->o_frame);
|
||||
}
|
||||
}
|
||||
if (gcc->o_frame)
|
||||
e_gadcon_layout_pack(gc->o_container, gcc->o_frame);
|
||||
else
|
||||
e_gadcon_layout_pack(gc->o_container, gcc->o_base);
|
||||
evas_object_show(gcc->o_base);
|
||||
return gcc;
|
||||
}
|
||||
|
@ -402,7 +432,10 @@ e_gadcon_client_edit_begin(E_Gadcon_Client *gcc)
|
|||
|
||||
gcc->o_control = edje_object_add(gcc->gadcon->evas);
|
||||
evas_object_layer_set(gcc->o_control, 100);
|
||||
evas_object_geometry_get(gcc->o_base, &x, &y, &w, &h);
|
||||
if (gcc->o_frame)
|
||||
evas_object_geometry_get(gcc->o_frame, &x, &y, &w, &h);
|
||||
else
|
||||
evas_object_geometry_get(gcc->o_base, &x, &y, &w, &h);
|
||||
evas_object_move(gcc->o_control, x, y);
|
||||
evas_object_resize(gcc->o_control, w, h);
|
||||
e_theme_edje_object_set(gcc->o_control, "base/theme/gadman",
|
||||
|
@ -467,6 +500,10 @@ e_gadcon_client_edit_end(E_Gadcon_Client *gcc)
|
|||
{
|
||||
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->moving)
|
||||
{
|
||||
gcc->moving = 0;
|
||||
|
@ -488,12 +525,18 @@ e_gadcon_client_size_request(E_Gadcon_Client *gcc, Evas_Coord w, Evas_Coord h)
|
|||
case E_GADCON_ORIENT_HORIZ:
|
||||
case E_GADCON_ORIENT_TOP:
|
||||
case E_GADCON_ORIENT_BOTTOM:
|
||||
e_gadcon_layout_pack_size_set(gcc->o_base, w);
|
||||
if (gcc->o_frame)
|
||||
e_gadcon_layout_pack_size_set(gcc->o_frame, w);
|
||||
else
|
||||
e_gadcon_layout_pack_size_set(gcc->o_base, w);
|
||||
break;
|
||||
case E_GADCON_ORIENT_VERT:
|
||||
case E_GADCON_ORIENT_LEFT:
|
||||
case E_GADCON_ORIENT_RIGHT:
|
||||
e_gadcon_layout_pack_size_set(gcc->o_base, h);
|
||||
if (gcc->o_frame)
|
||||
e_gadcon_layout_pack_size_set(gcc->o_frame, h);
|
||||
else
|
||||
e_gadcon_layout_pack_size_set(gcc->o_base, h);
|
||||
break;
|
||||
case E_GADCON_ORIENT_FLOAT:
|
||||
case E_GADCON_ORIENT_CORNER_TL:
|
||||
|
@ -510,7 +553,10 @@ e_gadcon_client_min_size_set(E_Gadcon_Client *gcc, Evas_Coord w, Evas_Coord h)
|
|||
{
|
||||
E_OBJECT_CHECK(gcc);
|
||||
E_OBJECT_TYPE_CHECK(gcc, E_GADCON_CLIENT_TYPE);
|
||||
e_gadcon_layout_pack_min_size_set(gcc->o_base, w, h);
|
||||
if (gcc->o_frame)
|
||||
e_gadcon_layout_pack_min_size_set(gcc->o_frame, w, h);
|
||||
else
|
||||
e_gadcon_layout_pack_min_size_set(gcc->o_base, w, h);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
|
@ -518,7 +564,10 @@ e_gadcon_client_aspect_set(E_Gadcon_Client *gcc, int w, int h)
|
|||
{
|
||||
E_OBJECT_CHECK(gcc);
|
||||
E_OBJECT_TYPE_CHECK(gcc, E_GADCON_CLIENT_TYPE);
|
||||
e_gadcon_layout_pack_aspect_set(gcc->o_base, w, h);
|
||||
if (gcc->o_frame)
|
||||
e_gadcon_layout_pack_aspect_set(gcc->o_frame, w, h);
|
||||
else
|
||||
e_gadcon_layout_pack_aspect_set(gcc->o_base, w, h);
|
||||
}
|
||||
|
||||
/* local subsystem functions */
|
||||
|
@ -536,7 +585,9 @@ _e_gadcon_free(E_Gadcon *gc)
|
|||
static void
|
||||
_e_gadcon_client_free(E_Gadcon_Client *gcc)
|
||||
{
|
||||
e_gadcon_client_edit_end(gcc);
|
||||
gcc->gadcon->clients = evas_list_remove(gcc->gadcon->clients, gcc);
|
||||
if (gcc->o_frame) evas_object_del(gcc->o_frame);
|
||||
evas_stringshare_del(gcc->name);
|
||||
evas_stringshare_del(gcc->id);
|
||||
free(gcc);
|
||||
|
@ -598,7 +649,7 @@ _e_gadcon_client_save(E_Gadcon_Client *gcc)
|
|||
}
|
||||
|
||||
static void
|
||||
_e_gadcon_cb_size_request(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
||||
_e_gadcon_cb_size_request(void *data, Evas_Object *obj, void *event_info)
|
||||
{
|
||||
E_Gadcon *gc;
|
||||
|
||||
|
@ -722,7 +773,10 @@ _e_gadcon_cb_signal_move_go(void *data, Evas_Object *obj, const char *emission,
|
|||
evas_object_geometry_get(gcc->o_base, NULL, NULL, &w, &h);
|
||||
if (e_gadcon_layout_orientation_get(gcc->gadcon->o_container))
|
||||
{
|
||||
e_gadcon_layout_pack_request_set(gcc->o_base, gcc->sx + x, w);
|
||||
if (gcc->o_frame)
|
||||
e_gadcon_layout_pack_request_set(gcc->o_frame, gcc->sx + x, w);
|
||||
else
|
||||
e_gadcon_layout_pack_request_set(gcc->o_base, gcc->sx + x, w);
|
||||
gcc->config.pos = gcc->sx + x;
|
||||
gcc->config.size = w;
|
||||
evas_object_geometry_get(gcc->gadcon->o_container, NULL, NULL, &w, &h);
|
||||
|
@ -730,7 +784,10 @@ _e_gadcon_cb_signal_move_go(void *data, Evas_Object *obj, const char *emission,
|
|||
}
|
||||
else
|
||||
{
|
||||
e_gadcon_layout_pack_request_set(gcc->o_base, gcc->sy + y, h);
|
||||
if (gcc->o_frame)
|
||||
e_gadcon_layout_pack_request_set(gcc->o_frame, gcc->sy + y, h);
|
||||
else
|
||||
e_gadcon_layout_pack_request_set(gcc->o_base, gcc->sy + y, h);
|
||||
gcc->config.pos = gcc->sy + y;
|
||||
gcc->config.size = h;
|
||||
evas_object_geometry_get(gcc->gadcon->o_container, NULL, NULL, &w, &h);
|
||||
|
@ -947,12 +1004,17 @@ static void
|
|||
e_gadcon_layout_min_size_get(Evas_Object *obj, Evas_Coord *w, Evas_Coord *h)
|
||||
{
|
||||
E_Smart_Data *sd;
|
||||
/*
|
||||
Evas_List *l;
|
||||
Evas_Coord tw = 0, th = 0;
|
||||
*/
|
||||
|
||||
sd = evas_object_smart_data_get(obj);
|
||||
if (!sd) return;
|
||||
|
||||
if (w) *w = sd->minw;
|
||||
if (h) *h = sd->minh;
|
||||
/*
|
||||
for (l = sd->items; l; l = l->next)
|
||||
{
|
||||
E_Gadcon_Layout_Item *bi;
|
||||
|
@ -973,6 +1035,7 @@ e_gadcon_layout_min_size_get(Evas_Object *obj, Evas_Coord *w, Evas_Coord *h)
|
|||
}
|
||||
if (w) *w = tw;
|
||||
if (h) *h = th;
|
||||
*/
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1266,10 +1329,14 @@ _e_gadcon_layout_smart_reconfigure(E_Smart_Data *sd)
|
|||
if (sd->horizontal)
|
||||
{
|
||||
bi->ask.size2 = (h * bi->aspect.w) / bi->aspect.h;
|
||||
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;
|
||||
if (bi->ask.size2 > bi->min.h)
|
||||
min += (bi->ask.size2 - bi->min.h);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -62,6 +62,10 @@ struct _E_Gadcon
|
|||
void (*func) (void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord h);
|
||||
void *data;
|
||||
} resize_request;
|
||||
struct {
|
||||
Evas_Object *(*func) (void *data, E_Gadcon_Client *gcc, const char *style);
|
||||
void *data;
|
||||
} frame_request;
|
||||
};
|
||||
|
||||
#define GADCON_CLIENT_CLASS_VERSION 1
|
||||
|
@ -70,7 +74,7 @@ struct _E_Gadcon_Client_Class
|
|||
int version;
|
||||
char *name;
|
||||
struct {
|
||||
E_Gadcon_Client *(*init) (E_Gadcon *gc, char *name, char *id);
|
||||
E_Gadcon_Client *(*init) (E_Gadcon *gc, char *name, char *id, char *style);
|
||||
void (*shutdown) (E_Gadcon_Client *gcc);
|
||||
void (*orient) (E_Gadcon_Client *gcc);
|
||||
} func;
|
||||
|
@ -83,6 +87,7 @@ struct _E_Gadcon_Client
|
|||
char *name;
|
||||
char *id;
|
||||
Evas_Object *o_base;
|
||||
Evas_Object *o_frame;
|
||||
Evas_Object *o_control;
|
||||
Evas_Object *o_event;
|
||||
E_Gadcon_Client_Class client_class;
|
||||
|
@ -102,6 +107,7 @@ EAPI void e_gadcon_provider_unregister(E_Gadcon_Client_Class *cc);
|
|||
EAPI E_Gadcon *e_gadcon_swallowed_new(const char *name, char *id, Evas_Object *obj, char *swallow_name);
|
||||
EAPI void e_gadcon_swallowed_min_size_set(E_Gadcon *gc, Evas_Coord w, Evas_Coord h);
|
||||
EAPI void e_gadcon_size_request_callback_set(E_Gadcon *gc, void (*func) (void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord h), void *data);
|
||||
EAPI void e_gadcon_frame_request_callback_set(E_Gadcon *gc, Evas_Object *(*func) (void *data, E_Gadcon_Client *gcc, const char *style), void *data);
|
||||
EAPI void e_gadcon_layout_policy_set(E_Gadcon *gc, E_Gadcon_Layout_Policy layout_policy);
|
||||
EAPI void e_gadcon_populate(E_Gadcon *gc);
|
||||
EAPI void e_gadcon_orient(E_Gadcon *gc, E_Gadcon_Orient orient);
|
||||
|
@ -114,7 +120,7 @@ EAPI E_Zone *e_gadcon_zone_get(E_Gadcon *gc);
|
|||
EAPI void e_gadcon_ecore_evas_set(E_Gadcon *gc, Ecore_Evas *ee);
|
||||
EAPI int e_gadcon_canvas_zone_geometry_get(E_Gadcon *gc, int *x, int *y, int *w, int *h);
|
||||
|
||||
EAPI E_Gadcon_Client *e_gadcon_client_new(E_Gadcon *gc, char *name, char *id, Evas_Object *base_obj);
|
||||
EAPI E_Gadcon_Client *e_gadcon_client_new(E_Gadcon *gc, char *name, char *id, char *style, Evas_Object *base_obj);
|
||||
EAPI void e_gadcon_client_size_request(E_Gadcon_Client *gcc, Evas_Coord w, Evas_Coord h);
|
||||
EAPI void e_gadcon_client_min_size_set(E_Gadcon_Client *gcc, Evas_Coord w, Evas_Coord h);
|
||||
EAPI void e_gadcon_client_aspect_set(E_Gadcon_Client *gcc, int w, int h);
|
||||
|
|
|
@ -4,8 +4,9 @@
|
|||
#include "e.h"
|
||||
|
||||
static void _e_shelf_free(E_Shelf *es);
|
||||
static void _e_shelf_config_port(E_Config_Shelf_Config *cf1, E_Config_Shelf_Config *cf2);
|
||||
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;
|
||||
|
@ -38,7 +39,6 @@ e_shelf_config_init(void)
|
|||
for (l = e_config->shelves; l; l = l->next)
|
||||
{
|
||||
E_Config_Shelf *cf_es;
|
||||
E_Config_Shelf_Config *cf_escf, *cf_escf2;
|
||||
E_Zone *zone;
|
||||
int closeness;
|
||||
|
||||
|
@ -46,60 +46,17 @@ e_shelf_config_init(void)
|
|||
zone = e_util_container_zone_number_get(cf_es->container, cf_es->zone);
|
||||
if (zone)
|
||||
{
|
||||
cf_escf2 = NULL;
|
||||
closeness = 0x7fffffff;
|
||||
for (l2 = cf_es->configs; l2; l2 = l2->next)
|
||||
{
|
||||
cf_escf = l2->data;
|
||||
if ((cf_escf->res.w == zone->w) &&
|
||||
(cf_escf->res.h == zone->h))
|
||||
{
|
||||
cf_escf2 = cf_escf;
|
||||
closeness = 0;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
int difx, dify;
|
||||
E_Shelf *es;
|
||||
|
||||
difx = cf_escf->res.w - zone->w;
|
||||
if (difx < 0) difx = -difx;
|
||||
dify = cf_escf->res.h - zone->h;
|
||||
if (dify < 0) dify = -dify;
|
||||
difx = difx * dify;
|
||||
if (difx < closeness)
|
||||
{
|
||||
closeness = difx;
|
||||
cf_escf2 = cf_escf;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((closeness != 0) && (cf_escf2))
|
||||
es = e_shelf_zone_new(zone, cf_es->name, cf_es->style,
|
||||
cf_es->popup, cf_es->layer);
|
||||
if (es)
|
||||
{
|
||||
cf_escf = E_NEW(E_Config_Shelf_Config, 1);
|
||||
cf_escf->res.w = zone->w;
|
||||
cf_escf->res.h = zone->h;
|
||||
cf_escf->orient = cf_escf2->orient;
|
||||
cf_escf->style = evas_stringshare_add(cf_escf2->style);
|
||||
_e_shelf_config_port(cf_escf2, cf_escf);
|
||||
cf_escf2 = cf_escf;
|
||||
e_config_save_queue();
|
||||
}
|
||||
if (cf_escf2)
|
||||
{
|
||||
E_Shelf *es;
|
||||
|
||||
es = e_shelf_zone_new(zone, cf_es->name, cf_escf2->style,
|
||||
cf_es->popup, cf_es->layer);
|
||||
if (es)
|
||||
{
|
||||
es->cfg = cf_es;
|
||||
e_shelf_move_resize(es, cf_escf2->x, cf_escf2->y,
|
||||
cf_escf2->w, cf_escf2->h);
|
||||
e_shelf_orient(es, cf_escf2->orient);
|
||||
e_shelf_populate(es);
|
||||
e_shelf_show(es);
|
||||
}
|
||||
es->cfg = cf_es;
|
||||
e_shelf_orient(es, cf_es->orient);
|
||||
_e_shelf_position_calc(es);
|
||||
e_shelf_populate(es);
|
||||
e_shelf_show(es);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -156,8 +113,12 @@ e_shelf_zone_new(E_Zone *zone, const char *name, const char *style, int popup, i
|
|||
snprintf(buf, sizeof(buf), "%i", shelf_id);
|
||||
shelf_id++;
|
||||
es->gadcon = e_gadcon_swallowed_new(es->name, buf, es->o_base, "items");
|
||||
e_gadcon_size_request_callback_set(es->gadcon, _e_shelf_gadcon_size_request,
|
||||
e_gadcon_size_request_callback_set(es->gadcon,
|
||||
_e_shelf_gadcon_size_request,
|
||||
es);
|
||||
e_gadcon_frame_request_callback_set(es->gadcon,
|
||||
_e_shelf_gadcon_frame_request,
|
||||
es);
|
||||
e_gadcon_orient(es->gadcon, E_GADCON_ORIENT_TOP);
|
||||
edje_object_signal_emit(es->o_base, "set_orientation", "top");
|
||||
e_gadcon_zone_set(es->gadcon, zone);
|
||||
|
@ -266,42 +227,13 @@ e_shelf_save(E_Shelf *es)
|
|||
E_OBJECT_TYPE_CHECK(es, E_GADMAN_SHELF_TYPE);
|
||||
if (es->cfg)
|
||||
{
|
||||
Evas_List *l;
|
||||
E_Config_Shelf_Config *cf_escf = NULL;
|
||||
|
||||
for (l = es->cfg->configs; l; l = l->next)
|
||||
{
|
||||
cf_escf = l->data;
|
||||
if ((cf_escf->res.w == es->zone->w) &&
|
||||
(cf_escf->res.h == es->zone->h))
|
||||
break;
|
||||
cf_escf = NULL;
|
||||
}
|
||||
if (!cf_escf)
|
||||
{
|
||||
cf_escf = E_NEW(E_Config_Shelf_Config, 1);
|
||||
if (cf_escf)
|
||||
{
|
||||
cf_escf->res.w = es->zone->w;
|
||||
cf_escf->res.h = es->zone->h;
|
||||
es->cfg->configs = evas_list_append(es->cfg->configs, cf_escf);
|
||||
}
|
||||
}
|
||||
if (cf_escf)
|
||||
{
|
||||
cf_escf->x = es->x;
|
||||
cf_escf->y = es->y;
|
||||
cf_escf->w = es->w;
|
||||
cf_escf->h = es->h;
|
||||
cf_escf->orient = es->gadcon->orient;
|
||||
if (cf_escf->style) evas_stringshare_del(cf_escf->style);
|
||||
cf_escf->style = evas_stringshare_add(es->style);
|
||||
}
|
||||
es->cfg->orient = es->gadcon->orient;
|
||||
if (es->cfg->style) evas_stringshare_del(es->cfg->style);
|
||||
es->cfg->style = evas_stringshare_add(es->style);
|
||||
}
|
||||
else
|
||||
{
|
||||
E_Config_Shelf *cf_es;
|
||||
E_Config_Shelf_Config *cf_escf = NULL;
|
||||
|
||||
cf_es = E_NEW(E_Config_Shelf, 1);
|
||||
cf_es->name = evas_stringshare_add(es->name);
|
||||
|
@ -310,18 +242,11 @@ e_shelf_save(E_Shelf *es)
|
|||
if (es->popup) cf_es->popup = 1;
|
||||
cf_es->layer = es->layer;
|
||||
e_config->shelves = evas_list_append(e_config->shelves, cf_es);
|
||||
cf_es->orient = es->gadcon->orient;
|
||||
cf_es->style = evas_stringshare_add(es->style);
|
||||
cf_es->fit_along = es->fit_along;
|
||||
cf_es->fit_size = es->fit_size;
|
||||
es->cfg = cf_es;
|
||||
|
||||
cf_escf = E_NEW(E_Config_Shelf_Config, 1);
|
||||
cf_escf->res.w = es->zone->w;
|
||||
cf_escf->res.h = es->zone->h;
|
||||
cf_escf->x = es->x;
|
||||
cf_escf->y = es->y;
|
||||
cf_escf->w = es->w;
|
||||
cf_escf->h = es->h;
|
||||
cf_escf->orient = es->gadcon->orient;
|
||||
cf_escf->style = evas_stringshare_add(es->style);
|
||||
cf_es->configs = evas_list_append(cf_es->configs, cf_escf);
|
||||
}
|
||||
e_config_save_queue();
|
||||
}
|
||||
|
@ -335,15 +260,7 @@ e_shelf_unsave(E_Shelf *es)
|
|||
{
|
||||
e_config->shelves = evas_list_remove(e_config->shelves, es->cfg);
|
||||
evas_stringshare_del(es->cfg->name);
|
||||
while (es->cfg->configs)
|
||||
{
|
||||
E_Config_Shelf_Config *cf_escf;
|
||||
|
||||
cf_escf = es->cfg->configs->data;
|
||||
if (cf_escf->style) evas_stringshare_del(cf_escf->style);
|
||||
free(cf_escf);
|
||||
es->cfg->configs = evas_list_remove_list(es->cfg->configs, es->cfg->configs);
|
||||
}
|
||||
if (es->cfg->style) evas_stringshare_del(es->cfg->style);
|
||||
free(es->cfg);
|
||||
}
|
||||
}
|
||||
|
@ -408,43 +325,54 @@ _e_shelf_free(E_Shelf *es)
|
|||
}
|
||||
|
||||
static void
|
||||
_e_shelf_config_port(E_Config_Shelf_Config *cf1, E_Config_Shelf_Config *cf2)
|
||||
_e_shelf_position_calc(E_Shelf *es)
|
||||
{
|
||||
int px[4], py[4];
|
||||
int i;
|
||||
E_Gadcon_Orient orient = E_GADCON_ORIENT_FLOAT;
|
||||
int size = 40;
|
||||
|
||||
/*
|
||||
* We have 4 corners. figure out what gravity zone (3x3 grid) they are in
|
||||
* then lock them in relative to the edge or middle of that zone and re
|
||||
* calculate it all then.
|
||||
*/
|
||||
px[0] = cf1->x;
|
||||
px[1] = cf1->x + cf1->w - 1;
|
||||
px[2] = cf1->x;
|
||||
px[3] = cf1->x + cf1->w - 1;
|
||||
py[0] = cf1->y;
|
||||
py[1] = cf1->y;
|
||||
py[2] = cf1->y + cf1->h - 1;
|
||||
py[3] = cf1->y + cf1->h - 1;
|
||||
for (i = 0; i < 4; i++)
|
||||
if (es->cfg)
|
||||
{
|
||||
if (px[i] < (cf1->res.w / 3))
|
||||
px[i] = px[i];
|
||||
else if (px[i] > ((2 * cf1->res.w) / 3))
|
||||
px[i] = (cf2->res.w) + (px[i] - cf1->res.w);
|
||||
else
|
||||
px[i] = (cf2->res.w / 2) + (px[i] - (cf1->res.w / 2));
|
||||
if (py[i] < (cf1->res.h / 3))
|
||||
py[i] = py[i];
|
||||
else if (py[i] > ((2 * cf1->res.h) / 3))
|
||||
py[i] = (cf2->res.h) + (py[i] - cf1->res.h);
|
||||
else
|
||||
py[i] = (cf2->res.h / 2) + (py[i] - (cf1->res.h / 2));
|
||||
orient = es->cfg->orient;
|
||||
size = es->cfg->size;
|
||||
}
|
||||
cf2->x = px[0];
|
||||
cf2->y = py[0];
|
||||
cf2->w = px[3] - px[0] + 1;
|
||||
cf2->h = py[3] = py[0] + 1;
|
||||
else
|
||||
orient = es->gadcon->orient;
|
||||
switch (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) es->w = es->zone->w;
|
||||
if (!es->fit_size) es->h = size;
|
||||
es->x = (es->zone->w - es->w) / 2;
|
||||
es->y = 0;
|
||||
break;
|
||||
case E_GADCON_ORIENT_BOTTOM:
|
||||
if (!es->fit_along) es->w = es->zone->w;
|
||||
if (!es->fit_size) es->h = size;
|
||||
es->x = (es->zone->w - es->w) / 2;
|
||||
es->y = es->zone->h - es->h;
|
||||
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:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
e_shelf_move_resize(es, es->x, es->y, es->w, es->h);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -537,3 +465,21 @@ _e_shelf_gadcon_size_request(void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord
|
|||
}
|
||||
e_shelf_move_resize(es, nx, ny, nw, nh);
|
||||
}
|
||||
|
||||
static Evas_Object *
|
||||
_e_shelf_gadcon_frame_request(void *data, E_Gadcon_Client *gcc, const char *style)
|
||||
{
|
||||
E_Shelf *es;
|
||||
Evas_Object *o;
|
||||
char buf[4096];
|
||||
|
||||
es = data;
|
||||
o = edje_object_add(gcc->gadcon->evas);
|
||||
snprintf(buf, sizeof(buf), "shelf/%s/%s", es->style, style);
|
||||
if (!e_theme_edje_object_set(o, "base/theme/shelf", buf))
|
||||
{
|
||||
evas_object_del(o);
|
||||
return NULL;
|
||||
}
|
||||
return o;
|
||||
}
|
||||
|
|
|
@ -27,6 +27,7 @@ struct _E_Shelf
|
|||
E_Config_Shelf *cfg;
|
||||
unsigned char fit_along : 1;
|
||||
unsigned char fit_size : 1;
|
||||
int size;
|
||||
};
|
||||
|
||||
EAPI int e_shelf_init(void);
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
/***************************************************************************/
|
||||
/**/
|
||||
/* gadcon requirements */
|
||||
static E_Gadcon_Client *_gc_init(E_Gadcon *gc, char *name, char *id);
|
||||
static E_Gadcon_Client *_gc_init(E_Gadcon *gc, char *name, char *id, char *style);
|
||||
static void _gc_shutdown(E_Gadcon_Client *gcc);
|
||||
static void _gc_orient(E_Gadcon_Client *gcc);
|
||||
/* and actually define the gadcon class that this module provides (just 1) */
|
||||
|
@ -39,7 +39,7 @@ static void _button_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *e
|
|||
static void _menu_cb_post(void *data, E_Menu *m);
|
||||
|
||||
static E_Gadcon_Client *
|
||||
_gc_init(E_Gadcon *gc, char *name, char *id)
|
||||
_gc_init(E_Gadcon *gc, char *name, char *id, char *style)
|
||||
{
|
||||
Evas_Object *o;
|
||||
E_Gadcon_Client *gcc;
|
||||
|
@ -52,7 +52,7 @@ _gc_init(E_Gadcon *gc, char *name, char *id)
|
|||
e_theme_edje_object_set(o, "base/theme/modules/start", "modules/start/main");
|
||||
edje_object_signal_emit(o, "passive", "");
|
||||
|
||||
gcc = e_gadcon_client_new(gc, name, id, o);
|
||||
gcc = e_gadcon_client_new(gc, name, id, style, o);
|
||||
gcc->data = inst;
|
||||
|
||||
inst->gcc = gcc;
|
||||
|
@ -85,6 +85,7 @@ _gc_orient(E_Gadcon_Client *gcc)
|
|||
|
||||
inst = gcc->data;
|
||||
printf("OREINT to %i\n", gcc->gadcon->orient);
|
||||
e_gadcon_client_aspect_set(gcc, 20, 20);
|
||||
e_gadcon_client_min_size_set(gcc, 20, 20);
|
||||
}
|
||||
/**/
|
||||
|
|
Loading…
Reference in New Issue