pixman experiment work in progress

git-svn-id: http://skia.googlecode.com/svn/trunk@5960 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/experimental/pixman/junk.cpp b/experimental/pixman/junk.cpp
new file mode 100644
index 0000000..6a93bbd
--- /dev/null
+++ b/experimental/pixman/junk.cpp
@@ -0,0 +1,108 @@
+
+extern "C" {
+#include <stdio.h>
+#include <stdlib.h>
+#include <config.h>
+#include "pixman-private.h"
+#include "utils.h"
+#include "gtk-utils.h"
+
+}
+
+#include "SkBitmap.h"
+#include "SkCanvas.h"
+#include "SkGraphics.h"
+#include "SkPaint.h"
+#import "SkWindow.h"
+
+bool DrawPixman(SkCanvas* canvas, int step, bool useOld);
+SkCanvas* canvas;
+
+extern "C" {
+
+void*
+pixbuf_from_argb32 (uint32_t *bits,
+		    int width,
+		    int height,
+		    int stride)
+{
+    SkBitmap* bitmap = new SkBitmap;
+    bitmap->setConfig(SkBitmap::kARGB_8888_Config, width, height);
+    bitmap->allocPixels();
+
+    int p_stride = bitmap->rowBytes();
+    uint32_t *p_bits = bitmap->getAddr32(0, 0);
+    int i;
+
+    for (i = 0; i < height; ++i)
+    {
+	uint32_t *src_row = &bits[i * (stride / 4)];
+	uint32_t *dst_row = p_bits + i * (p_stride / 4);
+
+	a8r8g8b8_to_rgba_np (dst_row, src_row, width);
+    }
+    return (void*) bitmap;
+}
+
+
+void show_image (pixman_image_t *image) {
+    int width, height;
+    pixman_format_code_t format;
+    pixman_image_t *copy;
+    
+    width = pixman_image_get_width (image);
+    height = pixman_image_get_height (image);
+
+
+    format = pixman_image_get_format (image);
+
+    /* Three cases:
+     *
+     *  - image is a8r8g8b8_sRGB: we will display without modification
+     *    under the assumption that the monitor is sRGB
+     *
+     *  - image is a8r8g8b8: we will display without modification
+     *    under the assumption that whoever created the image
+     *    probably did it wrong by using sRGB inputs
+     *
+     *  - other: we will convert to a8r8g8b8 under the assumption that
+     *    whoever created the image probably did it wrong.
+     */
+    switch (format)
+    {
+    case PIXMAN_a8r8g8b8_sRGB:
+    case PIXMAN_a8r8g8b8:
+	copy = pixman_image_ref (image);
+	break;
+
+    default:
+	copy = pixman_image_create_bits (PIXMAN_a8r8g8b8,
+					 width, height, NULL, -1);
+	pixman_image_composite32 (PIXMAN_OP_SRC,
+				  image, NULL, copy,
+				  0, 0, 0, 0, 0, 0,
+				  width, height);
+	break;
+    }
+
+    SkBitmap* bitmap = (SkBitmap*) pixbuf_from_argb32 (pixman_image_get_data (copy),
+				 width, height,
+				 pixman_image_get_stride (copy));
+    canvas->drawBitmap(*bitmap, 0, 0);
+    delete bitmap;
+}
+
+}
+
+bool DrawPixman(SkCanvas* c, int step, bool usePixman) {
+    canvas = c;
+    switch(step) {
+        case 0:
+            checkerboard_main(0, NULL);
+            break;
+        default:
+            alpha_main(0, NULL);
+            break;
+    }
+    return true;
+}