pidgin/gtkutils.c

changeset 35735
39ba84113a68
parent 35721
abae078d0525
child 35742
3585fead43a8
equal deleted inserted replaced
35734:ddad7176a0ec 35735:39ba84113a68
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

mercurial