]> Pileus Git - ~andy/gtk/commitdiff
reverted the expose everything changes, I'm not sure why these went in.
authorLarry Ewing <lewing@gimp.org>
Sat, 17 Jul 1999 20:03:34 +0000 (20:03 +0000)
committerLarry Ewing <lewing@src.gnome.org>
Sat, 17 Jul 1999 20:03:34 +0000 (20:03 +0000)
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.

demos/testpixbuf.c
gdk-pixbuf/ChangeLog
gdk-pixbuf/gdk-pixbuf-io.c
gdk-pixbuf/gdk-pixbuf.c

index 5f70302f9f8fd29af1e0c094e1ce52d4f36ded44..e81d4607c103d8877e27b0d7b38d23533304621f 100644 (file)
@@ -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;
        }
     }
 
index 62ac792eec7c0f4d0bab0cbae91fa840df8940a2..84a01ba01aaa3a6fa2fc0bba06d26b09fea32584 100644 (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
index 257a454f120fe2db9ce49c3b22e2ba211f485504..53da897cbae9536b7e8cd3181a1072b9012280de 100644 (file)
@@ -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:
+ */
index 79eb80430bcfdf49aaea7ef9647a787d71a4b9fc..0068c163d6b68b7faa9e2f904abb73817e830048 100644 (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);
-
-    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;
 }
+
+
+