39 public static Gtk.IconTheme
theme;
41 public static Gee.ArrayList<
string>
search_paths =
new Gee.ArrayList<
string>();
61 public const string SHIELD_LOW =
"bastionguard-backup-shield-low";
62 public const string SHIELD_MED =
"bastionguard-backup-shield-med";
63 public const string SHIELD_HIGH =
"bastionguard-backup-shield-high";
65 public static void init(
string[] args,
string app_name){
71 string[] extra_paths = {
72 "/usr/share/%s/images-dark".printf(app_name),
73 "/usr/share/%s/images-light".printf(app_name),
74 "/usr/local/share/%s/images-dark".printf(app_name),
75 "/usr/local/share/%s/images-light".printf(app_name),
76 "/usr/share/%s/images".printf(app_name),
77 "/usr/local/share/%s/images".printf(app_name),
79 "/usr/local/share/pixmaps",
80 GLib.Path.build_filename(GLib.Environment.get_user_data_dir(), app_name,
"images-dark"),
81 GLib.Path.build_filename(GLib.Environment.get_user_data_dir(), app_name,
"images-light"),
82 GLib.Path.build_filename(GLib.Environment.get_user_data_dir(), app_name,
"images"),
83 GLib.Path.build_filename(GLib.Environment.get_current_dir(),
"src",
"share", app_name,
"images-dark"),
84 GLib.Path.build_filename(GLib.Environment.get_current_dir(),
"src",
"share", app_name,
"images-light"),
85 GLib.Path.build_filename(GLib.Environment.get_current_dir(),
"src",
"share", app_name,
"images"),
86 GLib.Path.build_filename(GLib.Environment.get_current_dir(),
"src",
"share",
"pixmaps"),
87 GLib.Path.build_filename(GLib.Environment.get_current_dir(),
"icons")
89 foreach (var path
in extra_paths) {
92 log_debug(
"found images directory: %s".printf(path));
103 var display = Gdk.Display.get_default();
104 if (display ==
null) {
return; }
105 theme = Gtk.IconTheme.get_for_display(display);
107 theme.add_search_path(path);
111 public static Gdk.Pixbuf?
lookup(
string icon_name,
int icon_size,
bool symbolic =
false,
bool use_hardcoded =
false,
int scale = 1){
113 string theme_folder =
use_dark ?
"images-dark" :
"images-light";
114 string[] resource_candidates = {
115 "images/" + theme_folder +
"/" + icon_name +
".svg",
116 "images/" + theme_folder +
"/" + icon_name +
".png",
117 "images/" + icon_name +
".png",
118 "images/" + icon_name +
".svg",
119 "images/" + icon_name,
120 "icons/" + icon_name +
".png",
121 "pixmaps/" + icon_name +
".png",
122 "icons/hicolor/128x128/apps/" + icon_name +
".png",
123 "icons/hicolor/96x96/apps/" + icon_name +
".png",
124 "icons/hicolor/64x64/apps/" + icon_name +
".png",
125 "icons/hicolor/48x48/apps/" + icon_name +
".png",
126 "icons/hicolor/32x32/apps/" + icon_name +
".png",
127 "icons/hicolor/24x24/apps/" + icon_name +
".png",
128 "icons/hicolor/22x22/apps/" + icon_name +
".png",
129 "icons/hicolor/16x16/apps/" + icon_name +
".png"
132 Gdk.Pixbuf? pixbuf =
null;
133 if (icon_name.length == 0){
return null; }
135 foreach (var rel
in resource_candidates) {
139 if (pixbuf !=
null)
return pixbuf;
147 if (resolved !=
null) {
149 if (pixbuf !=
null)
return pixbuf;
153 foreach(
string ext
in new string[] {
".svg",
".png",
".jpg",
".gif"}){
154 string img_file =
path_combine(search_path, icon_name + ext);
157 if (pixbuf !=
null){
return pixbuf; }
166 public static Gdk.Pixbuf?
lookup_gicon(GLib.Icon gicon,
int icon_size){
171public static Gtk.Image
lookup_image(
string icon_name,
int icon_size,
bool symbolic =
false,
bool use_hardcoded =
false){
173 var image =
new Gtk.Image();
174 image.set_pixel_size(icon_size);
175 if (icon_name.length == 0){
180 Gdk.Pixbuf? pix =
lookup(icon_name, icon_size, symbolic, use_hardcoded, image.get_scale_factor());
182 image.set_from_pixbuf(pix);
184 image.set_from_icon_name(icon_name);
189 public static Gtk.Button
button_from_icon(
string icon_name,
int icon_size,
string? tooltip =
null){
190 var btn =
new Gtk.Button();
192 if (tooltip !=
null) btn.tooltip_text = tooltip;
196 public static Cairo.Surface?
lookup_surface(
string icon_name,
int icon_size,
int scale = 1,
bool symbolic =
false,
bool use_hardcoded =
false){
200 public static Gdk.Pixbuf?
add_emblem (Gdk.Pixbuf pixbuf,
string icon_name,
int emblem_size,
bool emblem_symbolic, Gtk.CornerType corner_type) {
202 if (icon_name.length == 0){
return pixbuf; }
204 Gdk.Pixbuf? emblem =
null;
206 var SMALL_EMBLEM_COLOR = Gdk.RGBA();
207 SMALL_EMBLEM_COLOR.parse(
"#000000");
208 SMALL_EMBLEM_COLOR.alpha = 1.0f;
210 var EMBLEM_PADDING = 1;
212 emblem =
lookup(icon_name, emblem_size, emblem_symbolic,
true);
213 if (emblem ==
null) {
220 var offset_x = EMBLEM_PADDING;
222 if ((corner_type == Gtk.CornerType.BOTTOM_RIGHT) || (corner_type == Gtk.CornerType.TOP_RIGHT)){
223 offset_x = pixbuf.width - emblem.width - EMBLEM_PADDING ;
226 var offset_y = EMBLEM_PADDING;
228 if ((corner_type == Gtk.CornerType.BOTTOM_LEFT) || (corner_type == Gtk.CornerType.BOTTOM_RIGHT)){
229 offset_y = pixbuf.height - emblem.height - EMBLEM_PADDING ;
232 var emblemed = pixbuf.copy();
234 emblem.composite(emblemed,
236 emblem_size, emblem_size,
239 Gdk.InterpType.BILINEAR, 255);
244 public static Gdk.Pixbuf?
add_overlay(Gdk.Pixbuf pixbuf_base, Gdk.Pixbuf pixbuf_overlay) {
246 int offset_x = (pixbuf_base.width - pixbuf_overlay.width) / 2 ;
248 var offset_y = (pixbuf_base.height - pixbuf_overlay.height) / 2 ;
250 var emblemed = pixbuf_base.copy();
252 pixbuf_overlay.composite(emblemed,
254 pixbuf_overlay.width, pixbuf_overlay.height,
257 Gdk.InterpType.BILINEAR, 255);
262 public static Gdk.Pixbuf?
resize_icon(Gdk.Pixbuf pixbuf_image,
int icon_size) {
266 var pixbuf_empty =
new Gdk.Pixbuf(Gdk.Colorspace.RGB,
true, 8, icon_size, icon_size);
267 pixbuf_empty.fill(0x00000000);
271 var pixbuf_resized =
add_overlay(pixbuf_empty, pixbuf_image);
277 return pixbuf_resized;
282 var trans = pixbuf.copy();
283 trans.fill((uint32) 0xFFFFFF00);
287 int width = pixbuf.get_width();
288 int height = pixbuf.get_height();
289 pixbuf.composite(trans, 0, 0, width, height, 0, 0, 1.0, 1.0, Gdk.InterpType.BILINEAR, opacity);
296 Gdk.Pixbuf? pixbuf =
null;
299 Gdk.Pixbuf.get_file_info(file_path, out width, out height);
301 if ((width <= icon_size) && (height <= icon_size)){
304 pixbuf =
new Gdk.Pixbuf.from_file(file_path);
308 if (pixbuf !=
null){
return pixbuf; }
317 pixbuf =
new Gdk.Pixbuf.from_file_at_scale(file_path, icon_size, icon_size,
true);
321 if (pixbuf !=
null){
return pixbuf; }
const string ICON_HARDDRIVE
const string GENERIC_ICON_PDF
static Gdk.? Pixbuf lookup(string icon_name, int icon_size, bool symbolic=false, bool use_hardcoded=false, int scale=1)
static Gdk.? Pixbuf lookup_gicon(GLib.Icon gicon, int icon_size)
static Cairo.? Surface lookup_surface(string icon_name, int icon_size, int scale=1, bool symbolic=false, bool use_hardcoded=false)
const string GENERIC_ICON_DIRECTORY
const string GENERIC_ICON_VIDEO
const string GENERIC_ICON_FILE
static void init(string[] args, string app_name)
static Gdk.? Pixbuf load_pixbuf_from_file(string file_path, int icon_size)
const string GENERIC_ICON_ISO
static Gtk.IconTheme theme
static void refresh_icon_theme()
const int SHIELD_ICON_SIZE
const string GENERIC_ICON_IMAGE_MISSING
static Gdk.? Pixbuf add_transparency(Gdk.Pixbuf pixbuf, int opacity=130)
static Gdk.? Pixbuf add_overlay(Gdk.Pixbuf pixbuf_base, Gdk.Pixbuf pixbuf_overlay)
static Gdk.? Pixbuf resize_icon(Gdk.Pixbuf pixbuf_image, int icon_size)
static Gee.ArrayList< string > search_paths
static Gtk.Button button_from_icon(string icon_name, int icon_size, string? tooltip=null)
static Gtk.Image lookup_image(string icon_name, int icon_size, bool symbolic=false, bool use_hardcoded=false)
static Gdk.? Pixbuf add_emblem(Gdk.Pixbuf pixbuf, string icon_name, int emblem_size, bool emblem_symbolic, Gtk.CornerType corner_type)
const string GENERIC_ICON_ARCHIVE_FILE
const string GENERIC_ICON_IMAGE
static bool resource_exists(string rel)
static ? string resolve_icon_file(string icon_name)
static string resource_prefix()
bool file_exists(string file_path)
string path_combine(string path1, string path2)
bool dir_exists(string dir_path)
void log_debug(string message)