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)
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
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;
}
}
+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
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))
}
fclose (f);
+ g_warning ("Unable to find handler for file: %s", file);
return NULL;
}
+/*
+ * Local variables:
+ * c-basic-offset: 8
+ * End:
+ */
{
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;
}
+
+
+