Fix aspect.

SVN revision: 16807
This commit is contained in:
sebastid 2005-09-20 17:09:27 +00:00 committed by sebastid
parent d1afbbd30d
commit 1a135dc6d6
1 changed files with 97 additions and 11 deletions

View File

@ -7,6 +7,7 @@
/* TODO /* TODO
* which options should be in main menu, and which in face menu? * which options should be in main menu, and which in face menu?
* check if a new desk is in the current zone * check if a new desk is in the current zone
* check if padding changes on resize
*/ */
/* module private routines */ /* module private routines */
@ -94,6 +95,9 @@ static void _pager_menu_cb_speed_very_fast(void *data, E_Menu *m, E_Menu_
static void _pager_menu_cb_popup_enable(void *data, E_Menu *m, E_Menu_Item *mi); static void _pager_menu_cb_popup_enable(void *data, E_Menu *m, E_Menu_Item *mi);
static void _pager_menu_cb_aspect_keep_height(void *data, E_Menu *m, E_Menu_Item *mi);
static void _pager_menu_cb_aspect_keep_width(void *data, E_Menu *m, E_Menu_Item *mi);
static int _pager_count; static int _pager_count;
static E_Config_DD *_conf_edd; static E_Config_DD *_conf_edd;
@ -491,6 +495,14 @@ _pager_config_menu_new(Pager *pager)
mi = e_menu_item_new(pager->config_menu); mi = e_menu_item_new(pager->config_menu);
e_menu_item_label_set(mi, _("Popup Speed")); e_menu_item_label_set(mi, _("Popup Speed"));
e_menu_item_submenu_set(mi, pager->config_menu_speed); e_menu_item_submenu_set(mi, pager->config_menu_speed);
mi = e_menu_item_new(pager->config_menu);
e_menu_item_label_set(mi, _("Fix Aspect (Keep Height)"));
e_menu_item_callback_set(mi, _pager_menu_cb_aspect_keep_height, pager);
mi = e_menu_item_new(pager->config_menu);
e_menu_item_label_set(mi, _("Fix Aspect (Keep Width)"));
e_menu_item_callback_set(mi, _pager_menu_cb_aspect_keep_width, pager);
} }
static Pager_Face * static Pager_Face *
@ -529,6 +541,11 @@ _pager_face_new(Pager *pager, E_Zone *zone, Evas *evas)
face->inset.t = y; face->inset.t = y;
face->inset.b = 1000 - (y + h); face->inset.b = 1000 - (y + h);
face->desk_inset.l = -1;
face->desk_inset.r = -1;
face->desk_inset.t = -1;
face->desk_inset.b = -1;
face->drop_handler = e_drop_handler_add(face, face->drop_handler = e_drop_handler_add(face,
_pager_face_cb_enter, _pager_face_cb_move, _pager_face_cb_enter, _pager_face_cb_move,
_pager_face_cb_leave, _pager_face_cb_drop, _pager_face_cb_leave, _pager_face_cb_drop,
@ -625,6 +642,14 @@ _pager_face_menu_new(Pager_Face *face)
mi = e_menu_item_new(mn); mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, _("Desktop Speed")); e_menu_item_label_set(mi, _("Desktop Speed"));
e_menu_item_submenu_set(mi, face->pager->config_menu_speed); e_menu_item_submenu_set(mi, face->pager->config_menu_speed);
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, _("Fix Aspect (Keep Height)"));
e_menu_item_callback_set(mi, _pager_menu_cb_aspect_keep_height, face->pager);
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, _("Fix Aspect (Keep Width)"));
e_menu_item_callback_set(mi, _pager_menu_cb_aspect_keep_width, face->pager);
} }
static void static void
@ -708,6 +733,7 @@ _pager_desk_new(Pager_Face *face, E_Desk *desk, int xpos, int ypos)
Evas_Object *o; Evas_Object *o;
E_Border_List *bl; E_Border_List *bl;
E_Border *bd; E_Border *bd;
Evas_Coord x, y, w, h;
pd = E_NEW(Pager_Desk, 1); pd = E_NEW(Pager_Desk, 1);
if (!pd) return NULL; if (!pd) return NULL;
@ -726,7 +752,22 @@ _pager_desk_new(Pager_Face *face, E_Desk *desk, int xpos, int ypos)
e_table_pack(face->table_object, o, xpos, ypos, 1, 1); e_table_pack(face->table_object, o, xpos, ypos, 1, 1);
e_table_pack_options_set(o, 1, 1, 1, 1, 0.5, 0.5, 0, 0, -1, -1); e_table_pack_options_set(o, 1, 1, 1, 1, 0.5, 0.5, 0, 0, -1, -1);
evas_object_show(o); evas_object_show(o);
if ((face->desk_inset.l == -1) &&
(face->desk_inset.r == -1) &&
(face->desk_inset.t == -1) &&
(face->desk_inset.b == -1))
{
evas_object_resize(pd->desk_object, 1000, 1000);
edje_object_calc_force(pd->desk_object);
edje_object_part_geometry_get(pd->desk_object, "items", &x, &y, &w, &h);
face->desk_inset.l = x;
face->desk_inset.r = 1000 - (x + w);
face->desk_inset.t = y;
face->desk_inset.b = 1000 - (y + h);
}
o = evas_object_rectangle_add(face->evas); o = evas_object_rectangle_add(face->evas);
pd->event_object = o; pd->event_object = o;
evas_object_layer_set(o, 2); evas_object_layer_set(o, 2);
@ -748,7 +789,7 @@ _pager_desk_new(Pager_Face *face, E_Desk *desk, int xpos, int ypos)
e_layout_virtual_size_set(o, desk->zone->w, desk->zone->h); e_layout_virtual_size_set(o, desk->zone->w, desk->zone->h);
edje_object_part_swallow(pd->desk_object, "items", pd->layout_object); edje_object_part_swallow(pd->desk_object, "items", pd->layout_object);
evas_object_show(o); evas_object_show(o);
bl = e_container_border_list_first(desk->zone->container); bl = e_container_border_list_first(desk->zone->container);
while ((bd = e_container_border_list_next(bl))) while ((bd = e_container_border_list_next(bl)))
{ {
@ -2025,18 +2066,9 @@ _pager_face_cb_enter(void *data, const char *type, void *event_info)
{ {
E_Event_Dnd_Enter *ev; E_Event_Dnd_Enter *ev;
Pager_Face *face; Pager_Face *face;
int x, y;
double w, h;
ev = event_info; ev = event_info;
face = data; face = data;
/* FIXME, check if the pager module has border */
w = face->fw / (double) face->xnum;
h = face->fh / (double) face->ynum;
x = (ev->x - face->fx) / w;
y = (ev->y - face->fy) / h;
} }
static void static void
@ -2302,3 +2334,57 @@ _pager_menu_cb_popup_enable(void *data, E_Menu *m, E_Menu_Item *mi)
pager->conf->popup = e_menu_item_toggle_get(mi); pager->conf->popup = e_menu_item_toggle_get(mi);
e_config_save_queue(); e_config_save_queue();
} }
static void
_pager_menu_cb_aspect_keep_height(void *data, E_Menu *m, E_Menu_Item *mi)
{
Pager *pager;
Evas_List *l;
pager = data;
for (l = pager->faces; l; l = l->next)
{
Pager_Face *face;
int w, h;
face = l->data;
h = ((face->fh - (face->inset.t + face->inset.b)) / face->ynum) -
(face->desk_inset.t + face->desk_inset.b);
w = h * face->zone->w / (double)face->zone->h;
w += (face->desk_inset.l + face->desk_inset.r);
w *= face->xnum;
w += (face->inset.l + face->inset.r);
e_gadman_client_resize(face->gmc, w, face->fh);
}
}
static void
_pager_menu_cb_aspect_keep_width(void *data, E_Menu *m, E_Menu_Item *mi)
{
Pager *pager;
Evas_List *l;
pager = data;
for (l = pager->faces; l; l = l->next)
{
Pager_Face *face;
int w, h;
face = l->data;
w = ((face->fw - (face->inset.l + face->inset.r)) / face->xnum) -
(face->desk_inset.l + face->desk_inset.r);
h = w * face->zone->h / (double)face->zone->w;
h += (face->desk_inset.t + face->desk_inset.b);
h *= face->ynum;
h += (face->inset.t + face->inset.b);
e_gadman_client_resize(face->gmc, face->fw, h);
}
}