comparison src/gtkimhtml.c @ 5046:44945824ba60

[gaim-migrate @ 5394] javabsp fixed im image scaling I fixed im image saving, and the button annoyingly staying toggled committer: Tailor Script <tailor@pidgin.im>
author Nathan Walp <nwalp@pidgin.im>
date Sun, 06 Apr 2003 02:09:56 +0000
parents 29c87c6e75d9
children 04ded2f7253c
comparison
equal deleted inserted replaced
5045:ad42102dd85f 5046:44945824ba60
1431 GtkImage *image = GTK_IMAGE(gtk_image_new_from_pixbuf(img)); 1431 GtkImage *image = GTK_IMAGE(gtk_image_new_from_pixbuf(img));
1432 1432
1433 GTK_IMHTML_SCALABLE(im_image)->scale = gaim_im_image_scale; 1433 GTK_IMHTML_SCALABLE(im_image)->scale = gaim_im_image_scale;
1434 GTK_IMHTML_SCALABLE(im_image)->add_to = gaim_im_image_add_to; 1434 GTK_IMHTML_SCALABLE(im_image)->add_to = gaim_im_image_add_to;
1435 GTK_IMHTML_SCALABLE(im_image)->free = gaim_im_image_free; 1435 GTK_IMHTML_SCALABLE(im_image)->free = gaim_im_image_free;
1436
1437 im_image->pixbuf = img;
1436 im_image->image = image; 1438 im_image->image = image;
1437 im_image->width = gdk_pixbuf_get_width(img); 1439 im_image->width = gdk_pixbuf_get_width(img);
1438 im_image->height = gdk_pixbuf_get_height(img); 1440 im_image->height = gdk_pixbuf_get_height(img);
1439 im_image->mark = NULL; 1441 im_image->mark = NULL;
1440 im_image->filename = filename; 1442 im_image->filename = filename;
1441 1443
1444 g_object_ref(img);
1442 return GTK_IMHTML_SCALABLE(im_image); 1445 return GTK_IMHTML_SCALABLE(im_image);
1443 } 1446 }
1444 1447
1445 void gaim_im_image_scale(GtkIMHtmlScalable *scale, int width, int height) 1448 void gaim_im_image_scale(GtkIMHtmlScalable *scale, int width, int height)
1446 { 1449 {
1447 gaim_im_image *image = (gaim_im_image *)scale; 1450 gaim_im_image *image = (gaim_im_image *)scale;
1448 1451
1449 if(image->width > width || image->height > height){ 1452 if(image->width > width || image->height > height){
1450 GdkPixbuf *old_image = gtk_image_get_pixbuf(image->image);
1451 GdkPixbuf *new_image = NULL; 1453 GdkPixbuf *new_image = NULL;
1452 float factor; 1454 float factor;
1453 int new_width = image->width, new_height = image->height; 1455 int new_width = image->width, new_height = image->height;
1454 1456
1455 if(image->width > width){ 1457 if(image->width > width){
1461 factor = (float)(height)/new_height; 1463 factor = (float)(height)/new_height;
1462 new_height = height; 1464 new_height = height;
1463 new_width = new_width * factor; 1465 new_width = new_width * factor;
1464 } 1466 }
1465 1467
1466 new_image = gdk_pixbuf_scale_simple(old_image, new_width, new_height, GDK_INTERP_BILINEAR); 1468 new_image = gdk_pixbuf_scale_simple(image->pixbuf, new_width, new_height, GDK_INTERP_BILINEAR);
1467 gtk_image_set_from_pixbuf(image->image, new_image); 1469 gtk_image_set_from_pixbuf(image->image, new_image);
1468 g_object_unref(G_OBJECT(new_image)); 1470 g_object_unref(G_OBJECT(new_image));
1469 } 1471 }
1470 } 1472 }
1471 1473
1472 void gaim_im_image_free(GtkIMHtmlScalable *scale) 1474 void gaim_im_image_free(GtkIMHtmlScalable *scale)
1473 { 1475 {
1474 gaim_im_image *image = (gaim_im_image *)scale; 1476 gaim_im_image *image = (gaim_im_image *)scale;
1475 /* 1477
1476 g_object_unref(image->image); 1478 g_object_unref(image->pixbuf);
1477 */
1478 g_free(image->filename); 1479 g_free(image->filename);
1479 g_free(scale); 1480 g_free(scale);
1480 } 1481 }
1481 1482
1482 void gaim_im_image_add_to(GtkIMHtmlScalable *scale, GtkIMHtml *imhtml, GtkTextIter *iter) 1483 void gaim_im_image_add_to(GtkIMHtmlScalable *scale, GtkIMHtml *imhtml, GtkTextIter *iter)
1585 gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, 1586 gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
1586 _("Gaim was unable to guess the image type base on the file extension supplied. Defaulting to PNG.")); 1587 _("Gaim was unable to guess the image type base on the file extension supplied. Defaulting to PNG."));
1587 type = g_strdup("png"); 1588 type = g_strdup("png");
1588 } 1589 }
1589 1590
1590 gdk_pixbuf_save(gtk_image_get_pixbuf(image->image), filename, type, &error, NULL); 1591 gdk_pixbuf_save(image->pixbuf, filename, type, &error, NULL);
1591 1592
1592 if(error){ 1593 if(error){
1593 gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, 1594 gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
1594 _("Error saving image: %s"), error->message); 1595 _("Error saving image: %s"), error->message);
1595 g_error_free(error); 1596 g_error_free(error);