diff options
Diffstat (limited to 'test/unittest_images.cxx')
| -rw-r--r-- | test/unittest_images.cxx | 192 |
1 files changed, 103 insertions, 89 deletions
diff --git a/test/unittest_images.cxx b/test/unittest_images.cxx index 3f2a6ef25..cccde78e7 100644 --- a/test/unittest_images.cxx +++ b/test/unittest_images.cxx @@ -35,41 +35,41 @@ // Parameters for fine tuning for developers. // Default values: CB=1, DX=0, IMG=1, LX=0, FLIPH=0 -static int CB = 1; // 1 to show the checker board background for alpha images, - // 0 otherwise -static int DX = 0; // additional (undefined (0)) pixels per line, must be >= 0 - // ignored (irrelevant), if LX == 0 (see below) -static int IMG = 1; // 1 to use Fl_RGB_Image for drawing images with transparency, - // 0 to use fl_draw_image() instead. - // Note: as of Feb 2016, only 1 (Fl_RGB_Image) works with - // alpha channel, 0 (fl_draw_image()) ignores the alpha - // channel (FLTK 1.3.x). - // There are plans to support transparency (alpha channel) - // in fl_draw_image() in FLTK 1.4.0 and/or later. -static int 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()) -static int FLIPH = 0; // 1 = Flip image horizontally (only if IMG == 0) - // 0 = Draw image normal, w/o horizontal flipping +static int cb = 1; // 1 to show the checker board background for alpha images, + // 0 otherwise +static int dx = 0; // additional (undefined (0)) pixels per line, must be >= 0 + // ignored (irrelevant), if LX == 0 (see below) +static int img = 1; // 1 to use Fl_RGB_Image for drawing images with transparency, + // 0 to use fl_draw_image() instead. + // Note: as of Feb 2016, only 1 (Fl_RGB_Image) works with + // alpha channel, 0 (fl_draw_image()) ignores the alpha + // channel (FLTK 1.3.x). + // There are plans to support transparency (alpha channel) + // in fl_draw_image() in FLTK 1.4.0 and/or later. +static int 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()) +static int flip_h = 0; // 1 = Flip image horizontally (only if IMG == 0) + // 0 = Draw image normal, w/o horizontal flipping // ---------------------------------------------------------------------- // Test scenario for fl_draw_image() with pos. and neg. d and ld args: // ---------------------------------------------------------------------- -// (1) set IMG = 0: normal, but w/o transparency: no checker board -// (2) set LX = -1: images flipped vertically -// (3) set FLIPH = 1: images flipped vertically and horizontally -// (4) set LX = 0: images flipped horizontally -// (5) set FLIPH = 0, IMG = 1: back to default (with transparency) +// (1) set img = 0: normal, but w/o transparency: no checker board +// (2) set lx = -1: images flipped vertically +// (3) set flip_h = 1: images flipped vertically and horizontally +// (4) set lx = 0: images flipped horizontally +// (5) set flip_h = 0, IMG = 1: back to default (with transparency) // ---------------------------------------------------------------------- -class ImageTest : public Fl_Group { +class Ut_Image_Test : public Fl_Group { static void build_imgs() { int x, y; uchar *dg, *dga, *drgb, *drgba; - dg = img_gray = img_gray_base = (uchar*)malloc((128+DX)*128*1); - dga = img_gray_a = img_gray_a_base = (uchar*)malloc((128+DX)*128*2); - drgb = img_rgb = img_rgb_base = (uchar*)malloc((128+DX)*128*3); - drgba = img_rgba = img_rgba_base = (uchar*)malloc((128+DX)*128*4); + dg = img_gray = img_gray_base = (uchar*)malloc((128+dx)*128*1); + dga = img_gray_a = img_gray_a_base = (uchar*)malloc((128+dx)*128*2); + drgb = img_rgb = img_rgb_base = (uchar*)malloc((128+dx)*128*3); + drgba = img_rgba = img_rgba_base = (uchar*)malloc((128+dx)*128*4); for (y=0; y<128; y++) { for (x=0; x<128; x++) { *drgba++ = *drgb++ = *dga++ = *dg++ = y<<1; @@ -77,29 +77,29 @@ class ImageTest : public Fl_Group { *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; + 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; } } - 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; + 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; } - if (FLIPH && !IMG ) { + if (flip_h && !img ) { img_gray += 127; img_gray_a += 127*2; img_rgb += 127*3; img_rgba += 127*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); + 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); } // build_imgs method ends void free_images() { @@ -114,16 +114,16 @@ class ImageTest : public Fl_Group { } // end of free_images method static void refresh_imgs_CB(Fl_Widget*,void *data) { - ImageTest *it = (ImageTest*)data; + Ut_Image_Test* it = (Ut_Image_Test*)data; it->free_images(); // release the previous images // determine the state for the next images - CB = it->ck_CB->value(); - IMG = it->ck_IMG->value(); - FLIPH = it->ck_FLIPH->value(); + cb = it->ck_CB->value(); + img = it->ck_IMG->value(); + flip_h = it->ck_FLIPH->value(); // read the LX state radio buttons - if (it->rb_LXp1->value()) { LX = 1; } - else if (it->rb_LXm1->value()) { LX = (-1); } - else { LX = 0; } + if (it->rb_LXp1->value()) { lx = 1; } + else if (it->rb_LXm1->value()) { lx = (-1); } + else { lx = 0; } // construct the next images build_imgs(); it->redraw(); @@ -132,7 +132,7 @@ class ImageTest : public Fl_Group { public: static Fl_Widget *create() { build_imgs(); - return new ImageTest(TESTAREA_X, TESTAREA_Y, TESTAREA_W, TESTAREA_H); + return new Ut_Image_Test(UT_TESTAREA_X, UT_TESTAREA_Y, UT_TESTAREA_W, UT_TESTAREA_H); } // create method ends static uchar *img_gray_base; @@ -158,7 +158,9 @@ public: Fl_Radio_Button *rb_LXp1; Fl_Button *refresh; - ImageTest(int x, int y, int w, int h) : Fl_Group(x, y, w, h) { + Ut_Image_Test(int x, int y, int w, int h) + : Fl_Group(x, y, w, h) + { label("Testing Image Drawing\n\n" "This test renders four images, two of them with a checker board\n" "visible through the graphics. Color and gray gradients should be\n" @@ -166,34 +168,46 @@ public: align(FL_ALIGN_INSIDE|FL_ALIGN_BOTTOM|FL_ALIGN_LEFT|FL_ALIGN_WRAP); box(FL_BORDER_BOX); int cw = 90; - int ch = 270; + int ch = 200; int cx = x + w - cw - 5; int cy = y + 10; ctr_grp = new Fl_Group(cx, cy, cw, ch); ck_CB = new Fl_Check_Button(cx+10, cy+10, cw-20, 30, "CB"); - ck_CB->value(CB); + ck_CB->callback(refresh_imgs_CB, (void*)this); + ck_CB->value(cb); + ck_CB->tooltip("1 to show the checker board background for alpha images,\n" + "0 otherwise"); ck_IMG = new Fl_Check_Button(cx+10, cy+40, cw-20, 30, "IMG"); - ck_IMG->value(IMG); + ck_IMG->callback(refresh_imgs_CB, (void*)this); + ck_IMG->value(img); + ck_IMG->tooltip("1 to use Fl_RGB_Image for drawing images with transparency,\n" + "0 to use fl_draw_image() instead."); ck_FLIPH = new Fl_Check_Button(cx+10, cy+70, cw-20, 30, "FLIPH"); - ck_FLIPH->value(FLIPH); + ck_FLIPH->callback(refresh_imgs_CB, (void*)this); + ck_FLIPH->value(flip_h); + ck_FLIPH->tooltip("1 = Flip image horizontally (only if IMG == 0)\n" + "0 = Draw image normal, w/o horizontal flipping"); Fl_Group *rd_grp = new Fl_Group(cx+10, cy+100, cw-20, 90, "LX"); rb_LXp1 = new Fl_Radio_Button(cx+15, cy+105, cw-30, 20, "+1"); + rb_LXp1->callback(refresh_imgs_CB, (void*)this); rb_LX0 = new Fl_Radio_Button(cx+15, cy+125, cw-30, 20, "0"); + rb_LX0->callback(refresh_imgs_CB, (void*)this); + rb_LX0->tooltip("0 for default: ld() = 0, i.e. ld() defaults (internally) to w()*d()\n" + "+1: ld() = (w() + DX) * d()\n" + "-1 to flip image vertically: ld() = - ((w() + DX) * d())"); rb_LXm1 = new Fl_Radio_Button(cx+15, cy+145, cw-30, 20, "-1"); + rb_LXm1->callback(refresh_imgs_CB, (void*)this); rb_LX0->value(1); rd_grp->box(FL_BORDER_BOX); rd_grp->align(FL_ALIGN_INSIDE|FL_ALIGN_BOTTOM|FL_ALIGN_CENTER); rd_grp->end(); - refresh = new Fl_Button(cx+10, cy+ch-40, cw-20, 30, "Refresh"); - refresh->callback(refresh_imgs_CB, (void*)this); - ctr_grp->box(FL_BORDER_BOX); ctr_grp->end(); end(); // make sure this ImageTest group is closed @@ -206,15 +220,15 @@ public: int xx = x()+10, yy = y()+10; fl_color(FL_BLACK); fl_rect(xx, yy, 130, 130); - if (IMG) { + if (img) { i_rgb->draw(xx+1,yy+1); } else { - if (!FLIPH) { - fl_draw_image(img_rgb, xx+1, yy+1, 128, 128, 3, LX*((128+DX)*3)); + if (!flip_h) { + fl_draw_image(img_rgb, xx+1, yy+1, 128, 128, 3, lx*((128+dx)*3)); } else { - fl_draw_image(img_rgb, xx+1, yy+1, 128, 128,-3, LX*((128+DX)*3)); + fl_draw_image(img_rgb, xx+1, yy+1, 128, 128,-3, lx*((128+dx)*3)); } } fl_draw("RGB", xx+134, yy+64); @@ -224,19 +238,19 @@ public: xx = x()+10; yy = y()+10+134; 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 + 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); } - if (IMG) { + if (img) { i_rgba->draw(xx+1,yy+1); } else { - if (!FLIPH) { - fl_draw_image(img_rgba, xx+1, yy+1, 128, 128, 4, LX*((128+DX)*4)); + if (!flip_h) { + fl_draw_image(img_rgba, xx+1, yy+1, 128, 128, 4, lx*((128+dx)*4)); } else { - fl_draw_image(img_rgba, xx+1, yy+1, 128, 128,-4, LX*((128+DX)*4)); + fl_draw_image(img_rgba, xx+1, yy+1, 128, 128,-4, lx*((128+dx)*4)); } } fl_color(FL_BLACK); fl_draw("RGBA", xx+134, yy+64); @@ -245,15 +259,15 @@ public: xx = x()+10+200; yy = y()+10; fl_color(FL_BLACK); fl_rect(xx, yy, 130, 130); - if (IMG) { + if (img) { i_g->draw(xx+1,yy+1); } else { - if (!FLIPH) { - fl_draw_image(img_gray, xx+1, yy+1, 128, 128, 1, LX*((128+DX)*1)); + if (!flip_h) { + fl_draw_image(img_gray, xx+1, yy+1, 128, 128, 1, lx*((128+dx)*1)); } else { - fl_draw_image(img_gray, xx+1, yy+1, 128, 128,-1, LX*((128+DX)*1)); + fl_draw_image(img_gray, xx+1, yy+1, 128, 128,-1, lx*((128+dx)*1)); } } fl_draw("Gray", xx+134, yy+64); @@ -263,36 +277,36 @@ public: xx = x()+10+200; yy = y()+10+134; 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 + 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); } - if (IMG) { + if (img) { i_ga->draw(xx+1,yy+1); } else { - if (!FLIPH) { - fl_draw_image(img_gray_a, xx+1, yy+1, 128, 128, 2, LX*((128+DX)*2)); + if (!flip_h) { + fl_draw_image(img_gray_a, xx+1, yy+1, 128, 128, 2, lx*((128+dx)*2)); } else { - fl_draw_image(img_gray_a, xx+1, yy+1, 128, 128,-2, LX*((128+DX)*2)); + fl_draw_image(img_gray_a, xx+1, yy+1, 128, 128,-2, lx*((128+dx)*2)); } } fl_color(FL_BLACK); fl_draw("Gray+Alpha", xx+134, yy+64); } // draw method end }; -uchar *ImageTest::img_gray_base = 0; -uchar *ImageTest::img_gray_a_base = 0; -uchar *ImageTest::img_rgb_base = 0; -uchar *ImageTest::img_rgba_base = 0; -uchar *ImageTest::img_gray = 0; -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; - -UnitTest images(kTestImages, "Drawing Images", ImageTest::create); +uchar *Ut_Image_Test::img_gray_base = 0; +uchar *Ut_Image_Test::img_gray_a_base = 0; +uchar *Ut_Image_Test::img_rgb_base = 0; +uchar *Ut_Image_Test::img_rgba_base = 0; +uchar *Ut_Image_Test::img_gray = 0; +uchar *Ut_Image_Test::img_gray_a = 0; +uchar *Ut_Image_Test::img_rgb = 0; +uchar *Ut_Image_Test::img_rgba = 0; +Fl_RGB_Image *Ut_Image_Test::i_g = 0; +Fl_RGB_Image *Ut_Image_Test::i_ga = 0; +Fl_RGB_Image *Ut_Image_Test::i_rgb = 0; +Fl_RGB_Image *Ut_Image_Test::i_rgba = 0; + +UnitTest images(UT_TEST_IMAGES, "Drawing Images", Ut_Image_Test::create); |
