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.
This commit is contained in:
Larry Ewing 1999-07-17 20:03:34 +00:00 committed by Larry Ewing
parent f12fbc1b32
commit e9ed2c18a7
4 changed files with 87 additions and 65 deletions

View File

@ -46,26 +46,31 @@ quit_func (GtkWidget *widget, gpointer dummy)
expose_func (GtkWidget *drawing_area, GdkEventExpose *event, gpointer data)
{
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,
0, 0,
pixbuf->art_pixbuf->width,
pixbuf->art_pixbuf->height,
GDK_RGB_DITHER_NORMAL,
pixbuf->art_pixbuf->pixels,
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 {
}else{
gdk_draw_rgb_image (drawing_area->window,
drawing_area->style->white_gc,
0, 0,
pixbuf->art_pixbuf->width,
pixbuf->art_pixbuf->height,
event->area.x, event->area.y,
event->area.width,
event->area.height,
GDK_RGB_DITHER_NORMAL,
pixbuf->art_pixbuf->pixels,
pixbuf->art_pixbuf->pixels
+ (event->area.y * pixbuf->art_pixbuf->rowstride)
+ (event->area.x * pixbuf->art_pixbuf->n_channels),
pixbuf->art_pixbuf->rowstride);
}
}
@ -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,16 +158,16 @@ 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]) {
for (i = 1; i < argc; i++)
{
pixbuf = gdk_pixbuf_load_image (argv[i]);
if (pixbuf) {
if (pixbuf)
{
new_testrgb_window (pixbuf);
found_valid = TRUE;
}
}
}
if (found_valid)
gtk_main ();

View File

@ -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

View File

@ -148,8 +148,10 @@ 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;
@ -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:
*/

View File

@ -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);
affine[0] = w / (double)(pixbuf->art_pixbuf->width);
affine[3] = h / (double)(pixbuf->art_pixbuf->height);
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,
// 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);
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;
}
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;
}