summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLarry Ewing <lewing@gimp.org>1999-07-17 20:03:34 +0000
committerLarry Ewing <lewing@src.gnome.org>1999-07-17 20:03:34 +0000
commite9ed2c18a7de02f9e73212b56a9d134ab3aed372 (patch)
treeaae8ada3366cbf0cdaea44baca802a0f3a84b3f2
parentf12fbc1b3267227fa677d81949a6ca4b8e5015de (diff)
downloadgtk+-e9ed2c18a7de02f9e73212b56a9d134ab3aed372.tar.gz
reverted the expose everything changes, I'm not sure why these went in.
1999-07-16 Larry Ewing <lewing@gimp.org> * src/testpixbuf.c (expose_func): reverted the expose everything changes, I'm not sure why these went in. (config_func): bring this up to date with the new pixbuf_scale semantics. * src/gdk-pixbuf-io.c: added a couple of warnings to the module loading code so that poeple can diagnose problems better. * src/gdk-pixbuf.c (gdk_pixbux_scale): fix the borkedness, also it no longer allocates a new pixbuf, which make things nicer for the rest of the code. Unfortunately there is still a problem with scaling rgba images.
-rw-r--r--demos/testpixbuf.c75
-rw-r--r--gdk-pixbuf/ChangeLog15
-rw-r--r--gdk-pixbuf/gdk-pixbuf-io.c12
-rw-r--r--gdk-pixbuf/gdk-pixbuf.c58
4 files changed, 91 insertions, 69 deletions
diff --git a/demos/testpixbuf.c b/demos/testpixbuf.c
index 5f70302f9f..e81d4607c1 100644
--- a/demos/testpixbuf.c
+++ b/demos/testpixbuf.c
@@ -45,29 +45,34 @@ quit_func (GtkWidget *widget, gpointer dummy)
expose_func (GtkWidget *drawing_area, GdkEventExpose *event, gpointer data)
{
- GdkPixBuf *pixbuf;
-
- pixbuf = (GdkPixBuf *)gtk_object_get_data(GTK_OBJECT(drawing_area), "pixbuf");
-
- if (pixbuf->art_pixbuf->has_alpha){
- gdk_draw_rgb_32_image (drawing_area->window,
- drawing_area->style->black_gc,
- 0, 0,
- pixbuf->art_pixbuf->width,
- pixbuf->art_pixbuf->height,
- GDK_RGB_DITHER_NORMAL,
- pixbuf->art_pixbuf->pixels,
- pixbuf->art_pixbuf->rowstride);
- } else {
- gdk_draw_rgb_image (drawing_area->window,
- drawing_area->style->white_gc,
- 0, 0,
- pixbuf->art_pixbuf->width,
- pixbuf->art_pixbuf->height,
- GDK_RGB_DITHER_NORMAL,
- pixbuf->art_pixbuf->pixels,
- pixbuf->art_pixbuf->rowstride);
- }
+ GdkPixBuf *pixbuf;
+ gint x1, y1, x2, y2;
+
+ pixbuf = (GdkPixBuf *)gtk_object_get_data(GTK_OBJECT(drawing_area), "pixbuf");
+
+ if (pixbuf->art_pixbuf->has_alpha){
+ gdk_draw_rgb_32_image (drawing_area->window,
+ drawing_area->style->black_gc,
+ event->area.x, event->area.y,
+ event->area.width,
+ event->area.height,
+ GDK_RGB_DITHER_MAX,
+ pixbuf->art_pixbuf->pixels
+ + (event->area.y * pixbuf->art_pixbuf->rowstride)
+ + (event->area.x * pixbuf->art_pixbuf->n_channels),
+ pixbuf->art_pixbuf->rowstride);
+ }else{
+ gdk_draw_rgb_image (drawing_area->window,
+ drawing_area->style->white_gc,
+ event->area.x, event->area.y,
+ event->area.width,
+ event->area.height,
+ GDK_RGB_DITHER_NORMAL,
+ pixbuf->art_pixbuf->pixels
+ + (event->area.y * pixbuf->art_pixbuf->rowstride)
+ + (event->area.x * pixbuf->art_pixbuf->n_channels),
+ pixbuf->art_pixbuf->rowstride);
+ }
}
config_func (GtkWidget *drawing_area, GdkEventConfigure *event, gpointer data)
@@ -79,11 +84,9 @@ config_func (GtkWidget *drawing_area, GdkEventConfigure *event, gpointer data)
g_print("X:%d Y:%d\n", event->width, event->height);
if (((event->width) != (pixbuf->art_pixbuf->width)) ||
- ((event->height) != (pixbuf->art_pixbuf->height))) {
- spb = gdk_pixbuf_scale(pixbuf, event->width, event->height);
- gdk_pixbuf_free (pixbuf);
- gtk_object_set_data (GTK_OBJECT(drawing_area), "pixbuf", spb);
- }
+ ((event->height) != (pixbuf->art_pixbuf->height)))
+ gdk_pixbuf_scale(pixbuf, event->width, event->height);
+
}
void
@@ -155,14 +158,14 @@ main (int argc, char **argv)
gtk_widget_set_default_visual (gdk_rgb_get_visual ());
i = 1;
- for (i = 1; i < argc; i++) {
- if (argv[i]) {
- pixbuf = gdk_pixbuf_load_image (argv[i]);
-
- if (pixbuf) {
- new_testrgb_window (pixbuf);
- found_valid = TRUE;
- }
+ for (i = 1; i < argc; i++)
+ {
+ pixbuf = gdk_pixbuf_load_image (argv[i]);
+
+ if (pixbuf)
+ {
+ new_testrgb_window (pixbuf);
+ found_valid = TRUE;
}
}
diff --git a/gdk-pixbuf/ChangeLog b/gdk-pixbuf/ChangeLog
index 62ac792eec..84a01ba01a 100644
--- a/gdk-pixbuf/ChangeLog
+++ b/gdk-pixbuf/ChangeLog
@@ -1,3 +1,18 @@
+1999-07-16 Larry Ewing <lewing@gimp.org>
+
+ * src/testpixbuf.c (expose_func): reverted the expose everything
+ changes, I'm not sure why these went in.
+ (config_func): bring this up to date with the new pixbuf_scale
+ semantics.
+
+ * src/gdk-pixbuf-io.c: added a couple of warnings to the module
+ loading code so that poeple can diagnose problems better.
+
+ * src/gdk-pixbuf.c (gdk_pixbux_scale): fix the borkedness, also it
+ no longer allocates a new pixbuf, which make things nicer for the
+ rest of the code. Unfortunately there is still a problem with
+ scaling rgba images.
+
1999-07-16 Mark Crichton <crichton@gimp.org>
* src/testpixbuf.c (config_func): ConfigureEvent handler. This
diff --git a/gdk-pixbuf/gdk-pixbuf-io.c b/gdk-pixbuf/gdk-pixbuf-io.c
index 257a454f12..53da897cba 100644
--- a/gdk-pixbuf/gdk-pixbuf-io.c
+++ b/gdk-pixbuf/gdk-pixbuf-io.c
@@ -148,9 +148,11 @@ image_handler_load (int idx)
g_free (module_name);
module = g_module_open (path, G_MODULE_BIND_LAZY);
- if (!module)
+ if (!module) {
+ g_warning ("Unable to load module: %s", path);
return;
-
+ }
+
file_formats [idx].module = module;
if (g_module_symbol (module, "image_load", &load_sym))
@@ -196,6 +198,12 @@ gdk_pixbuf_load_image (const char *file)
}
fclose (f);
+ g_warning ("Unable to find handler for file: %s", file);
return NULL;
}
+/*
+ * Local variables:
+ * c-basic-offset: 8
+ * End:
+ */
diff --git a/gdk-pixbuf/gdk-pixbuf.c b/gdk-pixbuf/gdk-pixbuf.c
index 79eb80430b..0068c163d6 100644
--- a/gdk-pixbuf/gdk-pixbuf.c
+++ b/gdk-pixbuf/gdk-pixbuf.c
@@ -51,42 +51,38 @@ gdk_pixbuf_scale (GdkPixBuf *pixbuf, gint w, gint h)
{
GdkPixBuf *spb;
art_u8 *pixels;
+ gint rowstride;
double affine[6];
ArtAlphaGamma *alphagamma;
+ ArtPixBuf *art_pixbuf = NULL;
alphagamma = NULL;
affine[1] = affine[2] = affine[4] = affine[5] = 0;
- affine[0] = w / (pixbuf->art_pixbuf->width);
- affine[3] = h / (pixbuf->art_pixbuf->height);
-
- spb = g_new (GdkPixBuf, 1);
-
- if (pixbuf->art_pixbuf->has_alpha) {
- /* Following code is WRONG....of course, the code for this
- * transform isn't in libart yet.
- */
-#if 0
- pixels = art_alloc (h * w * 4);
- art_rgb_affine( pixels, 0, 0, w, h, (w * 4),
- pixbuf->art_pixbuf->pixels,
- pixbuf->art_pixbuf->width,
- pixbuf->art_pixbuf->height,
- pixbuf->art_pixbuf->rowstride,
- affine, ART_FILTER_NEAREST, alphagamma);
- spb->art_pixbuf = art_pixbuf_new_rgba(pixels, w, h, (w * 4));
-#endif
- } else {
- pixels = art_alloc (h * w * 3);
- art_rgb_affine( pixels, 0, 0, w, h, (w * 3),
- pixbuf->art_pixbuf->pixels,
- pixbuf->art_pixbuf->width,
- pixbuf->art_pixbuf->height,
- pixbuf->art_pixbuf->rowstride,
- affine, ART_FILTER_NEAREST, alphagamma);
- spb->art_pixbuf = art_pixbuf_new_rgb(pixels, w, h, (w * 3));
- spb->ref_count = 0;
- spb->unref_func = NULL;
- }
+
+ affine[0] = w / (double)(pixbuf->art_pixbuf->width);
+ affine[3] = h / (double)(pixbuf->art_pixbuf->height);
+
+ // rowstride = w * pixbuf->art_pixbuf->n_channels;
+ rowstride = w * 3;
+
+ pixels = art_alloc (h * rowstride);
+ art_rgb_pixbuf_affine( pixels, 0, 0, w, h, rowstride,
+ pixbuf->art_pixbuf,
+ affine, ART_FILTER_NEAREST, alphagamma);
+
+ if (pixbuf->art_pixbuf->has_alpha)
+ // should be rgba
+ art_pixbuf = art_pixbuf_new_rgb(pixels, w, h, rowstride);
+ else
+ art_pixbuf = art_pixbuf_new_rgb(pixels, w, h, rowstride);
+
+ art_pixbuf_free (pixbuf->art_pixbuf);
+ pixbuf->art_pixbuf = art_pixbuf;
+
+ return pixbuf;
}
+
+
+