| 3171 } |
3171 } |
| 3172 |
3172 |
| 3173 return pixbuf; |
3173 return pixbuf; |
| 3174 } |
3174 } |
| 3175 |
3175 |
| |
3176 GdkPixbuf * |
| |
3177 pidgin_pixbuf_scale_down(GdkPixbuf *src, guint max_width, guint max_height, |
| |
3178 GdkInterpType interp_type, gboolean preserve_ratio) |
| |
3179 { |
| |
3180 guint cur_w, cur_h; |
| |
3181 GdkPixbuf *dst; |
| |
3182 |
| |
3183 g_return_val_if_fail(src != NULL, NULL); |
| |
3184 |
| |
3185 if (max_width == 0 || max_height == 0) { |
| |
3186 g_object_unref(src); |
| |
3187 g_return_val_if_reached(NULL); |
| |
3188 } |
| |
3189 |
| |
3190 cur_w = gdk_pixbuf_get_width(src); |
| |
3191 cur_h = gdk_pixbuf_get_width(src); |
| |
3192 |
| |
3193 if (cur_w <= max_width && cur_h <= max_height) |
| |
3194 return src; |
| |
3195 |
| |
3196 /* cur_ratio = cur_w / cur_h |
| |
3197 * max_ratio = max_w / max_h |
| |
3198 */ |
| |
3199 |
| |
3200 if (!preserve_ratio) { |
| |
3201 cur_w = MIN(cur_w, max_width); |
| |
3202 cur_h = MIN(cur_h, max_height); |
| |
3203 } else if ((guint64)cur_w * max_height > (guint64)max_width * cur_h) { |
| |
3204 /* cur_w / cur_h > max_width / max_height */ |
| |
3205 cur_h = (guint64)max_width * cur_h / cur_w; |
| |
3206 cur_w = max_width; |
| |
3207 } else { |
| |
3208 cur_w = (guint64)max_height * cur_w / cur_h; |
| |
3209 cur_h = max_height; |
| |
3210 } |
| |
3211 |
| |
3212 if (cur_w <= 0) |
| |
3213 cur_w = 1; |
| |
3214 if (cur_h <= 0) |
| |
3215 cur_h = 1; |
| |
3216 |
| |
3217 dst = gdk_pixbuf_scale_simple(src, cur_w, cur_h, interp_type); |
| |
3218 g_object_unref(src); |
| |
3219 |
| |
3220 return dst; |
| |
3221 } |
| |
3222 |
| 3176 static void |
3223 static void |
| 3177 url_copy(GtkWidget *w, gchar *url) |
3224 url_copy(GtkWidget *w, gchar *url) |
| 3178 { |
3225 { |
| 3179 GtkClipboard *clipboard; |
3226 GtkClipboard *clipboard; |
| 3180 |
3227 |