Blame setup/icon.py

Packit Service 1d8f1c
# vim:set et sts=4 sw=4:
Packit Service 1d8f1c
#
Packit Service 1d8f1c
# ibus - The Input Bus
Packit Service 1d8f1c
#
Packit Service 1d8f1c
# Copyright (c) 2007-2010 Peng Huang <shawn.p.huang@gmail.com>
Packit Service 1d8f1c
# Copyright (c) 2007-2010 Red Hat, Inc.
Packit Service 1d8f1c
#
Packit Service 1d8f1c
# This library is free software; you can redistribute it and/or
Packit Service 1d8f1c
# modify it under the terms of the GNU Lesser General Public
Packit Service 1d8f1c
# License as published by the Free Software Foundation; either
Packit Service 1d8f1c
# version 2.1 of the License, or (at your option) any later version.
Packit Service 1d8f1c
#
Packit Service 1d8f1c
# This library is distributed in the hope that it will be useful,
Packit Service 1d8f1c
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 1d8f1c
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 1d8f1c
# Lesser General Public License for more details.
Packit Service 1d8f1c
#
Packit Service 1d8f1c
# You should have received a copy of the GNU Lesser General Public
Packit Service 1d8f1c
# License along with this library; if not, write to the Free Software
Packit Service 1d8f1c
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
Packit Service 1d8f1c
# USA
Packit Service 1d8f1c
Packit Service 1d8f1c
__all__ = (
Packit Service 1d8f1c
    "load_icon"
Packit Service 1d8f1c
)
Packit Service 1d8f1c
Packit Service 1d8f1c
from gi.repository import Gdk
Packit Service 1d8f1c
from gi.repository import GdkPixbuf
Packit Service 1d8f1c
from gi.repository import Gtk
Packit Service 1d8f1c
from os import path
Packit Service 1d8f1c
Packit Service 1d8f1c
Packit Service 1d8f1c
icon_theme = Gtk.IconTheme.get_default()
Packit Service 1d8f1c
dir = path.dirname(__file__)
Packit Service 1d8f1c
icondir = path.join(dir, "..", "icons")
Packit Service 1d8f1c
icon_theme.prepend_search_path(icondir)
Packit Service 1d8f1c
Packit Service 1d8f1c
icon_cache = {}
Packit Service 1d8f1c
Packit Service 1d8f1c
# load_icon:
Packit Service 1d8f1c
# @icon_name_or_path: Can be a name or path but not stock id
Packit Service 1d8f1c
#     because gtk_icon_theme_load_icon() cannot fallback the stock id to
Packit Service 1d8f1c
#     a real file name against gtk_image_new_from_stock().
Packit Service 1d8f1c
# @size: #GtkIconSize
Packit Service 1d8f1c
def load_icon(icon_name_or_path, size):
Packit Service 1d8f1c
    if (icon_name_or_path, size) in icon_cache:
Packit Service 1d8f1c
        return icon_cache[(icon_name_or_path, size)]
Packit Service 1d8f1c
Packit Service 1d8f1c
    icon_size = Gtk.icon_size_lookup(size)
Packit Service 1d8f1c
    if icon_size[0]:
Packit Service 1d8f1c
        icon_size = icon_size[1]
Packit Service 1d8f1c
Packit Service 1d8f1c
    pixbuf = None
Packit Service 1d8f1c
    try:
Packit Service 1d8f1c
        pixbuf = GdkPixbuf.Pixbuf.new_from_file(icon_name_or_path)
Packit Service 1d8f1c
        w, h = pixbuf.get_width(), pixbuf.get_height()
Packit Service 1d8f1c
        rate = max(w, h) / float(icon_size)
Packit Service 1d8f1c
        w = int(w / rate)
Packit Service 1d8f1c
        h = int(h / rate)
Packit Service 1d8f1c
        pixbuf = pixbuf.scale_simple(w, h, GdkPixbuf.InterpType.BILINEAR)
Packit Service 1d8f1c
    except:
Packit Service 1d8f1c
        # import traceback
Packit Service 1d8f1c
        # traceback.print_exc()
Packit Service 1d8f1c
        pass
Packit Service 1d8f1c
    if pixbuf == None:
Packit Service 1d8f1c
        try:
Packit Service 1d8f1c
            theme = Gtk.IconTheme.get_default()
Packit Service 1d8f1c
            pixbuf = theme.load_icon(icon_name_or_path, icon_size, 0)
Packit Service 1d8f1c
        except:
Packit Service 1d8f1c
            # import traceback
Packit Service 1d8f1c
            # traceback.print_exc()
Packit Service 1d8f1c
            pass
Packit Service 1d8f1c
    if pixbuf == None:
Packit Service 1d8f1c
        try:
Packit Service 1d8f1c
            theme = Gtk.IconTheme.get_default()
Packit Service 1d8f1c
            pixbuf = theme.load_icon('ibus-engine', icon_size, 0)
Packit Service 1d8f1c
        except:
Packit Service 1d8f1c
            # import traceback
Packit Service 1d8f1c
            # traceback.print_exc()
Packit Service 1d8f1c
            pass
Packit Service 1d8f1c
    if pixbuf == None:
Packit Service 1d8f1c
        try:
Packit Service 1d8f1c
            theme = Gtk.IconTheme.get_default()
Packit Service 1d8f1c
            pixbuf = theme.load_icon('image-missing', icon_size, 0)
Packit Service 1d8f1c
        except:
Packit Service 1d8f1c
            # import traceback
Packit Service 1d8f1c
            # traceback.print_exc()
Packit Service 1d8f1c
            pass
Packit Service 1d8f1c
    icon_cache[(icon_name_or_path, size)] = pixbuf
Packit Service 1d8f1c
    return pixbuf