1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
/* appicon.vala
*
* Copyright (C) 2011 Matthias Klumpp
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Author:
* Matthias Klumpp <matthias@nlinux.org>
*/
using GLib;
using Gtk;
using Gdk;
using Listaller;
public class AppIcon {
private AppItem app;
private int iconSize;
public AppIcon (AppItem appID) {
app = appID;
iconSize = 48;
}
private Pixbuf get_default_icon () {
IconTheme itheme = IconTheme.get_default ();
Pixbuf? pix = null;
try {
pix = itheme.load_icon ("applications-other", iconSize,
IconLookupFlags.GENERIC_FALLBACK);
} catch (Error e) {
pix = null;
}
if (pix == null)
pix = new Pixbuf (Colorspace.RGB, true, 8, iconSize, iconSize);
return pix;
}
public Pixbuf get_pixbuf () {
Pixbuf pix;
string iconName = app.icon_name;
if (iconName == "")
return get_default_icon ();
if (iconName.has_prefix ("/")) {
// Return default icon if icon file does not exists
if (!FileUtils.test (iconName, FileTest.EXISTS))
return get_default_icon ();
// We need to load the icon from a file
try {
pix = new Gdk.Pixbuf.from_file (iconName);
} catch (Error e) {
warning (_("Unable to load icon %s! Message: %s").printf (iconName, e.message));
return get_default_icon ();
}
int dest_width = pix.width - (pix.height - iconSize);
pix = pix.scale_simple (dest_width, iconSize, InterpType.BILINEAR);
return pix;
}
// If we're here, we need to load an icon from stock
IconTheme itheme = IconTheme.get_default ();
try {
pix = itheme.load_icon (iconName, iconSize, IconLookupFlags.GENERIC_FALLBACK);
} catch (Error e) {
warning (_("Skipping icon for %s: %s").printf (app.full_name, e.message));
return get_default_icon ();
}
return pix;
}
}
|