Updates to the unix sample app.

Rather than placing pixels, use XPutImage to place the bitmap on screen.

Modify the color arrangements for 8888 when building the sample app, so
they agree with X.

Add a title to simple sample.

Include SkTouchGesture.



git-svn-id: http://skia.googlecode.com/svn/trunk@963 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/Makefile b/Makefile
index e482060..db04678 100644
--- a/Makefile
+++ b/Makefile
@@ -106,6 +106,9 @@
 	LINKER_OPTS += -lpng -lfreetype -lGL
 	DEFINES += -DSK_BUILD_FOR_UNIX -DSK_ENABLE_LIBPNG -DGR_LINUX_BUILD=1
 
+    ifeq ($(SKIA_SAMPLES_FOR_X),true)
+        DEFINES += -DSK_SAMPLES_FOR_X
+    endif
 	# needed for freetype support
 	C_INCLUDES += -I/usr/include/freetype2
 	SRC_LIST += src/ports/SkFontHost_linux.cpp
diff --git a/include/config/SkUserConfig.h b/include/config/SkUserConfig.h
index 13169ca..aa2e6cf 100644
--- a/include/config/SkUserConfig.h
+++ b/include/config/SkUserConfig.h
@@ -141,5 +141,14 @@
 //#define SK_SUPPORT_UNITTEST
 #endif
 
+/*  Change the ordering to work in X windows.
+ */
+#ifdef SK_SAMPLES_FOR_X
+        #define SK_R32_SHIFT    16
+        #define SK_G32_SHIFT    8
+        #define SK_B32_SHIFT    0
+        #define SK_A32_SHIFT    24
+#endif
+
 #endif
 
diff --git a/src/utils/unix/SkOSWindow_Unix.cpp b/src/utils/unix/SkOSWindow_Unix.cpp
index 96940f5..650ced2 100644
--- a/src/utils/unix/SkOSWindow_Unix.cpp
+++ b/src/utils/unix/SkOSWindow_Unix.cpp
@@ -72,14 +72,24 @@
     if (!fUnixWindow.fDisplay) return;
     // Draw the bitmap to the screen.
     const SkBitmap& bitmap = getBitmap();
-    for (int i = 0; i < bitmap.width(); i++) {
-        for (int j = 0; j < bitmap.height(); j++) {
-            // Get the pixel, put it on the screen.
-            SkColor color = bitmap.getColor(i, j);
-            XSetForeground(fUnixWindow.fDisplay, fUnixWindow.fGc, color);
-            XDrawPoint(fUnixWindow.fDisplay, fUnixWindow.fWin, fUnixWindow.fGc, i, j);
-        }
-    }
+
+    XImage image;
+    sk_bzero(&image, sizeof(image));
+
+    int bitsPerPixel = bitmap.bytesPerPixel() * 8;
+    image.width = bitmap.width();
+    image.height = bitmap.height();
+    image.format = ZPixmap;
+    image.data = (char*) bitmap.getPixels();
+    image.byte_order = LSBFirst;
+    image.bitmap_unit = bitsPerPixel;
+    image.bitmap_bit_order = LSBFirst;
+    image.bitmap_pad = bitsPerPixel;
+    image.depth = 24;
+    image.bytes_per_line = bitmap.rowBytes() - bitmap.width() * bitmap.bytesPerPixel();
+    image.bits_per_pixel = bitsPerPixel;
+    int status = XInitImage(&image);
+    XPutImage(fUnixWindow.fDisplay, fUnixWindow.fWin, fUnixWindow.fGc, &image, 0, 0, 0, 0, width(), height());
 }
 
 bool SkOSWindow::onHandleChar(SkUnichar)
diff --git a/src/views/views_files.mk b/src/views/views_files.mk
index 613c4bd..3eee698 100644
--- a/src/views/views_files.mk
+++ b/src/views/views_files.mk
@@ -6,7 +6,8 @@
     SkTagList.cpp \
     SkView.cpp \
     SkViewPriv.cpp \
-    SkWindow.cpp
+    SkWindow.cpp \
+    SkTouchGesture.cpp
 #    SkBGViewArtist.cpp \
     SkListView.cpp \
     SkListWidget.cpp \
diff --git a/unix_test_app/DrawBlueSample.cpp b/unix_test_app/DrawBlueSample.cpp
index 7e58d32..61b6607 100644
--- a/unix_test_app/DrawBlueSample.cpp
+++ b/unix_test_app/DrawBlueSample.cpp
@@ -1,6 +1,7 @@
+#include "SampleCode.h"
 #include "SkCanvas.h"
 #include "SkColor.h"
-#include "SampleCode.h"
+#include "SkEvent.h"
 #include "SkView.h"
 
 class DrawBlue : public SkView {
@@ -11,6 +12,15 @@
     virtual void onDraw(SkCanvas* canvas) {
         canvas->drawColor(SK_ColorBLUE);
     }
+    virtual bool onQuery(SkEvent* evt) {
+        if (SampleCode::TitleQ(*evt)) {
+            SampleCode::TitleR(evt, "DrawBlue");
+            return true;
+        }
+        return this->INHERITED::onQuery(evt);
+    }
+private:
+    typedef SkView INHERITED;
 };
 
 static SkView* MyFactory() { return new DrawBlue; }
diff --git a/unix_test_app/makefile b/unix_test_app/makefile
index 0690435..6234679 100644
--- a/unix_test_app/makefile
+++ b/unix_test_app/makefile
@@ -12,12 +12,12 @@
               -I../include/utils/unix \
               -I../samplecode
 
-VPATH = libs:../src/ports:../samplecode:../src/core:../out:../src/utils/unix
+VPATH = libs:../src/ports:../samplecode:../src/core:../src/utils/unix
 
 #generate debugging info
 CFLAGS = -g
 
-SRC_LIST := main.cpp SkOSWindow_Unix.cpp SkXMLParser_empty.cpp SkDebug.cpp keysym2ucs.c
+SRC_LIST := main.cpp SkOSWindow_Unix.cpp SkXMLParser_empty.cpp SkDebug.cpp
 
 #views files
 include ../src/views/views_files.mk
@@ -31,6 +31,17 @@
 include ../samplecode/samplecode_files.mk
 SRC_LIST += $(addprefix ../samplecode/, $(SOURCE))
 
-output: $(SRC_LIST) -lX11 -lskia -lpthread -lz -lfreetype -lGL -lpng
+
+out/output: $(SRC_LIST) out/keysym2ucs.o ../out/libskia.a -lX11 -lpthread -lz -lfreetype -lGL -lpng
 	g++ $(C_INCLUDES) $(CFLAGS) $^ -o $@
 
+out/keysym2ucs.o: ../src/utils/unix/keysym2ucs.c
+	@mkdir -p $(dir $@)
+	@gcc -c $(C_INCLUDES) $(CFLAGS) $^ -o $@
+
+../out/libskia.a:
+	@$(MAKE) -C ../ SKIA_SAMPLES_FOR_X=true
+
+clean:
+	rm -rf ../out # Copied from ../Makefile
+	rm -rf out