forked from e16/e16
1
0
Fork 0

No longer use convert (ImageMagick) to create scaled icons in menu generation,

but scale internally according to configuration setting.


SVN revision: 19857
This commit is contained in:
Kim Woelders 2006-01-16 12:45:56 +00:00
parent 3c8d1c0c7e
commit 5014886a1f
5 changed files with 47 additions and 51 deletions

View File

@ -310,31 +310,14 @@ sub ProcessOldStyle {
}
}
# Create scaled 18x18 pixel icon
sub ScaleIcon {
local $f = shift;
local $g = $f;
return $f unless $DoConvert;
$g =~ s/^.*\///;
$g =~ s/\..*$//;
$g = "$EdirIcons/$g.png";
system("convert -geometry 16x16 $f $g");
return $g;
}
# Find that $#@! thing
sub FindIcon {
local $f = shift;
local $x = "x";
return $f if (! $f);
if (-f $f) {
$i = ScaleIcon($f);
return $i;
}
return $f if (-f $f);
foreach $d (split(':', $IconDirs)) {
$i = "$d/$f";
@ -343,31 +326,22 @@ sub FindIcon {
$i = "$i.png";
next unless -f $i;
}
$i = ScaleIcon($i);
return $i;
}
foreach $d (split(':', $IconDirs2)) {
next unless (-d "$d");
foreach $t (split(':', $Themes)) {
foreach $u (split(':', "apps:filesystems:actions:devices")) {
$i = "$d/$t/16x16/$u/$f";
$i = "$i.png" unless ($f =~ /\.png$/);
print "Testing $i\n" if $dbg >= 2;
next unless -f $i;
return $i;
}
}
}
foreach $d (split(':', $IconDirs2)) {
foreach $t (split(':', $Themes)) {
foreach $u (split(':', "apps:filesystems:actions:devices")) {
$i = "$d/$t/48x48/$u/$f";
$i = "$i.png" unless ($f =~ /\.png$/);
print "Testing $i\n" if $dbg >= 2;
next unless -f $i;
$i = ScaleIcon($i);
return $i;
next unless (-d "$d/$t");
foreach $s (split(':', "16:24:32:48")) {
next unless (-d "$d/$t/$s$x$s");
foreach $u (split(':', "apps:filesystems:actions:devices")) {
next unless (-d "$d/$t/$s$x$s/$u");
$i = "$d/$t/$s$x$s/$u/$f";
$i = "$i.png" unless ($f =~ /\.png$/);
print "Testing $i\n" if $dbg >= 2;
return $i if (-f $i);
}
}
}
}
@ -391,7 +365,6 @@ sub MakeEppsMenu {
foreach $e (@el) {
$e =~ s/\.epplet$//;
$i = "$EdirRoot/epplet_icons/$e.icon";
$i = ScaleIcon("$i") if -f "$i";
print FD "\"$e\" \"$i\" exec \"$d/$e.epplet\"\n";
}
}

View File

@ -369,6 +369,7 @@ typedef struct
char onscreen;
char warp;
char show_icons;
int icon_size;
int opacity;
struct
{

View File

@ -291,6 +291,8 @@ FillFlatFileMenu(Menu * m, const char *name, const char *file)
return;
}
MenuSetIconSize(m, 0); /* Scale to default */
count = 0;
while (fgets(s, 4096, f))
{

View File

@ -94,6 +94,7 @@ struct _menu
MenuItem **items;
Window win;
PmapMask pmm;
int icon_size;
char internal; /* Don't destroy when reloading */
char dynamic; /* May be emptied on close */
char shown;
@ -447,6 +448,14 @@ MenuSetTitle(Menu * m, const char *title)
_EFDUP(m->title, title);
}
void
MenuSetIconSize(Menu * m, int size)
{
if (size > 48)
size = 48;
m->icon_size = size;
}
void
MenuSetData(Menu * m, char *data)
{
@ -512,6 +521,7 @@ MenuCreate(const char *name, const char *title, Menu * parent, MenuStyle * ms)
MenuSetName(m, name);
MenuSetTitle(m, title);
MenuSetStyle(m, ms);
m->icon_size = -1; /* Use image size */
return m;
}
@ -667,19 +677,27 @@ MenuRealize(Menu * m)
im = ImageclassGetImage(m->items[i]->icon_iclass, 0, 0, 0);
if (im)
{
imlib_context_set_image(im);
w = h = 0;
if (m->icon_size > 0)
w = h = m->icon_size;
else if (m->icon_size == 0)
w = h = Conf.menus.icon_size;
if (w <= 0 || h <= 0)
{
imlib_context_set_image(im);
w = imlib_image_get_width();
h = imlib_image_get_height();
imlib_free_image();
}
m->items[i]->icon_w = w;
m->items[i]->icon_h = h;
m->items[i]->icon_win =
ECreateWindow(m->items[i]->win, 0, 0,
imlib_image_get_width(),
imlib_image_get_height(), 0);
ECreateWindow(m->items[i]->win, 0, 0, w, h, 0);
EMapWindow(m->items[i]->icon_win);
m->items[i]->icon_w = imlib_image_get_width();
m->items[i]->icon_h = imlib_image_get_height();
if (imlib_image_get_height() > maxh)
maxh = imlib_image_get_height();
if (imlib_image_get_width() > maxx2)
maxx2 = imlib_image_get_width();
imlib_free_image();
if (h > maxh)
maxh = h;
if (w > maxx2)
maxx2 = w;
}
else
m->items[i]->icon_iclass = NULL;
@ -2096,6 +2114,7 @@ static const CfgItem MenusCfgItems[] = {
CFG_ITEM_BOOL(Conf.menus, onscreen, 1),
CFG_ITEM_BOOL(Conf.menus, warp, 1),
CFG_ITEM_BOOL(Conf.menus, show_icons, 1),
CFG_ITEM_INT(Conf.menus, icon_size, 16),
CFG_ITEM_INT(Conf.menus, opacity, 220),
CFG_ITEM_INT(Conf.menus, key.left, XK_Left),
CFG_ITEM_INT(Conf.menus, key.right, XK_Right),

View File

@ -49,6 +49,7 @@ void MenuSetName(Menu * m, const char *name);
void MenuSetAlias(Menu * m, const char *alias);
void MenuSetStyle(Menu * m, MenuStyle * ms);
void MenuSetTitle(Menu * m, const char *title);
void MenuSetIconSize(Menu * m, int size);
void MenuSetData(Menu * m, char *data);
void MenuSetLoader(Menu * m, MenuLoader * loader);
void MenuSetTimestamp(Menu * m, time_t t);