diff options
| author | Michael R Sweet <michael.r.sweet@gmail.com> | 2001-11-24 18:07:58 +0000 |
|---|---|---|
| committer | Michael R Sweet <michael.r.sweet@gmail.com> | 2001-11-24 18:07:58 +0000 |
| commit | b650366d80e58cf3154c5bdf8ceb6a242c1a0251 (patch) | |
| tree | c71ef9770b24f56c44495006426739adfa89c99e | |
| parent | e016a249b25c77b38d77d3a26d563cdec7a2592b (diff) | |
Added XBM, XPM, and PNM image file classes.
The pixmap_browser demo now supports all image formats via Fl_Shared_Image.
Dropped image file stuff from image demo.
Added Fl_Tiled_Image class, which tiles an Fl_Image, useful for tiling a
background image in groups.
Added tiled_image demo.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@1725 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
| -rw-r--r-- | CHANGES | 5 | ||||
| -rw-r--r-- | FL/Fl_PNM_Image.H | 41 | ||||
| -rw-r--r-- | FL/Fl_Pixmap.H | 7 | ||||
| -rw-r--r-- | FL/Fl_XBM_Image.H | 41 | ||||
| -rw-r--r-- | FL/Fl_XPM_Image.H | 41 | ||||
| -rw-r--r-- | src/Fl_GIF_Image.cxx | 7 | ||||
| -rw-r--r-- | src/Fl_PNM_Image.cxx | 161 | ||||
| -rw-r--r-- | src/Fl_Shared_Image.cxx | 15 | ||||
| -rw-r--r-- | src/Fl_Tiled_Image.cxx | 133 | ||||
| -rw-r--r-- | src/Fl_XBM_Image.cxx | 88 | ||||
| -rw-r--r-- | src/Fl_XPM_Image.cxx | 129 | ||||
| -rw-r--r-- | src/Makefile | 8 | ||||
| -rw-r--r-- | src/makedepend | 3 | ||||
| -rw-r--r-- | test/Makefile | 82 | ||||
| -rw-r--r-- | test/image.cxx | 24 | ||||
| -rw-r--r-- | test/pixmap_browser.cxx | 120 | ||||
| -rw-r--r-- | test/tile.xpm | 120 | ||||
| -rw-r--r-- | test/tiled_image.cxx | 103 |
18 files changed, 982 insertions, 146 deletions
@@ -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 $". +// |
