pidgin/gtkutils.c

branch
soc.2013.gobjectification.plugins
changeset 37133
832cd077145e
parent 37112
37fdcf3855d3
parent 35742
3585fead43a8
child 37134
07746c9a04bf
--- a/pidgin/gtkutils.c	Thu Apr 03 09:37:53 2014 +0530
+++ b/pidgin/gtkutils.c	Mon Apr 07 20:02:22 2014 +0530
@@ -58,7 +58,6 @@
 #include "gtkdialogs.h"
 #include "pidginstock.h"
 #include "gtkrequest.h"
-#include "gtkthemes.h"
 #include "gtkutils.h"
 #include "gtkwebview.h"
 #include "gtkwebviewtoolbar.h"
@@ -167,8 +166,6 @@
 	g_return_if_fail(webview != NULL);
 	g_return_if_fail(PIDGIN_IS_WEBVIEW(webview));
 
-	pidgin_themes_smiley_themeize(webview);
-
 #ifdef _WIN32
 	if (!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/use_theme_font")) {
 		WebKitWebSettings *settings = webkit_web_settings_new();
@@ -312,7 +309,6 @@
 
 	if (editable) {
 		pidgin_webviewtoolbar_attach(PIDGIN_WEBVIEWTOOLBAR(toolbar), webview);
-		pidgin_webviewtoolbar_associate_smileys(PIDGIN_WEBVIEWTOOLBAR(toolbar), "default");
 		pidgin_webview_set_toolbar(PIDGIN_WEBVIEW(webview), toolbar);
 	}
 	pidgin_setup_webview(webview);
@@ -412,7 +408,7 @@
 	gtk_widget_add_accelerator(menuitem, "activate", accel, str[0],
 				   GDK_MOD1_MASK, GTK_ACCEL_LOCKED);
 */
-	pidgin_set_accessible_label (menuitem, label);
+	pidgin_set_accessible_label(menuitem, GTK_LABEL(label));
 	return menuitem;
 }
 
@@ -459,7 +455,7 @@
 pidgin_pixbuf_button_from_stock(const char *text, const char *icon,
 							  PidginButtonOrientation style)
 {
-	GtkWidget *button, *image, *label, *bbox, *ibox, *lbox = NULL;
+	GtkWidget *button, *image, *bbox, *ibox, *lbox = NULL;
 
 	button = gtk_button_new();
 
@@ -484,12 +480,15 @@
 	}
 
 	if (text) {
+		GtkLabel *label;
+
 		gtk_box_pack_start(GTK_BOX(bbox), lbox, TRUE, TRUE, 0);
-		label = gtk_label_new(NULL);
-		gtk_label_set_text_with_mnemonic(GTK_LABEL(label), text);
-		gtk_label_set_mnemonic_widget(GTK_LABEL(label), button);
-		gtk_box_pack_start(GTK_BOX(lbox), label, FALSE, TRUE, 0);
-		pidgin_set_accessible_label (button, label);
+		label = GTK_LABEL(gtk_label_new(NULL));
+		gtk_label_set_text_with_mnemonic(label, text);
+		gtk_label_set_mnemonic_widget(label, button);
+		gtk_box_pack_start(GTK_BOX(lbox), GTK_WIDGET(label),
+			FALSE, TRUE, 0);
+		pidgin_set_accessible_label(button, label);
 	}
 
 	gtk_widget_show_all(bbox);
@@ -544,31 +543,32 @@
 GtkWidget *
 pidgin_make_frame(GtkWidget *parent, const char *title)
 {
-	GtkWidget *vbox, *vbox2, *label, *hbox;
+	GtkWidget *vbox, *vbox2, *hbox;
+	GtkLabel *label;
 	char *labeltitle;
 
 	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_box_pack_start(GTK_BOX(parent), vbox, FALSE, FALSE, 0);
 	gtk_widget_show(vbox);
 
-	label = gtk_label_new(NULL);
+	label = GTK_LABEL(gtk_label_new(NULL));
 
 	labeltitle = g_strdup_printf("<span weight=\"bold\">%s</span>", title);
-	gtk_label_set_markup(GTK_LABEL(label), labeltitle);
+	gtk_label_set_markup(label, labeltitle);
 	g_free(labeltitle);
 
 	gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
-	gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
-	gtk_widget_show(label);
-	pidgin_set_accessible_label (vbox, label);
+	gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(label), FALSE, FALSE, 0);
+	gtk_widget_show(GTK_WIDGET(label));
+	pidgin_set_accessible_label(vbox, label);
 
 	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
 	gtk_widget_show(hbox);
 
-	label = gtk_label_new("    ");
-	gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
-	gtk_widget_show(label);
+	label = GTK_LABEL(gtk_label_new("    "));
+	gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(label), FALSE, FALSE, 0);
+	gtk_widget_show(GTK_WIDGET(label));
 
 	vbox2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_box_pack_start(GTK_BOX(hbox), vbox2, FALSE, FALSE, 0);
@@ -1166,7 +1166,7 @@
 }
 
 void
-pidgin_set_accessible_label (GtkWidget *w, GtkWidget *l)
+pidgin_set_accessible_label(GtkWidget *w, GtkLabel *l)
 {
 	AtkObject *acc;
 	const gchar *label_text;
@@ -1177,7 +1177,7 @@
 	/* If this object has no name, set it's name with the label text */
 	existing_name = atk_object_get_name (acc);
 	if (!existing_name) {
-		label_text = gtk_label_get_text (GTK_LABEL(l));
+		label_text = gtk_label_get_text(l);
 		if (label_text)
 			atk_object_set_name (acc, label_text);
 	}
@@ -1186,7 +1186,7 @@
 }
 
 void
-pidgin_set_accessible_relations (GtkWidget *w, GtkWidget *l)
+pidgin_set_accessible_relations (GtkWidget *w, GtkLabel *l)
 {
 	AtkObject *acc, *label;
 	AtkObject *rel_obj[1];
@@ -1194,10 +1194,10 @@
 	AtkRelation *relation;
 
 	acc = gtk_widget_get_accessible (w);
-	label = gtk_widget_get_accessible (l);
+	label = gtk_widget_get_accessible(GTK_WIDGET(l));
 
 	/* Make sure mnemonics work */
-	gtk_label_set_mnemonic_widget(GTK_LABEL(l), w);
+	gtk_label_set_mnemonic_widget(l, w);
 
 	/* Create the labeled-by relation */
 	set = atk_object_ref_relation_set (acc);
@@ -2889,7 +2889,7 @@
 	gtk_box_pack_start(GTK_BOX(hbox), widget, expand, TRUE, 0);
 	if (label) {
 		gtk_label_set_mnemonic_widget(GTK_LABEL(label), widget);
-		pidgin_set_accessible_label (widget, label);
+		pidgin_set_accessible_label(widget, GTK_LABEL(label));
 	}
 
 	if (p_label)
@@ -3157,6 +3157,53 @@
 	return pixbuf;
 }
 
+GdkPixbuf *
+pidgin_pixbuf_scale_down(GdkPixbuf *src, guint max_width, guint max_height,
+	GdkInterpType interp_type, gboolean preserve_ratio)
+{
+	guint cur_w, cur_h;
+	GdkPixbuf *dst;
+
+	g_return_val_if_fail(src != NULL, NULL);
+
+	if (max_width == 0 || max_height == 0) {
+		g_object_unref(src);
+		g_return_val_if_reached(NULL);
+	}
+
+	cur_w = gdk_pixbuf_get_width(src);
+	cur_h = gdk_pixbuf_get_height(src);
+
+	if (cur_w <= max_width && cur_h <= max_height)
+		return src;
+
+	/* cur_ratio = cur_w / cur_h
+	 * max_ratio = max_w / max_h
+	 */
+
+	if (!preserve_ratio) {
+		cur_w = MIN(cur_w, max_width);
+		cur_h = MIN(cur_h, max_height);
+	} else if ((guint64)cur_w * max_height > (guint64)max_width * cur_h) {
+		/* cur_w / cur_h > max_width / max_height */
+		cur_h = (guint64)max_width * cur_h / cur_w;
+		cur_w = max_width;
+	} else {
+		cur_w = (guint64)max_height * cur_w / cur_h;
+		cur_h = max_height;
+	}
+
+	if (cur_w <= 0)
+		cur_w = 1;
+	if (cur_h <= 0)
+		cur_h = 1;
+
+	dst = gdk_pixbuf_scale_simple(src, cur_w, cur_h, interp_type);
+	g_object_unref(src);
+
+	return dst;
+}
+
 static void
 url_copy(GtkWidget *w, gchar *url)
 {

mercurial