changeset 104:084e1c6de8ca

icon scaling feature has been implemented.
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Mon, 14 Jul 2008 02:27:57 +0900
parents 8de54d420328
children 9147ff70d2e2
files pidgin-twitter.c
diffstat 1 files changed, 44 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/pidgin-twitter.c	Mon Jul 14 00:17:18 2008 +0900
+++ b/pidgin-twitter.c	Mon Jul 14 02:27:57 2008 +0900
@@ -19,6 +19,7 @@
 #define PURPLE_PLUGINS 1
 
 #include "pidgin-twitter.h"
+#include <gdk-pixbuf/gdk-pixbuf.h>
 
 /* globals */
 static GRegex *regp[9];
@@ -1269,9 +1270,13 @@
     }
 
     /* insert icon actually */
-    if(purple_prefs_get_bool(OPT_SHOW_ICON))
-        gtk_imhtml_insert_image_at_iter(target_imhtml,
-                                        icon_id, &insertion_point);
+    if(purple_prefs_get_bool(OPT_SHOW_ICON)) {
+        PurpleStoredImage *img = purple_imgstore_find_by_id(icon_id);
+        const GdkPixbuf *pixbuf = purple_imgstore_get_data(img);
+        gtk_text_buffer_insert_pixbuf(target_buffer,
+                                      &insertion_point,
+                                      (GdkPixbuf *)pixbuf);
+    }
     gtk_text_buffer_delete_mark(target_buffer, requested_mark);
     requested_mark = NULL;
 }
@@ -1433,8 +1438,19 @@
         }
     }
 
-    icon_id = purple_imgstore_add_with_id(g_memdup(url_text, len), len,
-                                          user_name);
+    /* make pixbuf */
+    GdkPixbufLoader *loader = gdk_pixbuf_loader_new();
+    gdk_pixbuf_loader_write(loader, (guchar *)url_text, len, NULL);
+    gdk_pixbuf_loader_close(loader, NULL);
+    GdkPixbuf *src  = gdk_pixbuf_loader_get_pixbuf(loader);
+    GdkPixbuf *dest = gdk_pixbuf_scale_simple(src, 48, 48,
+                                              GDK_INTERP_HYPER);
+    gdk_pixbuf_unref (src);
+    icon_id =
+        purple_imgstore_add_with_id(dest,
+                                    gdk_pixbuf_get_rowstride(dest) *
+                                    gdk_pixbuf_get_height(dest),
+                                    user_name);
     if(!data) {
         twitter_debug("allocate icon_data (shouldn't be called)\n");
         data = g_new0(icon_data, 1);
@@ -1451,7 +1467,7 @@
     if(ensure_path_exists(dirname)) {
         gchar *filename = NULL;
         gchar *path = NULL;
-        FILE *fp = NULL;
+//        FILE *fp = NULL;
 
         switch(service) {
         case twitter_service:
@@ -1471,15 +1487,7 @@
         path = g_build_filename(dirname, filename, NULL);
         g_free(filename); filename = NULL;
 
-        fp = fopen(path, "wb");
-        g_free(path); path = NULL;
-
-        if(fp) {
-            int wrotelen;
-            wrotelen = fwrite(url_text, 1, len, fp);
-        }
-
-        fclose(fp); fp = NULL;
+        g_file_set_contents(path, url_text, len, NULL);
     }
 
     twitter_debug("Downloading %s's icon has been complete.(icon_id = %d)\n",
@@ -1561,7 +1569,20 @@
             g_error_free(err);
         }
 
-        data->icon_id = purple_imgstore_add_with_id(imgdata, len, path);
+        /* make pixbuf */
+        GdkPixbufLoader *loader = gdk_pixbuf_loader_new();
+        gdk_pixbuf_loader_write(loader, (guchar *)imgdata, len, NULL);
+        gdk_pixbuf_loader_close(loader, NULL);
+        GdkPixbuf *src  = gdk_pixbuf_loader_get_pixbuf(loader);
+        GdkPixbuf *dest = gdk_pixbuf_scale_simple(src, 48, 48,
+                                                  GDK_INTERP_HYPER);
+        gdk_pixbuf_unref (src);
+        data->icon_id =
+            purple_imgstore_add_with_id(dest,
+                                        gdk_pixbuf_get_rowstride(dest) *
+                                        gdk_pixbuf_get_height(dest),
+                                        user_name);
+
         g_free(filename);
         g_free(path);
 
@@ -1758,8 +1779,13 @@
     }
 
     /* if we have icon for this user, insert icon immediately */
-    if(purple_prefs_get_bool(OPT_SHOW_ICON))
-        gtk_imhtml_insert_image_at_iter(imhtml, icon_id, &insertion_point);
+    if(purple_prefs_get_bool(OPT_SHOW_ICON)) {
+        PurpleStoredImage *img = purple_imgstore_find_by_id(icon_id);
+        const GdkPixbuf *pixbuf = purple_imgstore_get_data(img);
+        gtk_text_buffer_insert_pixbuf(text_buffer,
+                                      &insertion_point,
+                                      (GdkPixbuf *)pixbuf);
+    }
     g_free(user_name); user_name = NULL;
 
     twitter_debug("reach end of function\n");