summaryrefslogtreecommitdiffstats
path: root/setup/icon.py
diff options
context:
space:
mode:
authorHuang Peng <shawn.p.huang@gmail.com>2009-02-05 10:39:56 +0800
committerHuang Peng <shawn.p.huang@gmail.com>2009-02-05 10:39:56 +0800
commitaedad1ea0a7fef604aa27f4b58433fd8f2ece29e (patch)
treeffcb531d8474bde18b90341bcd4eb639edd74525 /setup/icon.py
parent41ad46305a88637dd99f00a2d2a3f455505d357b (diff)
downloadibus-aedad1ea0a7fef604aa27f4b58433fd8f2ece29e.tar.gz
ibus-aedad1ea0a7fef604aa27f4b58433fd8f2ece29e.tar.xz
ibus-aedad1ea0a7fef604aa27f4b58433fd8f2ece29e.zip
re-implement ibus in c language.
Diffstat (limited to 'setup/icon.py')
-rw-r--r--setup/icon.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/setup/icon.py b/setup/icon.py
new file mode 100644
index 0000000..fedd2cf
--- /dev/null
+++ b/setup/icon.py
@@ -0,0 +1,60 @@
+# vim:set et sts=4 sw=4:
+#
+# ibus - The Input Bus
+#
+# Copyright (c) 2007-2008 Huang Peng <shawn.p.huang@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+# Boston, MA 02111-1307 USA
+
+__all__ = (
+ "load_icon"
+)
+
+import gtk
+from gtk import gdk
+from os import path
+
+
+icon_theme = gtk.icon_theme_get_default()
+dir = path.dirname(__file__)
+icondir = path.join(dir, "..", "icons")
+icon_theme.prepend_search_path(icondir)
+
+icon_cache = {}
+
+def load_icon(icon, size):
+ if (icon, size) in icon_cache:
+ return icon_cache[(icon, size)]
+
+ icon_size = gtk.icon_size_lookup(size)[0]
+ pixbuf = None
+ try:
+ pixbuf = gdk.pixbuf_new_from_file(icon)
+ w, h = pixbuf.get_width(), pixbuf.get_height()
+ rate = max(w, h) / float(icon_size)
+ w = int(w / rate)
+ h = int(h / rate)
+ pixbuf = pixbuf.scale_simple(w, h, gdk.INTERP_BILINEAR)
+ except:
+ pass
+ if pixbuf == None:
+ try:
+ theme = gtk.icon_theme_get_default()
+ pixbuf = theme.load_icon(icon, icon_size, 0)
+ except:
+ pass
+ icon_cache[(icon, size)] = pixbuf
+ return pixbuf