Author: AlbrechtS
Date: 2011-04-20 06:38:28 -0700 (Wed, 20 Apr 2011)
New Revision: 8609
Log:
Added some test parameters for fine tuning of image tests. These parameters
are implemented as compiler macros and can only be edited manually to test
different implementation details.


Modified:
   branches/branch-1.3/test/unittest_images.cxx

Modified: branches/branch-1.3/test/unittest_images.cxx
===================================================================
--- branches/branch-1.3/test/unittest_images.cxx        2011-04-19 12:37:20 UTC 
(rev 8608)
+++ branches/branch-1.3/test/unittest_images.cxx        2011-04-20 13:38:28 UTC 
(rev 8609)
@@ -3,7 +3,7 @@
 //
 // Unit tests for the Fast Light Tool Kit (FLTK).
 //
-// Copyright 1998-2010 by Bill Spitzak and others.
+// Copyright 1998-2011 by Bill Spitzak and others.
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Library General Public
@@ -35,15 +35,31 @@
 //
 //------- test the image drawing capabilities of this implementation ----------
 //
+
+// Some parameters for fine tuning for developers - their
+// default values ought to be: CB=1, DX=0, LX=0, IMG=1
+#define CB (1)  // 1 to show the checker board background for alpha images, 0 
otherwise
+#define DX (0) // additional (undefined (0)) pixels per line, must be >= 0
+               // ignored (irrelevant), if LX == 0 (see below)
+#define LX (0) // 0 for default: ld() = 0, i.e. ld() defaults (internally) to 
w()*d()
+               // +1: ld() = (w() + DX) * d()
+               // -1 to flip image vertically: ld() = - ((w() + DX) * d())
+#define IMG (1)        // 1 to use Fl_RGB_Image for drawing images,
+               // 0 to use fl_draw_image() instead.
+               // Note: as of April 2011, only 1 (Fl_RGB_Image) works 
correctly with alpha
+               // channel, 0 (fl_draw_image()) ignores the alpha channel (FLTK 
1.3.0).
+               // There are plans to support alpha in fl_draw_image() in FLTK 
1.3.x,
+               // but not in FLTK 1.1.x .
+
 class ImageTest : public Fl_Box {
 public: 
   static Fl_Widget *create() {
     int x, y;
     uchar *dg, *dga, *drgb, *drgba;
-    dg = img_gray = (uchar*)malloc(128*128*1);
-    dga = img_gray_a = (uchar*)malloc(128*128*2);
-    drgb = img_rgb = (uchar*)malloc(128*128*3);
-    drgba = img_rgba = (uchar*)malloc(128*128*4);
+    dg    = img_gray   = (uchar*)malloc((128+DX)*128*1);
+    dga   = img_gray_a = (uchar*)malloc((128+DX)*128*2);
+    drgb  = img_rgb    = (uchar*)malloc((128+DX)*128*3);
+    drgba = img_rgba   = (uchar*)malloc((128+DX)*128*4);
     for (y=0; y<128; y++) {
       for (x=0; x<128; x++) {
         *drgba++ = *drgb++ = *dga++ = *dg++ = y<<1;
@@ -51,17 +67,33 @@
         *drgba++ = *drgb++                  = (127-x)<<1;
         *drgba++           = *dga++         = x+y;
       }
+      if (DX > 0 && LX != 0) {
+        memset(dg,   0,1*DX); dg    += 1*DX;
+        memset(dga,  0,2*DX); dga   += 2*DX;
+        memset(drgb, 0,3*DX); drgb  += 3*DX;
+        memset(drgba,0,4*DX); drgba += 4*DX;
+      }
     }
-    i_rgba = new Fl_RGB_Image (img_rgba,128,128,4);
-    i_ga = new Fl_RGB_Image (img_gray_a,128,128,2);
+    if (LX<0) {
+      img_gray   += 127*(128+DX);
+      img_gray_a += 127*(128+DX)*2;
+      img_rgb    += 127*(128+DX)*3;
+      img_rgba   += 127*(128+DX)*4;
+    }
+    i_g    = new Fl_RGB_Image (img_gray  ,128,128,1,LX*(128+DX));
+    i_ga   = new Fl_RGB_Image (img_gray_a,128,128,2,LX*(128+DX)*2);
+    i_rgb  = new Fl_RGB_Image (img_rgb,   128,128,3,LX*(128+DX)*3);
+    i_rgba = new Fl_RGB_Image (img_rgba,  128,128,4,LX*(128+DX)*4);
     return new ImageTest(TESTAREA_X, TESTAREA_Y, TESTAREA_W, TESTAREA_H);
   }
   static uchar *img_gray;
   static uchar *img_gray_a;
   static uchar *img_rgb;
   static uchar *img_rgba;
+  static Fl_RGB_Image *i_g;
+  static Fl_RGB_Image *i_ga;
+  static Fl_RGB_Image *i_rgb;
   static Fl_RGB_Image *i_rgba;
-  static Fl_RGB_Image *i_ga;
   ImageTest(int x, int y, int w, int h) : Fl_Box(x, y, w, h) {
     label("Testing Image Drawing\n\n"
        "This test renders four images, two of them with a checker board\n"
@@ -77,32 +109,54 @@
 
     int xx = x()+10, yy = y()+10;
     fl_color(FL_BLACK); fl_rect(xx, yy, 130, 130);
-    fl_draw_image(img_rgb, xx+1, yy+1, 128, 128, 3);
+#if IMG
+    i_rgb->draw(xx+1,yy+1);
+#else
+    fl_draw_image(img_rgb, xx+1, yy+1, 128, 128, 3, LX*((128+DX)*3));
+#endif
     fl_draw("RGB", xx+134, yy+64);
 
     // bottom left: RGBA
 
     xx = x()+10; yy = y()+10+134;
-    fl_color(FL_BLACK); fl_rectf(xx, yy, 130, 130);
-    fl_color(FL_WHITE); fl_rectf(xx+1, yy+1, 64, 64);
-    fl_color(FL_WHITE); fl_rectf(xx+65, yy+65, 64, 64);
-    i_rgba->draw(xx+1,yy+1);   // only Fl_RGB_Image->draw() works with alpha
+    fl_color(FL_BLACK); fl_rect(xx, yy, 130, 130);     // black frame
+    fl_color(FL_WHITE); fl_rectf(xx+1, yy+1, 128, 128);        // white 
background
+#if CB                                                 // checker board
+    fl_color(FL_BLACK); fl_rectf(xx+65, yy+1, 64, 64);
+    fl_color(FL_BLACK); fl_rectf(xx+1, yy+65, 64, 64);
+#endif
+#if IMG
+    i_rgba->draw(xx+1,yy+1);
+#else
+    fl_draw_image(img_rgba, xx+1, yy+1, 128, 128, 4, LX*((128+DX)*4));
+#endif
     fl_color(FL_BLACK); fl_draw("RGBA", xx+134, yy+64);
-    
+
     // top right: Gray
 
     xx = x()+10+200; yy = y()+10;
     fl_color(FL_BLACK); fl_rect(xx, yy, 130, 130);
-    fl_draw_image(img_gray, xx+1, yy+1, 128, 128, 1);
+#if IMG
+    i_g->draw(xx+1,yy+1);
+#else
+    fl_draw_image(img_gray, xx+1, yy+1, 128, 128, 1, LX*((128+DX)*1));
+#endif
     fl_draw("Gray", xx+134, yy+64);
 
     // bottom right: Gray+Alpha
 
     xx = x()+10+200; yy = y()+10+134;
-    fl_color(FL_BLACK); fl_rectf(xx, yy, 130, 130);
-    fl_color(FL_WHITE); fl_rectf(xx+1, yy+1, 64, 64);
-    fl_color(FL_WHITE); fl_rectf(xx+65, yy+65, 64, 64);
-    i_ga->draw(xx+1,yy+1);     // only Fl_RGB_Image->draw() works with alpha
+    fl_color(FL_BLACK); fl_rect(xx, yy, 130, 130);     // black frame
+    fl_color(FL_WHITE); fl_rectf(xx+1, yy+1, 128, 128);        // white 
background
+#if CB                                                 // checker board
+    fl_color(FL_BLACK); fl_rectf(xx+65, yy+1, 64, 64);
+    fl_color(FL_BLACK); fl_rectf(xx+1, yy+65, 64, 64);
+#endif
+#if IMG
+    i_ga->draw(xx+1,yy+1);
+#else
+    fl_draw_image(img_gray_a, xx+1, yy+1, 128, 128, 2, LX*((128+DX)*2));
+#endif
     fl_color(FL_BLACK); fl_draw("Gray+Alpha", xx+134, yy+64);
   }
 };
@@ -111,8 +165,10 @@
 uchar *ImageTest::img_gray_a = 0;
 uchar *ImageTest::img_rgb = 0;
 uchar *ImageTest::img_rgba = 0;
+Fl_RGB_Image *ImageTest::i_g = 0;
+Fl_RGB_Image *ImageTest::i_ga = 0;
+Fl_RGB_Image *ImageTest::i_rgb = 0;
 Fl_RGB_Image *ImageTest::i_rgba = 0;
-Fl_RGB_Image *ImageTest::i_ga = 0;
 
 UnitTest images("drawing images", ImageTest::create);
 

_______________________________________________
fltk-commit mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-commit

Reply via email to