From ec993d1e3b8dc646ac2bc234375f820d3173b754 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Tue, 18 Jan 2005 15:40:54 +0000 Subject: [PATCH] more gadman work SVN revision: 13005 --- data/themes/default_gadman.edc | 107 ++++++++++++++ src/bin/e_gadman.c | 247 ++++++++++++++++++++++++++++----- src/bin/e_gadman.h | 24 +++- src/bin/e_main.c | 2 + 4 files changed, 338 insertions(+), 42 deletions(-) diff --git a/data/themes/default_gadman.edc b/data/themes/default_gadman.edc index 2420dfc66..a829163e9 100644 --- a/data/themes/default_gadman.edc +++ b/data/themes/default_gadman.edc @@ -16,6 +16,50 @@ images { group { name: "gadman/control"; parts { + part { + name: "hclip"; + mouse_events: 0; + type: RECT; + description { + state: "default" 0.0; + visible : 1; + rel1 { + relative: 0.0 0.0; + offset: -80 -80; + } + rel2 { + relative: 1.0 1.0; + offset: 79 79; + } + } + description { + state: "disabled" 0.0; + inherit: "default" 0.0; + visible : 0; + } + } + part { + name: "vclip"; + mouse_events: 0; + type: RECT; + description { + state: "default" 0.0; + visible : 1; + rel1 { + relative: 0.0 0.0; + offset: -80 -80; + } + rel2 { + relative: 1.0 1.0; + offset: 79 79; + } + } + description { + state: "disabled" 0.0; + inherit: "default" 0.0; + visible : 0; + } + } part { name: "indicator"; mouse_events: 0; @@ -27,6 +71,11 @@ group { normal: "e17_gadman_indicator.png"; } } + description { + state: "disabled" 0.0; + inherit: "default" 0.0; + visible: 0; + } } part { name: "overlay"; @@ -556,6 +605,7 @@ group { part { name: "h1"; mouse_events: 1; + clip_to: "hclip"; description { state: "default" 0.0; align: 1.0 0.5; @@ -614,6 +664,7 @@ group { part { name: "h2"; mouse_events: 1; + clip_to: "hclip"; description { state: "default" 0.0; align: 0.0 0.5; @@ -672,6 +723,7 @@ group { part { name: "v1"; mouse_events: 1; + clip_to: "vclip"; description { state: "default" 0.0; align: 0.5 1.0; @@ -730,6 +782,7 @@ group { part { name: "v2"; mouse_events: 1; + clip_to: "vclip"; description { state: "default" 0.0; align: 0.5 0.0; @@ -787,6 +840,60 @@ group { } } programs { + program { + name: "api_hsize_on"; + signal: "hsize"; + source: "on"; + action: STATE_SET "default" 0.0; + target: "hclip"; + } + program { + name: "api_hsize_off"; + signal: "hsize"; + source: "off"; + action: STATE_SET "disabled" 0.0; + target: "hclip"; + } + program { + name: "api_vsize_on"; + signal: "vsize"; + source: "on"; + action: STATE_SET "default" 0.0; + target: "vclip"; + } + program { + name: "api_vsize_off"; + signal: "vsize"; + source: "off"; + action: STATE_SET "disabled" 0.0; + target: "vclip"; + } + program { + name: "api_move_on"; + signal: "move"; + source: "on"; + action: STATE_SET "default" 0.0; + target: "indicator"; + } + program { + name: "api_move_off"; + signal: "move"; + source: "off"; + action: STATE_SET "disabled" 0.0; + target: "indicator"; + } +/* + program { + name: "api_active"; + signal: "active"; + source: ""; + } + program { + name: "api_inactive"; + signal: "inactive"; + source: ""; + } +*/ program { name: "mv_down"; signal: "mouse,down,1"; diff --git a/src/bin/e_gadman.c b/src/bin/e_gadman.c index 8c873264a..f3e25a0eb 100644 --- a/src/bin/e_gadman.c +++ b/src/bin/e_gadman.c @@ -3,9 +3,15 @@ */ #include "e.h" -/* FIXME: display resize handles ONLY if can be resizded in that dir */ -/* FIXME: display move indicator ONLY if it can be moved in either dir */ -/* FIXME: emit signal on mouse in/out to event object */ +/* FIXME: corner case if module is sized to full screen... cant stop edit or */ +/* re-enter edit mode (cant access root menu) */ + +/* FIXME: handle edge move/changes */ +/* FIXME: handle move resist */ +/* FIXME: handle resize resist */ +/* FIXME: handle drag from zone to zone */ +/* FIXME: handle save */ +/* FIXME: handle load */ /* local subsystem functions */ static void _e_gadman_free(E_Gadman *gm); @@ -15,6 +21,7 @@ static void _e_gadman_client_edit_end(E_Gadman_Client *gmc); static void _e_gadman_client_down_store(E_Gadman_Client *gmc); static int _e_gadman_client_is_being_modified(E_Gadman_Client *gmc); static void _e_gadman_client_geometry_to_align(E_Gadman_Client *gmc); +static void _e_gadman_client_aspect_enforce(E_Gadman_Client *gmc, double cx, double cy, int use_horiz); static void _e_gadman_client_geometry_apply(E_Gadman_Client *gmc); static void _e_gadman_cb_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event_info); @@ -42,10 +49,12 @@ static void _e_gadman_cb_menu_end(void *data, E_Menu *m); static void _e_gadman_cb_half_width(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_gadman_cb_full_width(void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_gadman_cb_auto_width(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_gadman_cb_center_horiz(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_gadman_cb_half_height(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_gadman_cb_full_height(void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_gadman_cb_auto_height(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_gadman_cb_center_vert(void *data, E_Menu *m, E_Menu_Item *mi); /* externally accessible functions */ @@ -72,29 +81,6 @@ e_gadman_new(E_Container *con) return gm; } -E_Gadman_Client * -e_gadman_client_new(E_Gadman *gm) -{ - E_Gadman_Client *gmc; - E_OBJECT_CHECK_RETURN(gm, NULL); - - gmc = E_OBJECT_ALLOC(E_Gadman_Client, _e_gadman_client_free); - if (!gmc) return NULL; - gmc->gadman = gm; - gmc->policy = E_GADMAN_POLICY_ANYWHERE | E_GADMAN_POLICY_HSIZE | E_GADMAN_POLICY_VSIZE | E_GADMAN_POLICY_HMOVE | E_GADMAN_POLICY_VMOVE; - gmc->zone = e_zone_current_get(gm->container); - gmc->minw = 1; - gmc->minh = 1; - gmc->maxw = 0; - gmc->maxh = 0; - gmc->ax = 0.0; - gmc->ay = 1.0; - gmc->mina = 0.0; - gmc->maxa = 9999999.0; - gm->clients = evas_list_append(gm->clients, gmc); - return gmc; -} - void e_gadman_mode_set(E_Gadman *gm, E_Gadman_Mode mode) { @@ -122,6 +108,30 @@ e_gadman_mode_get(E_Gadman *gm) return gm->mode; } +E_Gadman_Client * +e_gadman_client_new(E_Gadman *gm) +{ + E_Gadman_Client *gmc; + E_OBJECT_CHECK_RETURN(gm, NULL); + + gmc = E_OBJECT_ALLOC(E_Gadman_Client, _e_gadman_client_free); + if (!gmc) return NULL; + gmc->gadman = gm; + gmc->policy = E_GADMAN_POLICY_ANYWHERE | E_GADMAN_POLICY_HSIZE | E_GADMAN_POLICY_VSIZE | E_GADMAN_POLICY_HMOVE | E_GADMAN_POLICY_VMOVE; + gmc->zone = e_zone_current_get(gm->container); + gmc->edge = E_GADMAN_EDGE_BOTTOM; + gmc->minw = 1; + gmc->minh = 1; + gmc->maxw = 0; + gmc->maxh = 0; + gmc->ax = 0.0; + gmc->ay = 1.0; + gmc->mina = 0.0; + gmc->maxa = 9999999.0; + gm->clients = evas_list_append(gm->clients, gmc); + return gmc; +} + void e_gadman_client_save(E_Gadman_Client *gmc) { @@ -129,6 +139,13 @@ e_gadman_client_save(E_Gadman_Client *gmc) /* save all values */ } +void +e_gadman_edge_set(E_Gadman_Client *gmc, E_Gadman_Edge edge) +{ + E_OBJECT_CHECK(gmc); + gmc->edge = edge; +} + void e_gadman_client_load(E_Gadman_Client *gmc) { @@ -192,6 +209,14 @@ e_gadman_client_aspect_set(E_Gadman_Client *gmc, double mina, double maxa) gmc->maxa = maxa; } +void +e_gadman_client_auto_size_set(E_Gadman_Client *gmc, Evas_Coord autow, Evas_Coord autoh) +{ + E_OBJECT_CHECK(gmc); + gmc->autow = autow; + gmc->autoh = autoh; +} + void e_gadman_client_geometry_get(E_Gadman_Client *gmc, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h) { @@ -223,6 +248,18 @@ e_gadman_client_menu_new(E_Gadman_Client *gmc) if (gmc->policy & E_GADMAN_POLICY_HSIZE) { + if (gmc->autow > 0) + { + mi = e_menu_item_new(m); + e_menu_item_label_set(mi, "Automatic Width"); + e_menu_item_check_set(mi, 1); + e_menu_item_toggle_set(mi, gmc->use_autow); + e_menu_item_icon_edje_set(mi, e_path_find(path_icons, "default.eet"), + "auto_width"); + e_menu_item_callback_set(mi, _e_gadman_cb_auto_width, gmc); + mi = e_menu_item_new(m); + e_menu_item_separator_set(mi, 1); + } mi = e_menu_item_new(m); e_menu_item_label_set(mi, "Half Screen Width"); e_menu_item_icon_edje_set(mi, e_path_find(path_icons, "default.eet"), @@ -242,12 +279,28 @@ e_gadman_client_menu_new(E_Gadman_Client *gmc) "center_horiz"); e_menu_item_callback_set(mi, _e_gadman_cb_center_horiz, gmc); } - - mi = e_menu_item_new(m); - e_menu_item_separator_set(mi, 1); - + if (((gmc->policy & E_GADMAN_POLICY_HSIZE) || + (gmc->policy & E_GADMAN_POLICY_HMOVE)) && + ((gmc->policy & E_GADMAN_POLICY_VSIZE) || + (gmc->policy & E_GADMAN_POLICY_VMOVE))) + { + mi = e_menu_item_new(m); + e_menu_item_separator_set(mi, 1); + } if (gmc->policy & E_GADMAN_POLICY_VSIZE) { + if (gmc->autoh > 0) + { + mi = e_menu_item_new(m); + e_menu_item_label_set(mi, "Automatic Height"); + e_menu_item_check_set(mi, 1); + e_menu_item_toggle_set(mi, gmc->use_autoh); + e_menu_item_icon_edje_set(mi, e_path_find(path_icons, "default.eet"), + "auto_eight"); + e_menu_item_callback_set(mi, _e_gadman_cb_auto_height, gmc); + mi = e_menu_item_new(m); + e_menu_item_separator_set(mi, 1); + } mi = e_menu_item_new(m); e_menu_item_label_set(mi, "Half Screen Height"); e_menu_item_icon_edje_set(mi, e_path_find(path_icons, "default.eet"), @@ -340,6 +393,20 @@ _e_gadman_client_edit_begin(E_Gadman_Client *gmc) evas_object_event_callback_add(gmc->event_object, EVAS_CALLBACK_MOUSE_UP, _e_gadman_cb_mouse_up, gmc); evas_object_event_callback_add(gmc->event_object, EVAS_CALLBACK_MOUSE_IN, _e_gadman_cb_mouse_in, gmc); evas_object_event_callback_add(gmc->event_object, EVAS_CALLBACK_MOUSE_OUT, _e_gadman_cb_mouse_out, gmc); + + if (gmc->policy & E_GADMAN_POLICY_HSIZE) + edje_object_signal_emit(gmc->control_object, "hsize", "on"); + else + edje_object_signal_emit(gmc->control_object, "hsize", "off"); + if (gmc->policy & E_GADMAN_POLICY_VSIZE) + edje_object_signal_emit(gmc->control_object, "vsize", "on"); + else + edje_object_signal_emit(gmc->control_object, "vsize", "off"); + if (gmc->policy & (E_GADMAN_POLICY_HMOVE | E_GADMAN_POLICY_VMOVE)) + edje_object_signal_emit(gmc->control_object, "move", "on"); + else + edje_object_signal_emit(gmc->control_object, "move", "off"); + evas_object_show(gmc->event_object); evas_object_show(gmc->control_object); } @@ -386,6 +453,44 @@ _e_gadman_client_geometry_to_align(E_Gadman_Client *gmc) gmc->ay = 0.0; } +static void +_e_gadman_client_aspect_enforce(E_Gadman_Client *gmc, double cx, double cy, int use_horiz) +{ + Evas_Coord neww, newh; + double aspect; + int change = 0; + + if (gmc->h > 0) + aspect = (double)gmc->w / (double) gmc->h; + else + aspect = 0.0; + neww = gmc->w; + newh = gmc->h; + if (aspect > gmc->maxa) + { + if (use_horiz) + newh = gmc->w / gmc->maxa; + else + neww = gmc->h * gmc->mina; + change = 1; + } + else if (aspect < gmc->mina) + { + if (use_horiz) + newh = gmc->w / gmc->maxa; + else + neww = gmc->h * gmc->mina; + change = 1; + } + if (change) + { + gmc->x = gmc->x + ((gmc->w - neww) * cx); + gmc->y = gmc->y + ((gmc->h - newh) * cy); + gmc->w = neww; + gmc->h = newh; + } +} + static void _e_gadman_client_geometry_apply(E_Gadman_Client *gmc) { @@ -404,7 +509,7 @@ _e_gadman_cb_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event_in gmc = data; ev = event_info; if (_e_gadman_client_is_being_modified(gmc)) return; - /* FIXME: how do we preent this if you donthave a right mouse button */ + /* FIXME: how do we prevent this if you don't have a right mouse button */ /* maybe make this menu available in he modules menu? */ if (ev->button == 3) { @@ -441,6 +546,7 @@ _e_gadman_cb_mouse_in(void *data, Evas *evas, Evas_Object *obj, void *event_info gmc = data; ev = event_info; if (_e_gadman_client_is_being_modified(gmc)) return; + edje_object_signal_emit(gmc->control_object, "active", ""); } static void @@ -452,6 +558,7 @@ _e_gadman_cb_mouse_out(void *data, Evas *evas, Evas_Object *obj, void *event_inf gmc = data; ev = event_info; if (_e_gadman_client_is_being_modified(gmc)) return; + edje_object_signal_emit(gmc->control_object, "inactive", ""); } static void @@ -485,8 +592,14 @@ _e_gadman_cb_signal_move_go(void *data, Evas_Object *obj, const char *emission, gmc = data; if (!gmc->moving) return; evas_pointer_canvas_xy_get(gmc->gadman->container->bg_evas, &x, &y); - gmc->x = gmc->down_store_x + (x - gmc->down_x); - gmc->y = gmc->down_store_y + (y - gmc->down_y); + if (gmc->policy & E_GADMAN_POLICY_HMOVE) + gmc->x = gmc->down_store_x + (x - gmc->down_x); + else + gmc->x = gmc->down_store_x; + if (gmc->policy & E_GADMAN_POLICY_VMOVE) + gmc->y = gmc->down_store_y + (y - gmc->down_y); + else + gmc->y = gmc->down_store_y; gmc->w = gmc->down_store_w; gmc->h = gmc->down_store_h; if (gmc->x < gmc->zone->x) @@ -497,8 +610,6 @@ _e_gadman_cb_signal_move_go(void *data, Evas_Object *obj, const char *emission, gmc->y = gmc->zone->y; else if ((gmc->y + gmc->h) > (gmc->zone->y + gmc->zone->h)) gmc->y = gmc->zone->y + gmc->zone->h - gmc->h; - /* FIXME: move resist */ - /* FIXME: detect move from zone to zone */ _e_gadman_client_geometry_apply(gmc); } @@ -510,6 +621,7 @@ _e_gadman_cb_signal_resize_left_start(void *data, Evas_Object *obj, const char * gmc = data; if (_e_gadman_client_is_being_modified(gmc)) return; _e_gadman_client_down_store(gmc); + gmc->autow = 0; gmc->resizing_l = 1; } @@ -532,6 +644,7 @@ _e_gadman_cb_signal_resize_left_go(void *data, Evas_Object *obj, const char *emi gmc = data; if (!gmc->resizing_l) return; + if (!(gmc->policy & E_GADMAN_POLICY_HSIZE)) return; evas_pointer_canvas_xy_get(gmc->gadman->container->bg_evas, &x, &y); gmc->x = gmc->down_store_x + (x - gmc->down_x); gmc->y = gmc->down_store_y; @@ -564,6 +677,7 @@ _e_gadman_cb_signal_resize_left_go(void *data, Evas_Object *obj, const char *emi gmc->w = gmc->maxw; } } + _e_gadman_client_aspect_enforce(gmc, 1.0, 0.5, 1); _e_gadman_client_geometry_apply(gmc); } @@ -575,6 +689,7 @@ _e_gadman_cb_signal_resize_right_start(void *data, Evas_Object *obj, const char gmc = data; if (_e_gadman_client_is_being_modified(gmc)) return; _e_gadman_client_down_store(gmc); + gmc->autow = 0; gmc->resizing_r = 1; } @@ -597,6 +712,7 @@ _e_gadman_cb_signal_resize_right_go(void *data, Evas_Object *obj, const char *em gmc = data; if (!gmc->resizing_r) return; + if (!(gmc->policy & E_GADMAN_POLICY_HSIZE)) return; evas_pointer_canvas_xy_get(gmc->gadman->container->bg_evas, &x, &y); gmc->x = gmc->down_store_x; gmc->y = gmc->down_store_y; @@ -625,6 +741,7 @@ _e_gadman_cb_signal_resize_right_go(void *data, Evas_Object *obj, const char *em gmc->w = gmc->maxw; } } + _e_gadman_client_aspect_enforce(gmc, 0.0, 0.5, 1); _e_gadman_client_geometry_apply(gmc); } @@ -636,6 +753,7 @@ _e_gadman_cb_signal_resize_up_start(void *data, Evas_Object *obj, const char *em gmc = data; if (_e_gadman_client_is_being_modified(gmc)) return; _e_gadman_client_down_store(gmc); + gmc->autoh = 0; gmc->resizing_u = 1; } @@ -658,6 +776,7 @@ _e_gadman_cb_signal_resize_up_go(void *data, Evas_Object *obj, const char *emiss gmc = data; if (!gmc->resizing_u) return; + if (!(gmc->policy & E_GADMAN_POLICY_VSIZE)) return; evas_pointer_canvas_xy_get(gmc->gadman->container->bg_evas, &x, &y); gmc->x = gmc->down_store_x; gmc->y = gmc->down_store_y + (y - gmc->down_y); @@ -690,6 +809,7 @@ _e_gadman_cb_signal_resize_up_go(void *data, Evas_Object *obj, const char *emiss gmc->h = gmc->maxh; } } + _e_gadman_client_aspect_enforce(gmc, 0.5, 1.0, 0); _e_gadman_client_geometry_apply(gmc); } @@ -701,6 +821,7 @@ _e_gadman_cb_signal_resize_down_start(void *data, Evas_Object *obj, const char * gmc = data; if (_e_gadman_client_is_being_modified(gmc)) return; _e_gadman_client_down_store(gmc); + gmc->autoh = 0; gmc->resizing_d = 1; } @@ -723,6 +844,7 @@ _e_gadman_cb_signal_resize_down_go(void *data, Evas_Object *obj, const char *emi gmc = data; if (!gmc->resizing_d) return; + if (!(gmc->policy & E_GADMAN_POLICY_VSIZE)) return; evas_pointer_canvas_xy_get(gmc->gadman->container->bg_evas, &x, &y); gmc->x = gmc->down_store_x; gmc->y = gmc->down_store_y; @@ -751,6 +873,7 @@ _e_gadman_cb_signal_resize_down_go(void *data, Evas_Object *obj, const char *emi gmc->h = gmc->maxh; } } + _e_gadman_client_aspect_enforce(gmc, 0.5, 0.0, 0); _e_gadman_client_geometry_apply(gmc); } @@ -776,6 +899,8 @@ _e_gadman_cb_half_width(void *data, E_Menu *m, E_Menu_Item *mi) { if (gmc->w > gmc->maxw) gmc->w = gmc->maxw; } + gmc->autow = 0; + _e_gadman_client_aspect_enforce(gmc, 0.0, 0.5, 1); _e_gadman_client_geometry_apply(gmc); _e_gadman_client_geometry_to_align(gmc); e_gadman_client_save(gmc); @@ -794,6 +919,30 @@ _e_gadman_cb_full_width(void *data, E_Menu *m, E_Menu_Item *mi) if (gmc->w > gmc->maxw) gmc->w = gmc->maxw; } gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) / 2); + gmc->autow = 0; + _e_gadman_client_aspect_enforce(gmc, 0.0, 0.5, 1); + _e_gadman_client_geometry_apply(gmc); + _e_gadman_client_geometry_to_align(gmc); + e_gadman_client_save(gmc); +} + +static void +_e_gadman_cb_auto_width(void *data, E_Menu *m, E_Menu_Item *mi) +{ + E_Gadman_Client *gmc; + + gmc = data; + if (e_menu_item_toggle_get(mi)) + { + gmc->autow = 1; + gmc->w = gmc->autow; + if (gmc->w > gmc->zone->w) + gmc->w = gmc->zone->w; + if ((gmc->x + gmc->w) > (gmc->zone->x + gmc->zone->w)) + gmc->x = (gmc->zone->x + gmc->zone->w) - gmc->w; + } + else + gmc->autow = 0; _e_gadman_client_geometry_apply(gmc); _e_gadman_client_geometry_to_align(gmc); e_gadman_client_save(gmc); @@ -823,7 +972,8 @@ _e_gadman_cb_half_height(void *data, E_Menu *m, E_Menu_Item *mi) { if (gmc->h > gmc->maxh) gmc->h = gmc->maxh; } - gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) / 2); + gmc->autoh = 0; + _e_gadman_client_aspect_enforce(gmc, 0.5, 0.0, 0); _e_gadman_client_geometry_apply(gmc); _e_gadman_client_geometry_to_align(gmc); e_gadman_client_save(gmc); @@ -842,11 +992,36 @@ _e_gadman_cb_full_height(void *data, E_Menu *m, E_Menu_Item *mi) if (gmc->h > gmc->maxh) gmc->h = gmc->maxh; } gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) / 2); + gmc->autoh = 0; + _e_gadman_client_aspect_enforce(gmc, 0.5, 0.0, 0); _e_gadman_client_geometry_apply(gmc); _e_gadman_client_geometry_to_align(gmc); e_gadman_client_save(gmc); } +static void +_e_gadman_cb_auto_height(void *data, E_Menu *m, E_Menu_Item *mi) +{ + E_Gadman_Client *gmc; + + gmc = data; + if (e_menu_item_toggle_get(mi)) + { + gmc->autoh = 1; + gmc->h = gmc->autoh; + if (gmc->h > gmc->zone->h) + gmc->h = gmc->zone->h; + if ((gmc->y + gmc->h) > (gmc->zone->y + gmc->zone->h)) + gmc->y = (gmc->zone->y + gmc->zone->h) - gmc->h; + } + else + gmc->autoh = 0; + _e_gadman_client_geometry_apply(gmc); + _e_gadman_client_geometry_to_align(gmc); + e_gadman_client_save(gmc); +} + + static void _e_gadman_cb_center_vert(void *data, E_Menu *m, E_Menu_Item *mi) { diff --git a/src/bin/e_gadman.h b/src/bin/e_gadman.h index 63b3acb4c..5eac993d7 100644 --- a/src/bin/e_gadman.h +++ b/src/bin/e_gadman.h @@ -5,10 +5,6 @@ typedef enum _E_Gadman_Policy /* type */ E_GADMAN_POLICY_ANYWHERE = 0, E_GADMAN_POLICY_EDGES = 1, - E_GADMAN_POLICY_LEFT_EDGE = 2, - E_GADMAN_POLICY_RIGHT_EDGE = 3, - E_GADMAN_POLICY_TOP_EDGE = 4, - E_GADMAN_POLICY_BOTTOM_EDGE = 5, /* extra flags */ E_GADMAN_POLICY_FIXED_ZONE = 1 << 8, E_GADMAN_POLICY_HSIZE = 1 << 9, @@ -20,9 +16,19 @@ typedef enum _E_Gadman_Policy typedef enum _E_Gadman_Change { E_GADMAN_CHANGE_MOVE, - E_GADMAN_CHANGE_RESIZE + E_GADMAN_CHANGE_RESIZE, + E_GADMAN_CHANGE_EDGE, + E_GADMAN_CHANGE_ZONE } E_Gadman_Change; +typedef enum _E_Gadman_Edge +{ + E_GADMAN_EDGE_LEFT, + E_GADMAN_EDGE_RIGHT, + E_GADMAN_EDGE_TOP, + E_GADMAN_EDGE_BOTTOM +} E_Gadman_Edge; + typedef enum _E_Gadman_Mode { E_GADMAN_MODE_NORMAL, @@ -59,12 +65,16 @@ struct _E_Gadman_Client unsigned char resizing_r : 1; unsigned char resizing_u : 1; unsigned char resizing_d : 1; + E_Gadman_Edge edge; char *domain; E_Zone *zone; int instance; E_Gadman_Policy policy; Evas_Coord x, y, w, h; Evas_Coord minw, minh, maxw, maxh; + unsigned char use_autow : 1; + unsigned char use_autoh : 1; + Evas_Coord autow, autoh; double ax, ay; double mina, maxa; void (*func) (void *data, E_Gadman_Client *gmc, E_Gadman_Change change); @@ -73,11 +83,12 @@ struct _E_Gadman_Client EAPI int e_gadman_init(void); EAPI int e_gadman_shutdown(void); +EAPI E_Gadman *e_gadman_new(E_Container *con); EAPI void e_gadman_mode_set(E_Gadman *gm, E_Gadman_Mode mode); EAPI E_Gadman_Mode e_gadman_mode_get(E_Gadman *gm); -EAPI E_Gadman *e_gadman_new(E_Container *con); EAPI E_Gadman_Client *e_gadman_client_new(E_Gadman *gm); EAPI void e_gadman_client_save(E_Gadman_Client *gmc); +EAPI void e_gadman_edge_set(E_Gadman_Client *gmc, E_Gadman_Edge edge); EAPI void e_gadman_client_load(E_Gadman_Client *gmc); EAPI void e_gadman_client_domain_set(E_Gadman_Client *gmc, char *domain, int instance); EAPI void e_gadman_client_zone_set(E_Gadman_Client *gmc, E_Zone *zone); @@ -86,6 +97,7 @@ EAPI void e_gadman_client_min_size_set(E_Gadman_Client *gmc, Evas_Co EAPI void e_gadman_client_max_size_set(E_Gadman_Client *gmc, Evas_Coord maxw, Evas_Coord maxh); EAPI void e_gadman_client_align_set(E_Gadman_Client *gmc, double xalign, double yalign); EAPI void e_gadman_client_aspect_set(E_Gadman_Client *gmc, double mina, double maxa); +EAPI void e_gadman_client_auto_size_set(E_Gadman_Client *gmc, Evas_Coord autow, Evas_Coord autoh); EAPI void e_gadman_client_geometry_get(E_Gadman_Client *gmc, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h); EAPI void e_gadman_client_change_func_set(E_Gadman_Client *gmc, void (*func) (void *data, E_Gadman_Client *gmc, E_Gadman_Change change), void *data); EAPI E_Menu *e_gadman_client_menu_new(E_Gadman_Client *gmc); diff --git a/src/bin/e_main.c b/src/bin/e_main.c index eec78fac4..d91f6c4ee 100644 --- a/src/bin/e_main.c +++ b/src/bin/e_main.c @@ -544,6 +544,8 @@ _e_main_screens_init(void) gmc->w = 150; gmc->h = 150; e_gadman_client_min_size_set(gmc, 20, 20); + e_gadman_client_auto_size_set(gmc, 200, 50); + e_gadman_client_aspect_set(gmc, 4.0, 4.0); } } free(roots);