|
|
|
@ -1,557 +1 @@ |
|
|
|
|
#include "e.h" |
|
|
|
|
|
|
|
|
|
static void e_icon_in_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y); |
|
|
|
|
static void e_icon_out_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y); |
|
|
|
|
static void e_icon_down_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y); |
|
|
|
|
static void e_icon_up_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y); |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
e_icon_in_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y) |
|
|
|
|
{ |
|
|
|
|
E_Icon *icon; |
|
|
|
|
|
|
|
|
|
icon = _data; |
|
|
|
|
icon->current.state.hilited = 1; |
|
|
|
|
icon->changed = 1; |
|
|
|
|
icon->view->changed = 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
e_icon_out_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y) |
|
|
|
|
{ |
|
|
|
|
E_Icon *icon; |
|
|
|
|
|
|
|
|
|
icon = _data; |
|
|
|
|
icon->current.state.hilited = 0; |
|
|
|
|
icon->changed = 1; |
|
|
|
|
icon->view->changed = 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
e_icon_down_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y) |
|
|
|
|
{ |
|
|
|
|
E_Icon *icon; |
|
|
|
|
Ev_Mouse_Down *ev; |
|
|
|
|
Eevent *event; |
|
|
|
|
|
|
|
|
|
event = e_view_get_current_event(); |
|
|
|
|
ev = event->event; |
|
|
|
|
icon = _data; |
|
|
|
|
if (ev->triple_click) |
|
|
|
|
{ |
|
|
|
|
printf("triple\n"); |
|
|
|
|
} |
|
|
|
|
else if (ev->double_click) |
|
|
|
|
{ |
|
|
|
|
printf("double\n"); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
printf("up\n"); |
|
|
|
|
} |
|
|
|
|
if (icon->current.state.selected) |
|
|
|
|
icon->current.state.selected = 0; |
|
|
|
|
else |
|
|
|
|
icon->current.state.selected = 1; |
|
|
|
|
icon->current.state.clicked = 1; |
|
|
|
|
icon->changed = 1; |
|
|
|
|
icon->view->changed = 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
e_icon_up_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y) |
|
|
|
|
{ |
|
|
|
|
E_Icon *icon; |
|
|
|
|
Ev_Mouse_Up *ev; |
|
|
|
|
Eevent *event; |
|
|
|
|
|
|
|
|
|
event = e_view_get_current_event(); |
|
|
|
|
ev = event->event;
|
|
|
|
|
icon = _data; |
|
|
|
|
icon->current.state.clicked = 0; |
|
|
|
|
icon->changed = 1; |
|
|
|
|
icon->view->changed = 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
e_icon_free(E_Icon *icon) |
|
|
|
|
{ |
|
|
|
|
IF_FREE(icon->file); |
|
|
|
|
IF_FREE(icon->info.icon.normal); |
|
|
|
|
IF_FREE(icon->info.icon.selected); |
|
|
|
|
IF_FREE(icon->info.icon.clicked); |
|
|
|
|
IF_FREE(icon->info.link); |
|
|
|
|
IF_FREE(icon->info.mime.base); |
|
|
|
|
IF_FREE(icon->info.mime.type); |
|
|
|
|
IF_FREE(icon->previous.icon); |
|
|
|
|
FREE(icon); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
E_Icon * |
|
|
|
|
e_icon_new(void) |
|
|
|
|
{ |
|
|
|
|
E_Icon *icon; |
|
|
|
|
|
|
|
|
|
icon = NEW(E_Icon, 1); |
|
|
|
|
ZERO(icon, E_Icon, 1); |
|
|
|
|
OBJ_INIT(icon, e_icon_free); |
|
|
|
|
icon->info.icon.normal = strdup(PACKAGE_DATA_DIR"/data/icons/unknown/default.db:/icon/normal");
|
|
|
|
|
icon->previous.state.clicked = -1; |
|
|
|
|
return icon; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
e_icon_apply_mime(E_Icon *icon, char *mime) |
|
|
|
|
{ |
|
|
|
|
char m1[4096], m2[4096], *p; |
|
|
|
|
|
|
|
|
|
strcpy(m1, mime); |
|
|
|
|
p = strchr(m1, '/'); |
|
|
|
|
if (p) *p = 0; |
|
|
|
|
p = strchr(mime, '/'); |
|
|
|
|
if (p) strcpy(m2, &(p[1])); |
|
|
|
|
else m2[0] = 0; |
|
|
|
|
IF_FREE(icon->info.mime.base); |
|
|
|
|
IF_FREE(icon->info.mime.type); |
|
|
|
|
icon->info.mime.base = strdup(m1); |
|
|
|
|
icon->info.mime.type = strdup(m2); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
e_icon_get_icon(E_Icon *icon) |
|
|
|
|
{ |
|
|
|
|
char m1[4096], m2[4096], *p; |
|
|
|
|
int found = 0; |
|
|
|
|
|
|
|
|
|
/* errr.. hmm do something useful if its a symlink */ |
|
|
|
|
if (icon->info.link) |
|
|
|
|
{ |
|
|
|
|
} |
|
|
|
|
sprintf(m1, "%s/data/icons/%s/%s.db",PACKAGE_DATA_DIR, |
|
|
|
|
icon->info.mime.base,
|
|
|
|
|
icon->info.mime.type); |
|
|
|
|
if (e_file_exists(m1)) found = 1; |
|
|
|
|
if (!found) |
|
|
|
|
{ |
|
|
|
|
strcpy(m2, icon->info.mime.type); |
|
|
|
|
p = strrchr(m2, '/'); |
|
|
|
|
while (p) |
|
|
|
|
{ |
|
|
|
|
p[0] = 0; |
|
|
|
|
sprintf(m1, "%s/data/icons/%s/%s.db",PACKAGE_DATA_DIR, |
|
|
|
|
icon->info.mime.base, m2); |
|
|
|
|
if (e_file_exists(m1)) |
|
|
|
|
{ |
|
|
|
|
found = 1; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
p = strrchr(m2, '/'); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (!found) |
|
|
|
|
{ |
|
|
|
|
sprintf(m1, "%s/data/icons/%s/default.db",PACKAGE_DATA_DIR, |
|
|
|
|
icon->info.mime.base); |
|
|
|
|
if (e_file_exists(m1)) found = 1; |
|
|
|
|
} |
|
|
|
|
if (!found) |
|
|
|
|
{ |
|
|
|
|
sprintf(m1, "%s/data/icons/unknown/unknown.db",PACKAGE_DATA_DIR); |
|
|
|
|
if (e_file_exists(m1)) found = 1; |
|
|
|
|
} |
|
|
|
|
if (!found) |
|
|
|
|
{ |
|
|
|
|
sprintf(m1, "%s/data/icons/unknown/default.db",PACKAGE_DATA_DIR); |
|
|
|
|
found = 1; |
|
|
|
|
} |
|
|
|
|
printf("%s/%s: %s\n", icon->info.mime.base, icon->info.mime.type, m1); |
|
|
|
|
IF_FREE(icon->info.icon.normal); |
|
|
|
|
IF_FREE(icon->info.icon.selected); |
|
|
|
|
IF_FREE(icon->info.icon.clicked); |
|
|
|
|
sprintf(m2, "%s:/icon/normal", m1); |
|
|
|
|
icon->info.icon.normal = strdup(m2); |
|
|
|
|
sprintf(m2, "%s:/icon/selected", m1); |
|
|
|
|
icon->info.icon.selected = strdup(m2); |
|
|
|
|
sprintf(m2, "%s:/icon/clicked", m1); |
|
|
|
|
icon->info.icon.clicked = strdup(m2); |
|
|
|
|
icon->changed = 1; |
|
|
|
|
icon->view->changed = 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
e_icon_place_grid(E_Icon *icon) |
|
|
|
|
{ |
|
|
|
|
int x, y; |
|
|
|
|
|
|
|
|
|
if (icon->view->options.arrange.grid.dir == 0) /* h */ |
|
|
|
|
{ |
|
|
|
|
int gw; |
|
|
|
|
int iw, ih; |
|
|
|
|
|
|
|
|
|
iw = icon->current.w +
|
|
|
|
|
icon->view->spacing.icon.left + |
|
|
|
|
icon->view->spacing.icon.right + |
|
|
|
|
icon->view->spacing.spacing.left + |
|
|
|
|
icon->view->spacing.spacing.right; |
|
|
|
|
ih = icon->current.h +
|
|
|
|
|
icon->view->spacing.icon.top + |
|
|
|
|
icon->view->spacing.icon.bottom + |
|
|
|
|
icon->view->spacing.spacing.top + |
|
|
|
|
icon->view->spacing.spacing.bottom; |
|
|
|
|
if (icon->view->options.arrange.grid.w > 0) |
|
|
|
|
gw = (icon->view->size.w -
|
|
|
|
|
icon->view->spacing.inset.left -
|
|
|
|
|
icon->view->spacing.inset.right) /
|
|
|
|
|
icon->view->options.arrange.grid.w; |
|
|
|
|
else gw = 1; |
|
|
|
|
y = icon->view->options.arrange.grid.next_pos / gw; |
|
|
|
|
x = icon->view->options.arrange.grid.next_pos - (y * gw); |
|
|
|
|
x *= icon->view->options.arrange.grid.w; |
|
|
|
|
y *= icon->view->options.arrange.grid.h; |
|
|
|
|
x += (icon->view->options.arrange.grid.w -
|
|
|
|
|
icon->view->spacing.icon.left - |
|
|
|
|
icon->view->spacing.icon.right - |
|
|
|
|
icon->view->spacing.spacing.left - |
|
|
|
|
icon->view->spacing.spacing.right -
|
|
|
|
|
icon->current.w) / 2; |
|
|
|
|
y += (icon->view->options.arrange.grid.h -
|
|
|
|
|
icon->view->spacing.icon.top - |
|
|
|
|
icon->view->spacing.icon.bottom - |
|
|
|
|
icon->view->spacing.spacing.top - |
|
|
|
|
icon->view->spacing.spacing.bottom -
|
|
|
|
|
icon->current.h); |
|
|
|
|
x -= icon->view->viewport.x; |
|
|
|
|
y -= icon->view->viewport.y; |
|
|
|
|
x += icon->view->spacing.inset.left; |
|
|
|
|
y += icon->view->spacing.inset.top; |
|
|
|
|
x += icon->view->spacing.icon.left + icon->view->spacing.spacing.left; |
|
|
|
|
y += icon->view->spacing.icon.top + icon->view->spacing.spacing.top; |
|
|
|
|
e_icon_set_xy(icon, x, y); |
|
|
|
|
icon->view->options.arrange.grid.next_pos++; |
|
|
|
|
} |
|
|
|
|
else /* v */ |
|
|
|
|
{ |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
e_icon_pre_show(E_Icon *icon) |
|
|
|
|
{ |
|
|
|
|
int x, y; |
|
|
|
|
|
|
|
|
|
if (icon->info.ready) return; |
|
|
|
|
e_icon_update(icon); |
|
|
|
|
icon->info.ready = 1; |
|
|
|
|
if (icon->info.coord.have) |
|
|
|
|
{ |
|
|
|
|
x = icon->info.coord.x; |
|
|
|
|
y = icon->info.coord.y; |
|
|
|
|
e_icon_set_xy(icon, x, y); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
if (icon->view->options.arrange.method == 0) /* grid */ |
|
|
|
|
{ |
|
|
|
|
int iw, ih; |
|
|
|
|
|
|
|
|
|
iw = icon->current.w +
|
|
|
|
|
icon->view->spacing.icon.left + |
|
|
|
|
icon->view->spacing.icon.right + |
|
|
|
|
icon->view->spacing.spacing.left + |
|
|
|
|
icon->view->spacing.spacing.right; |
|
|
|
|
ih = icon->current.h +
|
|
|
|
|
icon->view->spacing.icon.top + |
|
|
|
|
icon->view->spacing.icon.bottom + |
|
|
|
|
icon->view->spacing.spacing.top + |
|
|
|
|
icon->view->spacing.spacing.bottom; |
|
|
|
|
/* need to redo whole grid... ??? */ |
|
|
|
|
if ((iw > icon->view->options.arrange.grid.w) || |
|
|
|
|
(ih > icon->view->options.arrange.grid.h)) |
|
|
|
|
{
|
|
|
|
|
Evas_List l; |
|
|
|
|
|
|
|
|
|
icon->view->options.arrange.grid.next_pos = 0; |
|
|
|
|
icon->view->options.arrange.grid.w = iw; |
|
|
|
|
icon->view->options.arrange.grid.h = ih; |
|
|
|
|
for (l = icon->view->icons; l; l = l->next) |
|
|
|
|
{ |
|
|
|
|
E_Icon *ic; |
|
|
|
|
|
|
|
|
|
ic = l->data; |
|
|
|
|
if (ic->info.ready) |
|
|
|
|
e_icon_place_grid(ic); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
e_icon_place_grid(icon); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
e_icon_show(icon);
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
e_icon_calulcate_geometry(E_Icon *icon) |
|
|
|
|
{ |
|
|
|
|
int iw, ih, tw, th; |
|
|
|
|
double dtw, dth; |
|
|
|
|
|
|
|
|
|
if (!icon->view) return; |
|
|
|
|
dtw = 0; dth = 0; iw = 0; ih = 0; |
|
|
|
|
evas_get_geometry(icon->view->evas, icon->obj.filename, NULL, NULL, &dtw, &dth); |
|
|
|
|
tw = (int)dtw;
|
|
|
|
|
th = (int)dth; |
|
|
|
|
evas_get_image_size(icon->view->evas, icon->obj.icon, &iw, &ih); |
|
|
|
|
if (tw < iw) |
|
|
|
|
{ |
|
|
|
|
icon->current.ix = icon->current.x; |
|
|
|
|
icon->current.iy = icon->current.y; |
|
|
|
|
icon->current.tx = icon->current.x + ((iw - tw) / 2); |
|
|
|
|
icon->current.ty = icon->current.y + icon->view->spacing.icon.top + icon->view->spacing.icon.bottom + ih; |
|
|
|
|
icon->current.w = iw; |
|
|
|
|
icon->current.h = ih + th; |
|
|
|
|
icon->current.iw = iw; |
|
|
|
|
icon->current.ih = ih; |
|
|
|
|
icon->current.tw = tw; |
|
|
|
|
icon->current.th = th; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
icon->current.ix = icon->current.x + ((tw - iw) / 2); |
|
|
|
|
icon->current.iy = icon->current.y; |
|
|
|
|
icon->current.tx = icon->current.x; |
|
|
|
|
icon->current.ty = icon->current.y + icon->view->spacing.icon.top + icon->view->spacing.icon.bottom + ih; |
|
|
|
|
icon->current.w = tw; |
|
|
|
|
icon->current.h = ih + th; |
|
|
|
|
icon->current.iw = iw; |
|
|
|
|
icon->current.ih = ih; |
|
|
|
|
icon->current.tw = tw; |
|
|
|
|
icon->current.th = th; |
|
|
|
|
} |
|
|
|
|
if (INTERSECTS(0, 0, icon->view->size.w, icon->view->size.h, |
|
|
|
|
icon->current.x, icon->current.y, icon->current.w, icon->current.h)) |
|
|
|
|
icon->current.viewable = 1; |
|
|
|
|
else |
|
|
|
|
icon->current.viewable = 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
e_icon_realize(E_Icon *icon) |
|
|
|
|
{ |
|
|
|
|
icon->obj.sel1 = evas_add_rectangle(icon->view->evas); |
|
|
|
|
icon->obj.sel2 = evas_add_rectangle(icon->view->evas); |
|
|
|
|
evas_set_color(icon->view->evas, icon->obj.sel1, 0, 0, 0, 0); |
|
|
|
|
evas_set_color(icon->view->evas, icon->obj.sel2, 0, 0, 0, 0); |
|
|
|
|
evas_set_layer(icon->view->evas, icon->obj.sel1, 11); |
|
|
|
|
evas_set_layer(icon->view->evas, icon->obj.sel2, 11); |
|
|
|
|
evas_callback_add(icon->view->evas, icon->obj.sel1, CALLBACK_MOUSE_IN, e_icon_in_cb, icon); |
|
|
|
|
evas_callback_add(icon->view->evas, icon->obj.sel1, CALLBACK_MOUSE_OUT, e_icon_out_cb, icon); |
|
|
|
|
evas_callback_add(icon->view->evas, icon->obj.sel1, CALLBACK_MOUSE_DOWN, e_icon_down_cb, icon); |
|
|
|
|
evas_callback_add(icon->view->evas, icon->obj.sel1, CALLBACK_MOUSE_UP, e_icon_up_cb, icon); |
|
|
|
|
evas_callback_add(icon->view->evas, icon->obj.sel2, CALLBACK_MOUSE_IN, e_icon_in_cb, icon); |
|
|
|
|
evas_callback_add(icon->view->evas, icon->obj.sel2, CALLBACK_MOUSE_OUT, e_icon_out_cb, icon); |
|
|
|
|
evas_callback_add(icon->view->evas, icon->obj.sel2, CALLBACK_MOUSE_DOWN, e_icon_down_cb, icon); |
|
|
|
|
evas_callback_add(icon->view->evas, icon->obj.sel2, CALLBACK_MOUSE_UP, e_icon_up_cb, icon); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
e_icon_unrealize(E_Icon *icon) |
|
|
|
|
{ |
|
|
|
|
if (icon->obj.icon) evas_del_object(icon->view->evas, icon->obj.icon); |
|
|
|
|
if (icon->obj.filename) evas_del_object(icon->view->evas, icon->obj.filename); |
|
|
|
|
if (icon->obj.sel1) evas_del_object(icon->view->evas, icon->obj.sel1); |
|
|
|
|
if (icon->obj.sel2) evas_del_object(icon->view->evas, icon->obj.sel2);
|
|
|
|
|
icon->obj.icon = NULL; |
|
|
|
|
icon->obj.filename = NULL; |
|
|
|
|
icon->obj.sel1 = NULL; |
|
|
|
|
icon->obj.sel2 = NULL; |
|
|
|
|
if (icon->view) icon->view->changed = 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
e_icon_set_icon(E_Icon *icon, char *file) |
|
|
|
|
{ |
|
|
|
|
IF_FREE(icon->current.icon); |
|
|
|
|
icon->current.icon = strdup(file); |
|
|
|
|
icon->changed = 1; |
|
|
|
|
if (icon->view) icon->view->changed = 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
e_icon_show(E_Icon *icon) |
|
|
|
|
{ |
|
|
|
|
if (!icon->current.visible) |
|
|
|
|
{ |
|
|
|
|
icon->current.visible = 1; |
|
|
|
|
icon->changed = 1; |
|
|
|
|
if (icon->view) icon->view->changed = 1; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
e_icon_hide(E_Icon *icon) |
|
|
|
|
{ |
|
|
|
|
if (icon->current.visible) |
|
|
|
|
{ |
|
|
|
|
icon->current.visible = 0; |
|
|
|
|
icon->changed = 1; |
|
|
|
|
if (icon->view) icon->view->changed = 1; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
e_icon_set_xy(E_Icon *icon, int x, int y) |
|
|
|
|
{ |
|
|
|
|
icon->current.x = x; |
|
|
|
|
icon->current.y = y; |
|
|
|
|
icon->changed = 1; |
|
|
|
|
if (icon->view) icon->view->changed = 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
e_icon_get_xy(E_Icon *icon, int *x, int *y) |
|
|
|
|
{ |
|
|
|
|
if (x) *x = icon->current.x; |
|
|
|
|
if (y) *y = icon->current.y; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
e_icon_set_filename(E_Icon *icon, char *file) |
|
|
|
|
{ |
|
|
|
|
IF_FREE(icon->file); |
|
|
|
|
icon->file = strdup(file); |
|
|
|
|
icon->changed = 1; |
|
|
|
|
if (icon->view) icon->view->changed = 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
e_icon_update(E_Icon *icon) |
|
|
|
|
{ |
|
|
|
|
int obj_new = 0; |
|
|
|
|
|
|
|
|
|
if (!icon->changed) return; |
|
|
|
|
if (icon->current.state.clicked) |
|
|
|
|
{ |
|
|
|
|
if (icon->info.icon.clicked) |
|
|
|
|
icon->current.icon = icon->info.icon.clicked; |
|
|
|
|
else if (icon->info.icon.selected) |
|
|
|
|
icon->current.icon = icon->info.icon.selected; |
|
|
|
|
else
|
|
|
|
|
icon->current.icon = icon->info.icon.normal; |
|
|
|
|
} |
|
|
|
|
else if (icon->current.state.selected) |
|
|
|
|
{ |
|
|
|
|
if (icon->info.icon.selected) |
|
|
|
|
icon->current.icon = icon->info.icon.selected; |
|
|
|
|
else
|
|
|
|
|
icon->current.icon = icon->info.icon.normal; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
icon->current.icon = icon->info.icon.normal;
|
|
|
|
|
} |
|
|
|
|
if ((!icon->current.state.selected) && (icon->obj.sel_icon)) |
|
|
|
|
{ |
|
|
|
|
ebits_hide(icon->obj.sel_icon); |
|
|
|
|
ebits_free(icon->obj.sel_icon); |
|
|
|
|
icon->obj.sel_icon = NULL; |
|
|
|
|
} |
|
|
|
|
if (!icon->obj.filename) |
|
|
|
|
{ |
|
|
|
|
icon->obj.filename = evas_add_text(icon->view->evas, "borzoib", 8, icon->file); |
|
|
|
|
evas_set_layer(icon->view->evas, icon->obj.filename, 10); |
|
|
|
|
icon->previous.x = icon->current.x - 1; |
|
|
|
|
icon->previous.visible = icon->current.visible - 1; |
|
|
|
|
obj_new = 1; |
|
|
|
|
} |
|
|
|
|
if (((icon->previous.icon) && (icon->current.icon) &&
|
|
|
|
|
(strcmp(icon->current.icon, icon->previous.icon))) || |
|
|
|
|
((!icon->previous.icon) && (icon->current.icon))) |
|
|
|
|
{ |
|
|
|
|
int iw, ih; |
|
|
|
|
|
|
|
|
|
if (!icon->obj.icon) |
|
|
|
|
{ |
|
|
|
|
icon->obj.icon = evas_add_image_from_file(icon->view->evas, icon->current.icon); |
|
|
|
|
evas_set_layer(icon->view->evas, icon->obj.icon, 10); |
|
|
|
|
obj_new = 1; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
evas_set_image_file(icon->view->evas, icon->obj.icon, icon->current.icon); |
|
|
|
|
evas_get_image_size(icon->view->evas, icon->obj.icon, &iw, &ih); |
|
|
|
|
evas_set_image_fill(icon->view->evas, icon->obj.icon, 0, 0, iw, ih); |
|
|
|
|
evas_resize(icon->view->evas, icon->obj.icon, iw, ih); |
|
|
|
|
icon->previous.x = icon->current.x - 1;
|
|
|
|
|
} |
|
|
|
|
if ((!icon->obj.sel_icon) && (icon->current.state.selected)) |
|
|
|
|
{ |
|
|
|
|
icon->obj.sel_icon = ebits_load(PACKAGE_DATA_DIR"/data/config/appearance/default/selections/file.bits.db"); |
|
|
|
|
if (icon->obj.sel_icon) |
|
|
|
|
{ |
|
|
|
|
ebits_add_to_evas(icon->obj.sel_icon, icon->view->evas);
|
|
|
|
|
ebits_set_layer(icon->obj.sel_icon, 9); |
|
|
|
|
ebits_set_color_class(icon->obj.sel_icon, "Selected BG", 100, 200, 255, 255); |
|
|
|
|
obj_new = 1; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (obj_new) |
|
|
|
|
{ |
|
|
|
|
if (icon->shelf) |
|
|
|
|
{ |
|
|
|
|
E_Shelf *sh; |
|
|
|
|
|
|
|
|
|
sh = icon->shelf; |
|
|
|
|
e_shelf_del_icon(sh, icon); |
|
|
|
|
e_shelf_add_icon(sh, icon); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if ((icon->previous.x != icon->current.x) || |
|
|
|
|
(icon->previous.y != icon->current.y) || |
|
|
|
|
(icon->current.visible != icon->previous.visible) || |
|
|
|
|
(obj_new)) |
|
|
|
|
{ |
|
|
|
|
e_icon_calulcate_geometry(icon); |
|
|
|
|
if (icon->current.viewable) |
|
|
|
|
{ |
|
|
|
|
evas_move(icon->view->evas, icon->obj.icon, icon->current.ix, icon->current.iy); |
|
|
|
|
evas_move(icon->view->evas, icon->obj.filename, icon->current.tx, icon->current.ty); |
|
|
|
|
evas_move(icon->view->evas, icon->obj.sel1, icon->current.ix, icon->current.iy); |
|
|
|
|
evas_resize(icon->view->evas, icon->obj.sel1, icon->current.iw, icon->current.ih); |
|
|
|
|
evas_move(icon->view->evas, icon->obj.sel2, icon->current.tx, icon->current.ty); |
|
|
|
|
evas_resize(icon->view->evas, icon->obj.sel2, icon->current.tw, icon->current.th); |
|
|
|
|
evas_set_color(icon->view->evas, icon->obj.filename, 0, 0, 0, 255); |
|
|
|
|
if (icon->obj.sel_icon) |
|
|
|
|
{ |
|
|
|
|
int pl, pr, pt, pb; |
|
|
|
|
|
|
|
|
|
pl = pr = pt = pb = 0; |
|
|
|
|
ebits_get_insets(icon->obj.sel_icon, &pl, &pr, &pt, &pb); |
|
|
|
|
ebits_move(icon->obj.sel_icon, icon->current.ix - pl, icon->current.iy - pt); |
|
|
|
|
ebits_resize(icon->obj.sel_icon, icon->current.iw + pl + pr, icon->current.ih + pt + pb); |
|
|
|
|
} |
|
|
|
|
}
|
|
|
|
|
} |
|
|
|
|
if ((icon->current.visible != icon->previous.visible) || (obj_new) || |
|
|
|
|
(icon->current.viewable != icon->previous.viewable)) |
|
|
|
|
{ |
|
|
|
|
if ((icon->current.visible) && (icon->current.viewable)) |
|
|
|
|
{ |
|
|
|
|
evas_show(icon->view->evas, icon->obj.icon); |
|
|
|
|
evas_show(icon->view->evas, icon->obj.filename); |
|
|
|
|
evas_show(icon->view->evas, icon->obj.sel1); |
|
|
|
|
evas_show(icon->view->evas, icon->obj.sel2); |
|
|
|
|
if (icon->obj.sel_icon) ebits_show(icon->obj.sel_icon); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
evas_hide(icon->view->evas, icon->obj.icon); |
|
|
|
|
evas_hide(icon->view->evas, icon->obj.filename); |
|
|
|
|
evas_hide(icon->view->evas, icon->obj.sel1); |
|
|
|
|
evas_hide(icon->view->evas, icon->obj.sel2); |
|
|
|
|
if (icon->obj.sel_icon) ebits_hide(icon->obj.sel_icon); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
IF_FREE(icon->previous.icon); |
|
|
|
|
icon->previous = icon->current; |
|
|
|
|
icon->previous.icon = strdup(icon->current.icon); |
|
|
|
|
icon->changed = 0; |
|
|
|
|
} |
|
|
|
|