summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES5
-rw-r--r--FL/Fl_PNM_Image.H41
-rw-r--r--FL/Fl_Pixmap.H7
-rw-r--r--FL/Fl_XBM_Image.H41
-rw-r--r--FL/Fl_XPM_Image.H41
-rw-r--r--src/Fl_GIF_Image.cxx7
-rw-r--r--src/Fl_PNM_Image.cxx161
-rw-r--r--src/Fl_Shared_Image.cxx15
-rw-r--r--src/Fl_Tiled_Image.cxx133
-rw-r--r--src/Fl_XBM_Image.cxx88
-rw-r--r--src/Fl_XPM_Image.cxx129
-rw-r--r--src/Makefile8
-rw-r--r--src/makedepend3
-rw-r--r--test/Makefile82
-rw-r--r--test/image.cxx24
-rw-r--r--test/pixmap_browser.cxx120
-rw-r--r--test/tile.xpm120
-rw-r--r--test/tiled_image.cxx103
18 files changed, 982 insertions, 146 deletions
diff --git a/CHANGES b/CHANGES
index 6e7cd2447..e4bcf9880 100644
--- a/CHANGES
+++ b/CHANGES
@@ -5,9 +5,10 @@ CHANGES IN FLTK 1.1.0b6
environment.
- Added new fl_beep() function to do audible
notifications of various types.
- - Added new Fl_GIF_Image, Fl_PNG_Image, and
- Fl_JPEG_Image classes.
+ - Added new Fl_GIF_Image, Fl_JPEG_Image, Fl_PNG_Image,
+ Fl_PNM_Image, Fl_XBM_Image, and Fl_XPM_Image classes.
- Added new Fl_Shared_Image class, a la FLTK 2.0.
+ - Added new Fl_Tiled_Image class for tiled backgrounds.
- Added new copy(), desaturate(), inactive(), and
color_average() methods to the Fl_Image classes.
- Added a horizontal scrollbar to the Fl_Help_View
diff --git a/FL/Fl_PNM_Image.H b/FL/Fl_PNM_Image.H
new file mode 100644
index 000000000..b28baa3a0
--- /dev/null
+++ b/FL/Fl_PNM_Image.H
@@ -0,0 +1,41 @@
+//
+// "$Id: Fl_PNM_Image.H,v 1.1.2.1 2001/11/24 18:07:57 easysw Exp $"
+//
+// PNM image header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2001 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
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef Fl_PNM_Image_H
+#define Fl_PNM_Image_H
+# include "Fl_Image.H"
+
+class FL_EXPORT Fl_PNM_Image : public Fl_RGB_Image {
+
+ public:
+
+ Fl_PNM_Image(const char* filename);
+};
+
+#endif
+
+//
+// End of "$Id: Fl_PNM_Image.H,v 1.1.2.1 2001/11/24 18:07:57 easysw Exp $".
+//
diff --git a/FL/Fl_Pixmap.H b/FL/Fl_Pixmap.H
index 60bf77b53..64086fde8 100644
--- a/FL/Fl_Pixmap.H
+++ b/FL/Fl_Pixmap.H
@@ -1,5 +1,5 @@
//
-// "$Id: Fl_Pixmap.H,v 1.6.2.8.2.5 2001/11/22 15:35:01 easysw Exp $"
+// "$Id: Fl_Pixmap.H,v 1.6.2.8.2.6 2001/11/24 18:07:57 easysw Exp $"
//
// Pixmap header file for the Fast Light Tool Kit (FLTK).
//
@@ -39,6 +39,9 @@ class FL_EXPORT Fl_Pixmap : public Fl_Image {
void copy_data();
void delete_data();
void set_data(const char * const *p);
+
+ protected:
+
void measure();
public:
@@ -65,5 +68,5 @@ class FL_EXPORT Fl_Pixmap : public Fl_Image {
#endif
//
-// End of "$Id: Fl_Pixmap.H,v 1.6.2.8.2.5 2001/11/22 15:35:01 easysw Exp $".
+// End of "$Id: Fl_Pixmap.H,v 1.6.2.8.2.6 2001/11/24 18:07:57 easysw Exp $".
//
diff --git a/FL/Fl_XBM_Image.H b/FL/Fl_XBM_Image.H
new file mode 100644
index 000000000..df41af65e
--- /dev/null
+++ b/FL/Fl_XBM_Image.H
@@ -0,0 +1,41 @@
+//
+// "$Id: Fl_XBM_Image.H,v 1.1.2.1 2001/11/24 18:07:57 easysw Exp $"
+//
+// XBM image header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2001 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
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef Fl_XBM_Image_H
+#define Fl_XBM_Image_H
+# include "Fl_Bitmap.H"
+
+class FL_EXPORT Fl_XBM_Image : public Fl_Bitmap {
+
+ public:
+
+ Fl_XBM_Image(const char* filename);
+};
+
+#endif // !Fl_XBM_Image_H
+
+//
+// End of "$Id: Fl_XBM_Image.H,v 1.1.2.1 2001/11/24 18:07:57 easysw Exp $".
+//
diff --git a/FL/Fl_XPM_Image.H b/FL/Fl_XPM_Image.H
new file mode 100644
index 000000000..f6643e99c
--- /dev/null
+++ b/FL/Fl_XPM_Image.H
@@ -0,0 +1,41 @@
+//
+// "$Id: Fl_XPM_Image.H,v 1.1.2.1 2001/11/24 18:07:57 easysw Exp $"
+//
+// XPM image header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2001 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
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef Fl_XPM_Image_H
+#define Fl_XPM_Image_H
+# include "Fl_Pixmap.H"
+
+class FL_EXPORT Fl_XPM_Image : public Fl_Pixmap {
+
+ public:
+
+ Fl_XPM_Image(const char* filename);
+};
+
+#endif // !Fl_XPM_Image
+
+//
+// End of "$Id: Fl_XPM_Image.H,v 1.1.2.1 2001/11/24 18:07:57 easysw Exp $".
+//
diff --git a/src/Fl_GIF_Image.cxx b/src/Fl_GIF_Image.cxx
index 51cbcff70..99ba3b6ed 100644
--- a/src/Fl_GIF_Image.cxx
+++ b/src/Fl_GIF_Image.cxx
@@ -1,10 +1,9 @@
//
-// "$Id: Fl_GIF_Image.cxx,v 1.1.2.4 2001/11/24 02:46:19 easysw Exp $"
+// "$Id: Fl_GIF_Image.cxx,v 1.1.2.5 2001/11/24 18:07:57 easysw Exp $"
//
// Fl_GIF_Image routines.
//
-// Copyright 1997-2001 by Easy Software Products.
-// Image support donated by Matthias Melcher, Copyright 2000.
+// Copyright 1997-2001 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
@@ -366,5 +365,5 @@ Fl_GIF_Image::Fl_GIF_Image(const char *infname) : Fl_Pixmap((char *const*)0) {
//
-// End of "$Id: Fl_GIF_Image.cxx,v 1.1.2.4 2001/11/24 02:46:19 easysw Exp $".
+// End of "$Id: Fl_GIF_Image.cxx,v 1.1.2.5 2001/11/24 18:07:57 easysw Exp $".
//
diff --git a/src/Fl_PNM_Image.cxx b/src/Fl_PNM_Image.cxx
new file mode 100644
index 000000000..059cdb22e
--- /dev/null
+++ b/src/Fl_PNM_Image.cxx
@@ -0,0 +1,161 @@
+//
+// "$Id: Fl_PNM_Image.cxx,v 1.1.2.1 2001/11/24 18:07:57 easysw Exp $"
+//
+// Fl_PNM_Image routines.
+//
+// Copyright 1997-2001 by Easy Software Products.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+// Contents:
+//
+//
+
+//
+// Include necessary header files...
+//
+
+#include <FL/Fl.H>
+#include <FL/Fl_PNM_Image.H>
+#include "config.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+
+//
+// 'Fl_PNM_Image::Fl_PNM_Image()' - Load a PNM image...
+//
+
+Fl_PNM_Image::Fl_PNM_Image(const char *name) // I - File to read
+ : Fl_RGB_Image(0,0,0) {
+ FILE *fp; // File pointer
+ int x, y; // Looping vars
+ char line[1024], // Input line
+ *lineptr; // Pointer in line
+ uchar *ptr, // Pointer to pixel values
+ byte, // Byte from file
+ bit; // Bit in pixel
+ int format, // Format of PNM file
+ val, // Pixel value
+ maxval; // Maximum pixel value
+
+
+ //
+ // Read the file header in the format:
+ //
+ // Pformat
+ // # comment1
+ // # comment2
+ // ...
+ // # commentN
+ // width
+ // height
+ // max sample
+ //
+
+ lineptr = fgets(line, sizeof(line), fp);
+ lineptr ++;
+
+ format = atoi(lineptr);
+ while (isdigit(*lineptr)) lineptr ++;
+
+ while (lineptr != NULL && w() == 0) {
+ if (*lineptr == '\0' || *lineptr == '#') {
+ lineptr = fgets(line, sizeof(line), fp);
+ } else if (isdigit(*lineptr)) {
+ w(atoi(lineptr));
+ while (isdigit(*lineptr)) lineptr ++;
+ } else lineptr ++;
+ }
+
+ while (lineptr != NULL && h()) {
+ if (*lineptr == '\0' || *lineptr == '#') {
+ lineptr = fgets(line, sizeof(line), fp);
+ } else if (isdigit(*lineptr)) {
+ h(atoi(lineptr));
+ while (isdigit(*lineptr)) lineptr ++;
+ } else lineptr ++;
+ }
+
+ if (format != 1 && format != 4) {
+ maxval = 0;
+
+ while (lineptr != NULL && maxval == 0) {
+ if (*lineptr == '\0' || *lineptr == '#') {
+ lineptr = fgets(line, sizeof(line), fp);
+ } else if (isdigit(*lineptr)) {
+ maxval = atoi(lineptr);
+ while (isdigit(*lineptr)) lineptr ++;
+ } else lineptr ++;
+ }
+ } else maxval = 1;
+
+ // Allocate memory...
+ if (format == 1 || format == 2 || format == 4 || format == 5) d(1);
+ else d(3);
+
+ array = new uchar[w() * h() * d()];
+
+ // Read the image file...
+ for (y = 0; y < h(); y ++) {
+ ptr = (uchar *)array + y * w() * d();
+
+ switch (format) {
+ case 1 :
+ case 2 :
+ for (x = w(); x > 0; x --)
+ if (fscanf(fp, "%d", &val) == 1) *ptr++ = 255 * val / maxval;
+ break;
+
+ case 3 :
+ for (x = w(); x > 0; x --) {
+ if (fscanf(fp, "%d", &val) == 1) *ptr++ = 255 * val / maxval;
+ if (fscanf(fp, "%d", &val) == 1) *ptr++ = 255 * val / maxval;
+ if (fscanf(fp, "%d", &val) == 1) *ptr++ = 255 * val / maxval;
+ }
+ break;
+
+ case 4 :
+ for (x = w(), byte = getc(fp), bit = 128; x > 0; x --) {
+ if (byte & bit) *ptr++ = 255;
+ else *ptr++ = 0;
+
+ if (bit > 1) bit >>= 1;
+ else {
+ bit = 128;
+ byte = getc(fp);
+ }
+ }
+ break;
+
+ case 5 :
+ case 6 :
+ fread(ptr, w(), d(), fp);
+ break;
+ }
+ }
+
+ fclose(fp);
+}
+
+
+//
+// End of "$Id: Fl_PNM_Image.cxx,v 1.1.2.1 2001/11/24 18:07:57 easysw Exp $".
+//
diff --git a/src/Fl_Shared_Image.cxx b/src/Fl_Shared_Image.cxx
index fd345412f..996ea39ff 100644
--- a/src/Fl_Shared_Image.cxx
+++ b/src/Fl_Shared_Image.cxx
@@ -1,5 +1,5 @@
//
-// "$Id: Fl_Shared_Image.cxx,v 1.23.2.1 2001/11/24 02:46:19 easysw Exp $"
+// "$Id: Fl_Shared_Image.cxx,v 1.23.2.2 2001/11/24 18:07:57 easysw Exp $"
//
// Shared image code for the Fast Light Tool Kit (FLTK).
//
@@ -32,8 +32,9 @@
#include <FL/Fl_GIF_Image.H>
#include <FL/Fl_JPEG_Image.H>
#include <FL/Fl_PNG_Image.H>
-//#include <FL/Fl_XBM_Image.H>
-//#include <FL/Fl_XPM_Image.H>
+#include <FL/Fl_PNM_Image.H>
+#include <FL/Fl_XBM_Image.H>
+#include <FL/Fl_XPM_Image.H>
//
@@ -224,6 +225,12 @@ Fl_Shared_Image::reload() {
else if (memcmp(header, "\377\330\377", 3) == 0 && // Start-of-Image
header[3] >= 0xe0 && header[3] <= 0xef) // APPn
img = new Fl_JPEG_Image(name_);
+ else if (header[0] == 'P' && header[1] >= '1' && header[1] <= '6') // Portable anymap
+ img = new Fl_PNM_Image(name_);
+ else if (memcmp(header, "#define", 7) == 0) // XBM file
+ img = new Fl_XBM_Image(name_);
+ else if (memcmp(header, "/* XPM */", 9) == 0) // XPM file
+ img = new Fl_XPM_Image(name_);
else
img = 0;
@@ -369,5 +376,5 @@ Fl_Shared_Image::get(const char *n, int W, int H) {
//
-// End of "$Id: Fl_Shared_Image.cxx,v 1.23.2.1 2001/11/24 02:46:19 easysw Exp $".
+// End of "$Id: Fl_Shared_Image.cxx,v 1.23.2.2 2001/11/24 18:07:57 easysw Exp $".
//
diff --git a/src/Fl_Tiled_Image.cxx b/src/Fl_Tiled_Image.cxx
new file mode 100644
index 000000000..fc652ca43
--- /dev/null
+++ b/src/Fl_Tiled_Image.cxx
@@ -0,0 +1,133 @@
+//
+// "$Id: Fl_Tiled_Image.cxx,v 1.1.2.1 2001/11/24 18:07:57 easysw Exp $"
+//
+// Tiled image code for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2001 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
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#include <FL/Fl.H>
+#include <FL/Fl_Tiled_Image.H>
+#include <FL/fl_draw.H>
+
+
+//
+// 'Fl_Tiled_Image::Fl_Tiled_Image()' - Constructor.
+//
+// Use a width and height of 0 to tile the whole window/widget.
+//
+
+Fl_Tiled_Image::Fl_Tiled_Image(Fl_Image *i, // I - Image to tile
+ int W, // I - Width of tiled area
+ int H) : // I - Height of tiled area
+ Fl_Image(W,H,0) {
+ image_ = i;
+ alloc_image_ = 0;
+
+ if (W == 0) w(Fl::w());
+ if (H == 0) h(Fl::h());
+}
+
+
+//
+// 'Fl_Tiled_Image::~Fl_Tiled_Image()' - Destructor.
+//
+
+Fl_Tiled_Image::~Fl_Tiled_Image() {
+ if (alloc_image_) delete image_;
+}
+
+
+//
+// 'Fl_Tiled_Image::copy()' - Copy and resize a tiled image...
+//
+
+Fl_Image * // O - New image
+Fl_Tiled_Image::copy(int W, // I - New width
+ int H) { // I - New height
+ if (W == w() && H == h()) return this;
+ else return new Fl_Tiled_Image(image_, W, H);
+}
+
+
+//
+// 'Fl_Tiled_Image::color_average()' - Blend colors...
+//
+
+void
+Fl_Tiled_Image::color_average(Fl_Color c, // I - Color to blend with
+ float i) { // I - Blend fraction
+ Fl_Image *temp = image_->copy();
+
+ temp->color_average(c, i);
+
+ image_ = temp;
+ alloc_image_ = 1;
+}
+
+
+//
+// 'Fl_Tiled_Image::desaturate()' - Convert the image to grayscale...
+//
+
+void
+Fl_Tiled_Image::desaturate() {
+ Fl_Image *temp = image_->copy();
+
+ temp->desaturate();
+
+ image_ = temp;
+ alloc_image_ = 1;
+}
+
+
+//
+// 'Fl_Tiled_Image::draw()' - Draw a shared image...
+//
+
+void
+Fl_Tiled_Image::draw(int X, // I - Starting X position
+ int Y, // I - Starting Y position
+ int W, // I - Width of area to be filled
+ int H, // I - Height of area to be filled
+ int cx, // I - "Source" X position
+ int cy) { // I - "Source" Y position
+ if (!image_->w() || !image_->h()) return;
+ if (W == 0) W = Fl::w();
+ if (H == 0) H = Fl::h();
+
+ X += cx;
+ Y += cy;
+
+ X = X - (X % image_->w());
+ Y = Y - (Y % image_->h());
+
+ W += X;
+ H += Y;
+
+ for (int yy = Y; yy < H; yy += image_->h())
+ for (int xx = X; xx < W; xx += image_->w())
+ image_->draw(xx, yy);
+}
+
+
+//
+// End of "$Id: Fl_Tiled_Image.cxx,v 1.1.2.1 2001/11/24 18:07:57 easysw Exp $".
+//
diff --git a/src/Fl_XBM_Image.cxx b/src/Fl_XBM_Image.cxx
new file mode 100644
index 000000000..9eedcad2f
--- /dev/null
+++ b/src/Fl_XBM_Image.cxx
@@ -0,0 +1,88 @@
+//
+// "$Id: Fl_XBM_Image.cxx,v 1.1.2.1 2001/11/24 18:07:57 easysw Exp $"
+//
+// Fl_XBM_Image routines.
+//
+// Copyright 1997-2001 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
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+// Contents:
+//
+//
+
+//
+// Include necessary header files...
+//
+
+#include <FL/Fl.H>
+#include <FL/Fl_XBM_Image.H>
+#include "config.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+Fl_XBM_Image::Fl_XBM_Image(const char *name) : Fl_Bitmap((const char *)0,0,0) {
+ FILE *f;
+ uchar *data;
+
+ if ((f = fopen(name, "rb")) == NULL) return;
+
+ char buffer[1024];
+ char junk[1024];
+ int wh[2]; // width and height
+ int i;
+ for (i = 0; i<2; i++) {
+ for (;;) {
+ if (!fgets(buffer,1024,f)) return;
+ int r = sscanf(buffer,"#define %s %d",junk,&wh[i]);
+ if (r >= 2) break;
+ }
+ }
+
+ // skip to data array:
+ for (;;) {
+ if (!fgets(buffer,1024,f)) return;
+ if (!strncmp(buffer,"static ",7)) break;
+ }
+
+ // Allocate memory...
+ w(wh[0]);
+ h(wh[1]);
+
+ int n = ((wh[0]+7)/8)*wh[1];
+ array = new uchar[((w() + 7) / 8) * h()];
+
+ // read the data:
+ for (i = 0, data = (uchar *)array; i < n;) {
+ if (!fgets(buffer,1024,f)) return;
+ const char *a = buffer;
+ while (*a && i<n) {
+ int t;
+ if (sscanf(a," 0x%x",&t)>0) *data++ = t;
+ while (*a && *a++ != ',');
+ }
+ }
+
+ fclose(f);
+}
+
+
+//
+// End of "$Id: Fl_XBM_Image.cxx,v 1.1.2.1 2001/11/24 18:07:57 easysw Exp $".
+//
diff --git a/src/Fl_XPM_Image.cxx b/src/Fl_XPM_Image.cxx
new file mode 100644
index 000000000..d29429599
--- /dev/null
+++ b/src/Fl_XPM_Image.cxx
@@ -0,0 +1,129 @@
+//
+// "$Id: Fl_XPM_Image.cxx,v 1.1.2.1 2001/11/24 18:07:57 easysw Exp $"
+//
+// Fl_XPM_Image routines.
+//
+// Copyright 1997-2001 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
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+// Contents:
+//
+//
+
+//
+// Include necessary header files...
+//
+
+#include <FL/Fl.H>
+#include <FL/Fl_XPM_Image.H>
+#include "config.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+
+//
+// 'hexdigit()' - Convert a hex digit to an integer.
+//
+
+static int hexdigit(int x) { // I - Hex digit...
+ if (isdigit(x)) return x-'0';
+ if (isupper(x)) return x-'A'+10;
+ if (islower(x)) return x-'a'+10;
+ return 20;
+}
+
+#define MAXSIZE 2048
+#define INITIALLINES 256
+
+Fl_XPM_Image::Fl_XPM_Image(const char *name) : Fl_Pixmap((char *const*)0) {
+ FILE *f;
+
+ if ((f = fopen(name, "rb")) == NULL) return;
+
+ // read all the c-strings out of the file:
+ char** new_data = new char *[INITIALLINES];
+ char** temp_data;
+ int malloc_size = INITIALLINES;
+ char buffer[MAXSIZE+20];
+ int i = 0;
+ while (fgets(buffer,MAXSIZE+20,f)) {
+ if (buffer[0] != '\"') continue;
+ char *myp = buffer;
+ char *q = buffer+1;
+ while (*q != '\"' && myp < buffer+MAXSIZE) {
+ if (*q == '\\') switch (*++q) {
+ case '\r':
+ case '\n':
+ fgets(q,(buffer+MAXSIZE+20)-q,f); break;
+ case 0:
+ break;
+ case 'x': {
+ q++;
+ int n = 0;
+ for (int x = 0; x < 3; x++) {
+ int d = hexdigit(*q);
+ if (d > 15) break;
+ n = (n<<4)+d;
+ q++;
+ }
+ *myp++ = n;
+ } break;
+ default: {
+ int c = *q++;
+ if (c>='0' && c<='7') {
+ c -= '0';
+ for (int x=0; x<2; x++) {
+ int d = hexdigit(*q);
+ if (d>7) break;
+ c = (c<<3)+d;
+ q++;
+ }
+ }
+ *myp++ = c;
+ } break;
+ } else {
+ *myp++ = *q++;
+ }
+ }
+ *myp++ = 0;
+ if (i >= malloc_size) {
+ temp_data = new char *[malloc_size + INITIALLINES];
+ memcpy(temp_data, new_data, sizeof(char *) * malloc_size);
+ delete[] new_data;
+ new_data = temp_data;
+ malloc_size += INITIALLINES;
+ }
+ new_data[i] = new char[myp-buffer+1];
+ memcpy(new_data[i], buffer,myp-buffer);
+ new_data[i][myp-buffer] = 0;
+ i++;
+ }
+
+ fclose(f);
+
+ data(new_data, i);
+ measure();
+}
+
+
+//
+// End of "$Id: Fl_XPM_Image.cxx,v 1.1.2.1 2001/11/24 18:07:57 easysw Exp $".
+//
diff --git a/src/Makefile b/src/Makefile
index e72c809f0..6b7a920bb 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,5 +1,5 @@
#
-# "$Id: Makefile,v 1.18.2.14.2.19 2001/11/24 02:46:19 easysw Exp $"
+# "$Id: Makefile,v 1.18.2.14.2.20 2001/11/24 18:07:57 easysw Exp $"
#
# Library makefile for the Fast Light Tool Kit (FLTK).
#
@@ -68,6 +68,7 @@ CPPFILES = \
Fl_Pack.cxx \
Fl_Pixmap.cxx \
Fl_PNG_Image.cxx \
+ Fl_PNM_Image.cxx \
Fl_Positioner.cxx \
Fl_Progress.cxx \
Fl_Repeat_Button.cxx \
@@ -84,6 +85,7 @@ CPPFILES = \
Fl_Text_Display.cxx \
Fl_Text_Editor.cxx \
Fl_Tile.cxx \
+ Fl_Tiled_Image.cxx \
Fl_Tooltip.cxx \
Fl_Valuator.cxx \
Fl_Value_Input.cxx \
@@ -95,6 +97,8 @@ CPPFILES = \
Fl_Window_hotspot.cxx \
Fl_Window_iconize.cxx \
Fl_Wizard.cxx \
+ Fl_XBM_Image.cxx \
+ Fl_XPM_Image.cxx \
Fl_abort.cxx \
Fl_add_idle.cxx \
Fl_arg.cxx \
@@ -280,5 +284,5 @@ uninstall:
#
-# End of "$Id: Makefile,v 1.18.2.14.2.19 2001/11/24 02:46:19 easysw Exp $".
+# End of "$Id: Makefile,v 1.18.2.14.2.20 2001/11/24 18:07:57 easysw Exp $".
#
diff --git a/src/makedepend b/src/makedepend
index e37cd9c11..e3ce1c961 100644
--- a/src/makedepend
+++ b/src/makedepend
@@ -207,6 +207,9 @@ Fl_Text_Editor.o: ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
Fl_Text_Editor.o: ../FL/Fl_Text_Buffer.H
Fl_Tile.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H ../FL/Fl_Tile.H
Fl_Tile.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Window.H
+Fl_Tiled_Image.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H
+Fl_Tiled_Image.o: ../FL/Fl_Tiled_Image.H ../FL/Fl_Image.H ../FL/x.H
+Fl_Tiled_Image.o: ../FL/Fl_Window.H
Fl_Tooltip.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H
Fl_Tooltip.o: ../FL/Fl_Menu_Window.H ../FL/Fl_Single_Window.H
Fl_Tooltip.o: ../FL/Fl_Window.H ../FL/Fl_Box.H ../FL/Fl_Widget.H
diff --git a/test/Makefile b/test/Makefile
index 9e6dc2256..84b4b554f 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -1,5 +1,5 @@
#
-# "$Id: Makefile,v 1.19.2.7.2.11 2001/11/24 02:46:19 easysw Exp $"
+# "$Id: Makefile,v 1.19.2.7.2.12 2001/11/24 18:07:57 easysw Exp $"
#
# Test/example program makefile for the Fast Light Tool Kit (FLTK).
#
@@ -26,20 +26,66 @@
include ../makeinclude
CPPFILES =\
- CubeMain.cxx CubeView.cxx adjuster.cxx arc.cxx ask.cxx \
- bitmap.cxx boxtype.cxx browser.cxx button.cxx \
- buttons.cxx checkers.cxx clock.cxx colbrowser.cxx \
- color_chooser.cxx cube.cxx cursor.cxx curve.cxx demo.cxx \
- doublebuffer.cxx editor.cxx file_chooser.cxx fonts.cxx \
- forms.cxx fractals.cxx fullscreen.cxx gl_overlay.cxx \
- glpuzzle.cxx hello.cxx help.cxx iconize.cxx image.cxx input.cxx \
- keyboard.cxx label.cxx list_visuals.cxx mandelbrot.cxx \
- menubar.cxx message.cxx minimum.cxx navigation.cxx \
- output.cxx overlay.cxx pixmap.cxx pixmap_browser.cxx \
- radio.cxx resizebox.cxx scroll.cxx shape.cxx shiny.cxx \
- subwindow.cxx symbols.cxx tabs.cxx tile.cxx \
- valuators.cxx fast_slow.cxx resize.cxx pack.cxx \
- inactive.cxx line_style.cxx
+ adjuster.cxx \
+ arc.cxx \
+ ask.cxx \
+ bitmap.cxx \
+ boxtype.cxx \
+ browser.cxx \
+ button.cxx \
+ buttons.cxx \
+ checkers.cxx \
+ clock.cxx \
+ colbrowser.cxx \
+ color_chooser.cxx \
+ cube.cxx \
+ CubeMain.cxx \
+ CubeView.cxx \
+ cursor.cxx \
+ curve.cxx \
+ demo.cxx \
+ doublebuffer.cxx \
+ editor.cxx \
+ fast_slow.cxx \
+ file_chooser.cxx \
+ fonts.cxx \
+ forms.cxx \
+ fractals.cxx \
+ fullscreen.cxx \
+ gl_overlay.cxx \
+ glpuzzle.cxx \
+ hello.cxx \
+ help.cxx \
+ iconize.cxx \
+ image.cxx \
+ inactive.cxx \
+ input.cxx \
+ keyboard.cxx \
+ label.cxx \
+ line_style.cxx \
+ list_visuals.cxx \
+ mandelbrot.cxx \
+ menubar.cxx \
+ message.cxx \
+ minimum.cxx \
+ navigation.cxx \
+ output.cxx \
+ overlay.cxx \
+ pack.cxx \
+ pixmap_browser.cxx \
+ pixmap.cxx \
+ radio.cxx \
+ resizebox.cxx \
+ resize.cxx \
+ scroll.cxx \
+ shape.cxx \
+ shiny.cxx \
+ subwindow.cxx \
+ symbols.cxx \
+ tabs.cxx \
+ tile.cxx \
+ tiled_image.cxx \
+ valuators.cxx
ALL = \
adjuster$(EXEEXT) \
@@ -90,6 +136,7 @@ ALL = \
symbols$(EXEEXT) \
tabs$(EXEEXT) \
tile$(EXEEXT) \
+ tiled_image$(EXEEXT) \
valuators$(EXEEXT)
GLALL = \
@@ -129,9 +176,6 @@ file_chooser$(EXEEXT): file_chooser.cxx
help$(EXEEXT): help.cxx
echo Compiling and linking $@...
$(CXX) -I.. $(CXXFLAGS) help.cxx -o $@ $(LINKFLTK) $(LDLIBS) $(IMAGELIBS)
-image$(EXEEXT): image.cxx
- echo Compiling and linking $@...
- $(CXX) -I.. $(CXXFLAGS) image.cxx -o $@ $(LINKFLTK) $(LDLIBS) $(IMAGELIBS)
keyboard$(EXEEXT): keyboard.cxx keyboard_ui.cxx
echo Compiling and linking $@...
$(CXX) -I.. $(CXXFLAGS) keyboard.cxx $(LINKFLTK) $(LDLIBS) -o $@
@@ -192,5 +236,5 @@ uninstall:
@echo Nothing to uninstall in test directory.
#
-# End of "$Id: Makefile,v 1.19.2.7.2.11 2001/11/24 02:46:19 easysw Exp $".
+# End of "$Id: Makefile,v 1.19.2.7.2.12 2001/11/24 18:07:57 easysw Exp $".
#
diff --git a/test/image.cxx b/test/image.cxx
index 31205eb00..3a7baebbe 100644
--- a/test/image.cxx
+++ b/test/image.cxx
@@ -1,5 +1,5 @@
//
-// "$Id: image.cxx,v 1.6.2.3.2.4 2001/11/24 02:46:19 easysw Exp $"
+// "$Id: image.cxx,v 1.6.2.3.2.5 2001/11/24 18:07:57 easysw Exp $"
//
// Fl_Image test program for the Fast Light Tool Kit (FLTK).
//
@@ -30,7 +30,7 @@
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Button.H>
-#include <FL/Fl_Shared_Image.H>
+#include <FL/Fl_Image.H>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
@@ -96,9 +96,9 @@ int arg(int argc, char **argv, int &i) {
}
int main(int argc, char **argv) {
+#ifndef WIN32
int i = 1;
-#ifndef WIN32
Fl::args(argc,argv,i,arg);
if (visid >= 0) {
@@ -123,21 +123,11 @@ int main(int argc, char **argv) {
window.color(FL_WHITE);
Fl_Button b(140,160,120,120,"Image w/Alpha"); ::b = &b;
- Fl_Image *rgb;
+ Fl_RGB_Image *rgb;
Fl_Image *dergb;
- if (argv[1]) {
- rgb = Fl_Shared_Image::get(argv[1]);
- if (rgb->w() > 100 || rgb->h() > 100) {
- if (rgb->w() > rgb->h()) rgb = rgb->copy(100, 100 * rgb->h() / rgb->w());
- else rgb = rgb->copy(100 * rgb->w() / rgb->h(), 100);
- }
- b.label(argv[1]);
- } else {
- make_image();
- rgb = new Fl_RGB_Image(image, width, height,4);
- }
-
+ make_image();
+ rgb = new Fl_RGB_Image(image, width, height,4);
dergb = rgb->copy();
dergb->inactive();
@@ -165,5 +155,5 @@ int main(int argc, char **argv) {
}
//
-// End of "$Id: image.cxx,v 1.6.2.3.2.4 2001/11/24 02:46:19 easysw Exp $".
+// End of "$Id: image.cxx,v 1.6.2.3.2.5 2001/11/24 18:07:57 easysw Exp $".
//
diff --git a/test/pixmap_browser.cxx b/test/pixmap_browser.cxx
index 3e02e9f0a..3a9a53002 100644
--- a/test/pixmap_browser.cxx
+++ b/test/pixmap_browser.cxx
@@ -1,10 +1,7 @@
//
-// "$Id: pixmap_browser.cxx,v 1.5.2.4.2.2 2001/09/30 17:37:06 easysw Exp $"
+// "$Id: pixmap_browser.cxx,v 1.5.2.4.2.3 2001/11/24 18:07:57 easysw Exp $"
//
-// Another pixmap test program for the Fast Light Tool Kit (FLTK).
-//
-// On purpose, I do NOT provide a fltk method to turn a file
-// into a pixmap. This program uses a rather simplistic one.
+// A shared image test program for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2001 by Bill Spitzak and others.
//
@@ -30,9 +27,7 @@
#include <FL/Fl_Box.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Button.H>
-#include <FL/Fl_Pixmap.H>
-#include <ctype.h>
-#include <stdio.h>
+#include <FL/Fl_Shared_Image.H>
#include <string.h>
#include <errno.h>
#include <FL/Fl_File_Chooser.H>
@@ -40,107 +35,39 @@
Fl_Box *b;
Fl_Window *w;
+Fl_Shared_Image *img;
-char **data;
-int sizeofdata;
-int numlines;
-static int hexdigit(int x) {
- if (isdigit(x)) return x-'0';
- if (isupper(x)) return x-'A'+10;
- if (islower(x)) return x-'a'+10;
- return 20;
-}
+static char name[1024];
-int load_file(const char *name) {
- FILE *f = fopen(name,"r");
- if (!f) {
- fl_message("Can't open %s, %s",name,strerror(errno));
- return 0;
- }
- if (data) {
- for (int i=numlines; i--;) delete[] data[i];
- }
-#define BUFSIZE 2048
- char buffer[BUFSIZE];
- int i = 0;
- while (fgets(buffer, BUFSIZE, f)) {
- if (buffer[0] != '\"') continue;
- char *p = buffer;
- char *q = buffer+1;
- while (*q != '\"') {
- if (*q == '\\') switch (*++q) {
- case '\n':
- fgets(q,(buffer+BUFSIZE)-q,f); break;
- case 0:
- break;
- case 'x': {
- q++;
- int n = 0;
- for (int x = 0; x < 3; x++) {
- int d = hexdigit(*q);
- if (d > 15) break;
- n = (n<<4)+d;
- q++;
- }
- *p++ = n;
- } break;
- default: {
- int c = *q++;
- if (c>='0' && c<='7') {
- c -= '0';
- for (int x=0; x<2; x++) {
- int d = hexdigit(*q);
- if (d>7) break;
- c = (c<<3)+d;
- q++;
- }
- }
- *p++ = c;
- } break;
- } else {
- *p++ = *q++;
- }
- }
- *p++ = 0;
- if (i >= sizeofdata) {
- sizeofdata = 2*sizeofdata+100;
- char **newdata = new char *[sizeofdata];
- for (int j=0; j<i; j++) newdata[j] = data[j];
- delete[] data;
- data = newdata;
- }
- data[i] = new char[p-buffer];
- memcpy(data[i],buffer,p-buffer);
- i++;
+void load_file(const char *n) {
+ if (img) img->release();
+
+ img = Fl_Shared_Image::get(n);
+ if (img->w() > b->w() || img->h() > b->h()) {
+ Fl_Image *temp;
+ if (img->w() > img->h()) temp = img->copy(b->w(), b->h() * img->h() / img->w());
+ else temp = img->copy(b->w() * img->w() / img->h(), b->h());
+
+ img->release();
+ img = (Fl_Shared_Image *)temp;
}
- numlines = i;
- fclose(f);
- return i;
-}
-Fl_Pixmap *pixmap;
-void newpixmap() {
- delete pixmap;
- pixmap = new Fl_Pixmap(data);
- b->image(pixmap);
+ b->label(name);
+ b->image(img);
b->redraw();
- w->redraw();
}
-static char name[1024];
-
void file_cb(const char *n) {
if (!strcmp(name,n)) return;
- if (!load_file(n)) return;
+ load_file(n);
strcpy(name,n);
w->label(name);
- newpixmap();
}
void button_cb(Fl_Widget *,void *) {
fl_file_chooser_callback(file_cb);
- fl_file_chooser("XPM file","*.xpm",name);
+ fl_file_chooser("Image file?","*.{gif,jpg,pbm,pgm,png,ppm,xbm,xpm}", name);
fl_file_chooser_callback(0);
}
@@ -152,19 +79,20 @@ int arg(int, char **argv, int &i) {
int main(int argc, char **argv) {
int i = 1;
- if (Fl::args(argc,argv,i,arg) < argc)
- Fl::fatal(" -8 # : use default visual\n%s\n",Fl::help);
+ Fl::args(argc,argv,i,arg);
Fl_Window window(400,400); ::w = &window;
Fl_Box b(0,0,window.w(),window.h()); ::b = &b;
+ b.box(FL_FLAT_BOX);
Fl_Button button(5,5,100,35,"load");
button.callback(button_cb);
if (!dvisual) Fl::visual(FL_RGB);
+ if (argv[1]) load_file(argv[1]);
window.resizable(window);
window.show(argc,argv);
return Fl::run();
}
//
-// End of "$Id: pixmap_browser.cxx,v 1.5.2.4.2.2 2001/09/30 17:37:06 easysw Exp $".
+// End of "$Id: pixmap_browser.cxx,v 1.5.2.4.2.3 2001/11/24 18:07:57 easysw Exp $".
//
diff --git a/test/tile.xpm b/test/tile.xpm
new file mode 100644
index 000000000..49f17fd02
--- /dev/null
+++ b/test/tile.xpm
@@ -0,0 +1,120 @@
+/* XPM */
+static char * tile_xpm[] = {
+"100 100 17 1",
+" c None",
+". c #565656",
+"+ c #888888",
+"@ c #A8A8A8",
+"# c #8E8E8E",
+"$ c #A0A0A0",
+"% c #6E6E6E",
+"& c #727272",
+"* c #BFBFBF",
+"= c #989898",
+"- c #767676",
+"; c #7A7A7A",
+"> c #B4B4B4",
+", c #808080",
+"' c #AEAEAE",
+") c #656565",
+"! c #929292",
+"$=>$@@,++,,,-;%$$+,;+)#;*!+,+@*!,!++;+;$@;+==,#=!!$--%)++=$,!@!%#+@!>$=!+*!=%)==>>@+,$==@!))#$%;=!!*",
+"++$-,>$@!;+;-&++-,#!;++!-+#+!@$$#,,+&#=$=!==$+$#=>>>,&$#&$$#>$=,+.-''!$'*=+>+);+>*@$=--=$=,+!==,,@==",
+"!$,-,=@=$+==,+!%,#,-&=$++-)===#+##,+=+=#$@$=>''$$*@=,+#!,$=>!=$+)++)+*@=$@=,+$$$+!'**#,,,$+,=@=;==-;",
+"!,###$$);'#;$=+%;+#;++%-,=,==!)+#===========@>>>*>@!==#,+#==@$===+-;%@$=#+*>=!$$$==,*>@-+;+#$,%,@@%#",
+"+@,!=,,+!$==$++!&;+#!,%),=>!+;,=+$@=+!$==+#$!@>>>*@=;!,+#!==$$>@$!=>=$@$=+@='$!+@*+!!=*@$+,'@+%+,,@=",
+"=;&+,.-!=!=!=;+!!,!=!;)-==,++;+@>@+,#=$+!'$=#='>=*$$!+,!,#$$@!>$,#+$@@$@'@##==@$=+'$!+!$>@@*+!*+,!=!",
+"!!,,,+++&#=,+!,'!,!##!$$!-.++=@'=$$!==++==@=@>=!@@!#!+$+$===$@#+=$!=@$!@=#@+$>!=@$=!@'!=$*@$$!!====$",
+"#%)#@@+%,+!$,++=#+++,=$+-+++!$!+==$$===#+##$=@$=+$$+#=!@=,+$#!$$$$=$==$=!,,$@*$,=>-=@#$>>$+'>$@=>'!+",
+"),,-=+$!@##-,,!;,=++$@;%&,!!=$#!=!@@$$$,+==+$!==+!$$=#+!+!!+=!$!@@$=++=>!&+@$==!!!+==$*==$*@=@**$+!+",
+"!'$#,,,@$#+&)&-;===$,%;+#!==###$=#==!===>>+====$$,$$=+=-,$=;#!==$=#=;+=@===$$$=#$+=@@>$+>*@$'*@-+=%,",
+"$$$@++!!#%)+,%++>=$#%%#%=@=+=;,@$+=+=>$=='!+!##+$$!!;!=&=!##@$,+@+=+!$+-=@$,=>'+#!=@@==@>''@>>-+>$$=",
+"=,%++,@!,)),%,+=@!%++!+#,#+$=$!!='==@$$==+#$++,$$!@#$=,@+,,@#$+#=$$=!$+!+=!$$>==$$;=@!=$@*>@$==='$=$",
+"$$=&%#+,!=!+,;-+-%)#=@=+%%$$#!@!@$@@@>=,+!!,,#=>@$!#$;#$=-$@+;$*$!$@,&=$++!!+@@==#=!@;$>*@++@>=+,>>$",
+"$$#=$,+%,!@@!!&%-,,++==,,+!!#,#$!@@$=@#==#@=#=$*$$@,,+!+#!+=%,=@$'$$$=+!+==+#-=@,+$+@>!#=@$!@!=$=+#!",
+"+#=>==;,++,=>!;-,,;-#++$@!$,,!==@>>@$!=+$#+@='@$!'@$$&+#+=#+;+#=!'>$$@!#$++!=-!;,$!+>*'=#!@@@-##@$#+",
+",,#=$!$#+%,,,!=+=,!-,+!!$=%,+$!#@@'@$@,+$=+!=$>$!@+;@+,,#=;$=!,++>$=>$$=!,+==,-+@=!$@!@>@$-,,==!=$!!",
+"!+=$=,$#-#+=!,!=!=++;;,=;,=!+=+!,+$+#>=+@@####@=@@+;,+&;-==$#$=#$@=#@*==!=;+++==!!$@#%>>$=!#,-#+#+,)",
+"+&$=!&;###@=#-,@,,!+;!,%+!=!!++,+++=+'>==@#==-=$!$#!-,)+!#!==+$$@=#==,=@!==!%++==='@==$$=##!+!+%-=$$",
+"+!#=+-,,=@++==+#,--+++&+!!===+!+#;$=++*$$=!=@@=+=#%$--!+,@$+#+'>!=!+!!===$=$;++#,$+=@'=-!#!#=!+=,%!,",
+"+@$-+!)#=,=$!==,;,+-%,!!#@!$!-#-$!=+==#+$=+!='@$#++-;!!+$,!#-@'$++++==!$+!#=!+$@$,#==#+#==@!,%$==!,%",
+"#+#+,!,+%+@$>!!,;+;%+#++=+,$+-&=+,@$%!==-#,*@;$$=!+=,=#!!@$#$>!+$=!=#!@==!,,===$==!=@++,+@@$!==;,=#$",
+",=+,#$!;,@=+$'$$!+%;,-,##+,+,=!,,+++&==!=!$>@=$!,$!'#@#,!@!@==!+$+$!$=#$,+$!==++,=!@+!=!,!$+$+,=$,!#",
+")+>@$$+,=#+=#!+$=!,,&,;=++#!+,,++=##!-&+@$@@$$$,@$',&@*=-!=@!=,;=$#=@!++#!$'=!=,,+=$===;=$$=!=+!@=$%",
+"#+#@@@=>'#=,,#!,$=$+,,+$+$,;+--!$!!#=#,-,=$=$$,=@=,+$'$+,++=@;##-!@==+!!=!#@==,,+==!+!++=='$=>$#;@!;",
+";++=>+=@!$$$!,#!&,==!#@-!!-&%-&;===$+,)%,,+'$$@!++==*=%@+#=!==!==$+$$=,#$=!=,++=!$#-!@=!;$==@@>#+!+)",
+"+,+@!$==,=@=++=,&+-$!#@=,-,--+)#!,$'=%;-%;$@#@$!+!>>,#@$;+$$!=!@>$$=!,+>!!$-+,#!++,+!=+=+=-!>$@@$=;;",
+"+;$$=+$#=@!=$,,!#;,,+=#=++,!+&+#+;+$#+=,%!+;,==!=*=&$$!,+#'+,@@>=@$$,+$+#!!+,++#%%$$,++!=!==,#>$-=*@",
+"+>>+&=,=$+$@$%-!+++,&#+-+,=$+-$+;;=%,=@+$++&#+;,*$-%$$+,,;$$$=!$#$@+$@=$>,++$!,)-!!!+#;@+#@,!=#@=@>$",
+"'>$#%!$#,>$#=$,&&++%$#%#=+;!$$#%-+%,=!-!=+!=#+,#!$-'$=+,=@!=!@$#$!+!$!$*',,##+#+!!,;+#+=@##=@+@*'=!$",
+"@@=)$$=!=$$$=+=#,--!;-!+!#+++;=!+;!++++%)$=#@@+!,,!'='=+'!++=@!+=#=$=#$++#,,%=+=#!#&,!#====$$**@++@@",
+"@=+>>#==$==+!#=$+;+),++#+$>+;,+$!=#+==&+-#-$*+>==+,+$!+=+,@@@$=;=@$!+==&@+,+-,+;+,#+=$=!@@=='$=@''$+",
+"$)+@@'>$++,+#$$#!=+,-+-+==$#=!=++=#+#$==@,,>#@,$@+$%;,@!;=+,+=$$=##+==##='#,&+=&%+##$@@=$==$@=@$@$!$",
+"@>'@=@>$+=+,!==!!##!=+;-+#=++,%@=-,=;;=@!=>$$@$&,!@#!;!='++!+$@#+,+,-#!++!$,+$+),##'>,++$$=$@@'=!,$,",
+"$$>*@>==#=#++==$$+#='=+,#$#=&)+,=+!!%+$,='=@>=+,*;)!+=$$,%++@$)%;+==,#+-++-,$#+&++$=+#$-!=@''@=;#,;-",
+"*>+=$#++@=,=;,==,#;$=+++=!=+;-,-!=#&!>%+=,@$+;$$-&&-$=@$#,-,#+--$,%-,!,+%;=$--!$=$=#!$##+$@$==!=&&-$",
+"'=$$,-=+,#$!==+!+++!@!=$+=+,-!,;$=-$=,=+,$>--=@+)%!!@#++$@$,-+-=$+%&!&;,==$+++$=$=+#==+!!@=!;$#+$$>>",
+",#=+!$-%)#==>$$,,!+=''++$+,#,##%%+@$,,,,@@#==@=,%,$$$#+;=+=$!++,-,;+,%%!@,-,,=!==!+#+==#+=+),==$='>+",
+"$+#==$);,++#=$=,=#$$==$$$!#;=+#++$',#=!==+=$=+#$#!!$#=+,!--$@+-&)-+!%)!=+--!=@=##=!$=@===!&+$#$@@=,@",
+"$$$@+++;%+=,=!=$$$$=!=$#'==#,,+!$=!=,!==@=@*=$,==$,@==,++,+=;-=!+%+%%=+&%++=$!$-++=+@$++!+++$#==++#-",
+"+=$=+=;=-#,+,,$=$'@#@=+%-@>!#,$$+@#==%,!$@'@=$$=@!!+,--=##!!,)=@#=)%,,-,+==!!,,++=+$+,!;,++=,+#%,!;+",
+"$+#'$,,+@!=%,,+!'@>@##=$+;%=@$!!$=+=$,===++!+$@*$#=,#,-==+&,!==$=+=!!%,&===!;+!#=;#!+,!+=-;+==-)#+,,",
+"+==#=$+=,,++,,+!=@$+$>$+#,==;*@=!#$-,>$'@%&->=>>$$;,!++=+,+,+@#=!#@++,#=!=+,+,+==-+-##+#,-,;-##+#!,+",
+"+=%,@=!+-&&==!$=,@$'=++=#;+$'==;+=$&!$+#'#$@$#@>=++,#$$+)++;!#=!!+,,,$'=&,+++,#=++=$===;=#,+#+!+#!#,",
+";,,!!##,,,,==@$,=+$>+#$$+=$#@=-!$=;$#$$,-!'$#=#$$;+#!++=+;&;-+'$&;,+,,&$$==+!#,++==#-=!+++,+!!$$==--",
+"&-,!!=;+=++$$=#@$=@,+=$=$!=#+,$+=;,==!$+==@>@,&,$'++#,)++=,,)+=,!$=#-.&+#$'@!+++==!+,+&#!,++$=+!@=-=",
+"&+!+;,+++!!$$##$$!=$=!+=!=!!;!@=-++@$@$'$#>'++$$$+$-%,=--+!+@+;!#;#;%-&,#=$@@!!=$,=!;)&++=!#$#,&++!!",
+"$=!,))-,!=,-$$@=+!+!,'=+==!=$+=++,=+'@'@@===;,!>'@+),=&+$,)=+++-+,);;%-,++$#+=@$#,+$,#=+!+!##+#;,+#%",
+"!#-%%%;#+;!%!@=@@+.$;+*@+=,@!;%$=+,=$,@$,=>+#;+=@$$@=%=>@-,);!$$&);#),,#,%&#!==@>++,=>=+++,,!=--=#,@",
+"#&%,=,##.+%!+=$$+=@!!+-,=@!$#,,$!=@#@=!,+@@###+-=#@,-=$,#++)-#$#-#)#,,%,;),!$!##$@'$!$!,+!!!+-;#+#$$",
+";.%.-+$@&)-!=++@##=*$,!=$;+@='!!-!>#!!!$>%+-&#!=$!#=$*$#-+%=;!=-!+#;#++&),==+$+!$++=-,#++!+$+%$%;++;",
+"$--%)++=$,!@!%#+@!>$=!+*!=%)==>>@+,$==@!))#$%;=!!*$=>$@@,++,,,-;%$$+,;+)#;*!+,+@*!,!++;+;$@;+==,#=!!",
+">>,&$#&$$#>$=,+.-''!$'*=+>+);+>*@$=--=$=,+!==,,@==++$-,>$@!;+;-&++-,#!;++!-+#+!@$$#,,+&#=$=!==$+$#=>",
+"@=,+#!,$=>!=$+)++)+*@=$@=,+$$$+!'**#,,,$+,=@=;==-;!$,-,=@=$+==,+!%,#,-&=$++-)===#+##,+=+=#$@$=>''$$*",
+"@!==#,+#==@$===+-;%@$=#+*>=!$$$==,*>@-+;+#$,%,@@%#!,###$$);'#;$=+%;+#;++%-,=,==!)+#===========@>>>*>",
+"@=;!,+#!==$$>@$!=>=$@$=+@='$!+@*+!!=*@$+,'@+%+,,@=+@,!=,,+!$==$++!&;+#!,%),=>!+;,=+$@=+!$==+#$!@>>>*",
+"$$!+,!,#$$@!>$,#+$@@$@'@##==@$=+'$!+!$>@@*+!*+,!=!=;&+,.-!=!=!=;+!!,!=!;)-==,++;+@>@+,#=$+!'$=#='>=*",
+"!#!+$+$===$@#+=$!=@$!@=#@+$>!=@$=!@'!=$*@$$!!====$!!,,,+++&#=,+!,'!,!##!$$!-.++=@'=$$!==++==@=@>=!@@",
+"$+#=!@=,+$#!$$$$=$==$=!,,$@*$,=>-=@#$>>$+'>$@=>'!+#%)#@@+%,+!$,++=#+++,=$+-+++!$!+==$$===#+##$=@$=+$",
+"$$=#+!+!!+=!$!@@$=++=>!&+@$==!!!+==$*==$*@=@**$+!+),,-=+$!@##-,,!;,=++$@;%&,!!=$#!=!@@$$$,+==+$!==+!",
+"$$=+=-,$=;#!==$=#=;+=@===$$$=#$+=@@>$+>*@$'*@-+=%,!'$#,,,@$#+&)&-;===$,%;+#!==###$=#==!===>>+====$$,",
+"!!;!=&=!##@$,+@+=+!$+-=@$,=>'+#!=@@==@>''@>>-+>$$=$$$@++!!#%)+,%++>=$#%%#%=@=+=;,@$+=+=>$=='!+!##+$$",
+"@#$=,@+,,@#$+#=$$=!$+!+=!$$>==$$;=@!=$@*>@$==='$=$=,%++,@!,)),%,+=@!%++!+#,#+$=$!!='==@$$==+#$++,$$!",
+"!#$;#$=-$@+;$*$!$@,&=$++!!+@@==#=!@;$>*@++@>=+,>>$$$=&%#+,!=!+,;-+-%)#=@=+%%$$#!@!@$@@@>=,+!!,,#=>@$",
+"@,,+!+#!+=%,=@$'$$$=+!+==+#-=@,+$+@>!#=@$!@!=$=+#!$$#=$,+%,!@@!!&%-,,++==,,+!!#,#$!@@$=@#==#@=#=$*$$",
+"@$$&+#+=#+;+#=!'>$$@!#$++!=-!;,$!+>*'=#!@@@-##@$#++#=>==;,++,=>!;-,,;-#++$@!$,,!==@>>@$!=+$#+@='@$!'",
+"+;@+,,#=;$=!,++>$=>$$=!,+==,-+@=!$@!@>@$-,,==!=$!!,,#=$!$#+%,,,!=+=,!-,+!!$=%,+$!#@@'@$@,+$=+!=$>$!@",
+"+;,+&;-==$#$=#$@=#@*==!=;+++==!!$@#%>>$=!#,-#+#+,)!+=$=,$#-#+=!,!=!=++;;,=;,=!+=+!,+$+#>=+@@####@=@@",
+"#!-,)+!#!==+$$@=#==,=@!==!%++==='@==$$=##!+!+%-=$$+&$=!&;###@=#-,@,,!+;!,%+!=!!++,+++=+'>==@#==-=$!$",
+"%$--!+,@$+#+'>!=!+!!===$=$;++#,$+=@'=-!#!#=!+=,%!,+!#=+-,,=@++==+#,--+++&+!!===+!+#;$=++*$$=!=@@=+=#",
+"+-;!!+$,!#-@'$++++==!$+!#=!+$@$,#==#+#==@!,%$==!,%+@$-+!)#=,=$!==,;,+-%,!!#@!$!-#-$!=+==#+$=+!='@$#+",
+"+=,=#!!@$#$>!+$=!=#!@==!,,===$==!=@++,+@@$!==;,=#$#+#+,!,+%+@$>!!,;+;%+#++=+,$+-&=+,@$%!==-#,*@;$$=!",
+"!'#@#,!@!@==!+$+$!$=#$,+$!==++,=!@+!=!,!$+$+,=$,!#,=+,#$!;,@=+$'$$!+%;,-,##+,+,=!,,+++&==!=!$>@=$!,$",
+"',&@*=-!=@!=,;=$#=@!++#!$'=!=,,+=$===;=$$=!=+!@=$%)+>@$$+,=#+=#!+$=!,,&,;=++#!+,,++=##!-&+@$@@$$$,@$",
+",+$'$+,++=@;##-!@==+!!=!#@==,,+==!+!++=='$=>$#;@!;#+#@@@=>'#=,,#!,$=$+,,+$+$,;+--!$!!#=#,-,=$=$$,=@=",
+"==*=%@+#=!==!==$+$$=,#$=!=,++=!$#-!@=!;$==@@>#+!+);++=>+=@!$$$!,#!&,==!#@-!!-&%-&;===$+,)%,,+'$$@!++",
+">>,#@$;+$$!=!@>$$=!,+>!!$-+,#!++,+!=+=+=-!>$@@$=;;+,+@!$==,=@=++=,&+-$!#@=,-,--+)#!,$'=%;-%;$@#@$!+!",
+"=&$$!,+#'+,@@>=@$$,+$+#!!+,++#%%$$,++!=!==,#>$-=*@+;$$=+$#=@!=$,,!#;,,+=#=++,!+&+#+;+$#+=,%!+;,==!=*",
+"-%$$+,,;$$$=!$#$@+$@=$>,++$!,)-!!!+#;@+#@,!=#@=@>$+>>+&=,=$+$@$%-!+++,&#+-+,=$+-$+;;=%,=@+$++&#+;,*$",
+"-'$=+,=@!=!@$#$!+!$!$*',,##+#+!!,;+#+=@##=@+@*'=!$'>$#%!$#,>$#=$,&&++%$#%#=+;!$$#%-+%,=!-!=+!=#+,#!$",
+"!'='=+'!++=@!+=#=$=#$++#,,%=+=#!#&,!#====$$**@++@@@@=)$$=!=$$$=+=#,--!;-!+!#+++;=!+;!++++%)$=#@@+!,,",
+",+$!+=+,@@@$=;=@$!+==&@+,+-,+;+,#+=$=!@@=='$=@''$+@=+>>#==$==+!#=$+;+),++#+$>+;,+$!=#+==&+-#-$*+>==+",
+"$%;,@!;=+,+=$$=##+==##='#,&+=&%+##$@@=$==$@=@$@$!$$)+@@'>$++,+#$$#!=+,-+-+==$#=!=++=#+#$==@,,>#@,$@+",
+"@#!;!='++!+$@#+,+,-#!++!$,+$+),##'>,++$$=$@@'=!,$,@>'@=@>$+=+,!==!!##!=+;-+#=++,%@=-,=;;=@!=>$$@$&,!",
+")!+=$$,%++@$)%;+==,#+-++-,$#+&++$=+#$-!=@''@=;#,;-$$>*@>==#=#++==$$+#='=+,#$#=&)+,=+!!%+$,='=@>=+,*;",
+"&-$=@$#,-,#+--$,%-,!,+%;=$--!$=$=#!$##+$@$==!=&&-$*>+=$#++@=,=;,==,#;$=+++=!=+;-,-!=#&!>%+=,@$+;$$-&",
+"!!@#++$@$,-+-=$+%&!&;,==$+++$=$=+#==+!!@=!;$#+$$>>'=$$,-=+,#$!==+!+++!@!=$+=+,-!,;$=-$=,=+,$>--=@+)%",
+"$$$#+;=+=$!++,-,;+,%%!@,-,,=!==!+#+==#+=+),==$='>+,#=+!$-%)#==>$$,,!+=''++$+,#,##%%+@$,,,,@@#==@=,%,",
+"!$#=+,!--$@+-&)-+!%)!=+--!=@=##=!$=@===!&+$#$@@=,@$+#==$);,++#=$=,=#$$==$$$!#;=+#++$',#=!==+=$=+#$#!",
+",@==,++,+=;-=!+%+%%=+&%++=$!$-++=+@$++!+++$#==++#-$$$@+++;%+=,=!=$$$$=!=$#'==#,,+!$=!=,!==@=@*=$,==$",
+"!+,--=##!!,)=@#=)%,,-,+==!!,,++=+$+,!;,++=,+#%,!;++=$=+=;=-#,+,,$=$'@#@=+%-@>!#,$$+@#==%,!$@'@=$$=@!",
+"=,#,-==+&,!==$=+=!!%,&===!;+!#=;#!+,!+=-;+==-)#+,,$+#'$,,+@!=%,,+!'@>@##=$+;%=@$!!$=+=$,===++!+$@*$#",
+";,!++=+,+,+@#=!#@++,#=!=+,+,+==-+-##+#,-,;-##+#!,++==#=$+=,,++,,+!=@$+$>$+#,==;*@=!#$-,>$'@%&->=>>$$",
+"+,#$$+)++;!#=!!+,,,$'=&,+++,#=++=$===;=#,+#+!+#!#,+=%,@=!+-&&==!$=,@$'=++=#;+$'==;+=$&!$+#'#$@$#@>=+",
+"+#!++=+;&;-+'$&;,+,,&$$==+!#,++==#-=!+++,+!!$$==--;,,!!##,,,,==@$,=+$>+#$$+=$#@=-!$=;$#$$,-!'$#=#$$;",
+"++#,)++=,,)+=,!$=#-.&+#$'@!+++==!+,+&#!,++$=+!@=-=&-,!!=;+=++$$=#@$=@,+=$=$!=#+,$+=;,==!$+==@>@,&,$'",
+"$-%,=--+!+@+;!#;#;%-&,#=$@@!!=$,=!;)&++=!#$#,&++!!&+!+;,+++!!$$##$$!=$=!+=!=!!;!@=-++@$@$'$#>'++$$$+",
+"+),=&+$,)=+++-+,);;%-,++$#+=@$#,+$,#=+!+!##+#;,+#%$=!,))-,!=,-$$@=+!+!,'=+==!=$+=++,=+'@'@@===;,!>'@",
+"$@=%=>@-,);!$$&);#),,#,%&#!==@>++,=>=+++,,!=--=#,@!#-%%%;#+;!%!@=@@+.$;+*@+=,@!;%$=+,=$,@$,=>+#;+=@$",
+"@,-=$,#++)-#$#-#)#,,%,;),!$!##$@'$!$!,+!!!+-;#+#$$#&%,=,##.+%!+=$$+=@!!+-,=@!$#,,$!=@#@=!,+@@###+-=#",
+"#=$*$#-+%=;!=-!+#;#++&),==+$+!$++=-,#++!+$+%$%;++;;.%.-+$@&)-!=++@##=*$,!=$;+@='!!-!>#!!!$>%+-&#!=$!"};
diff --git a/test/tiled_image.cxx b/test/tiled_image.cxx
new file mode 100644
index 000000000..cb132edef
--- /dev/null
+++ b/test/tiled_image.cxx
@@ -0,0 +1,103 @@
+//
+// "$Id: tiled_image.cxx,v 1.1.2.1 2001/11/24 18:07:58 easysw Exp $"
+//
+// Fl_Tiled_Image test program for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2001 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
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#include <FL/Fl.H>
+#include <FL/Fl_Window.H>
+#include <FL/Fl_Button.H>
+#include <FL/Fl_Pixmap.H>
+#include <FL/Fl_Tiled_Image.H>
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include "tile.xpm"
+
+Fl_Button *b;
+Fl_Window *w;
+
+void button_cb(Fl_Widget *,void *) {
+ w->hide();
+}
+
+#include <FL/x.H>
+#ifndef WIN32
+#include "list_visuals.cxx"
+#endif
+
+int visid = -1;
+int arg(int argc, char **argv, int &i) {
+ if (argv[i][1] == 'v') {
+ if (i+1 >= argc) return 0;
+ visid = atoi(argv[i+1]);
+ i += 2;
+ return 2;
+ }
+ return 0;
+}
+
+int main(int argc, char **argv) {
+#ifndef WIN32
+ int i = 1;
+
+ Fl::args(argc,argv,i,arg);
+
+ if (visid >= 0) {
+ fl_open_display();
+ XVisualInfo templt; int num;
+ templt.visualid = visid;
+ fl_visual = XGetVisualInfo(fl_display, VisualIDMask, &templt, &num);
+ if (!fl_visual) {
+ fprintf(stderr, "No visual with id %d, use one of:\n",visid);
+ list_visuals();
+ exit(1);
+ }
+ fl_colormap = XCreateColormap(fl_display, RootWindow(fl_display,fl_screen),
+ fl_visual->visual, AllocNone);
+ fl_xpixel(FL_BLACK); // make sure black is allocated in overlay visuals
+ } else {
+ Fl::visual(FL_RGB);
+ }
+#endif
+
+ Fl_Window window(400,400); ::w = &window;
+ Fl_Group group(0,0,400,400);
+ group.image(new Fl_Tiled_Image(new Fl_Pixmap(tile_xpm)));
+ group.align(FL_ALIGN_INSIDE);
+
+ Fl_Button b(340,365,50,25,"Close"); ::b = &b;
+ b.callback(button_cb);
+
+ group.end();
+
+ window.resizable(group);
+ window.end();
+ window.show(argc, argv);
+
+ return Fl::run();
+}
+
+//
+// End of "$Id: tiled_image.cxx,v 1.1.2.1 2001/11/24 18:07:58 easysw Exp $".
+//