|
fltk 1.3.0rc3
About: FLTK (Fast Light Tool Kit) is a cross-platform C++ GUI toolkit for UNIX/Linux (X11), Microsoft Windows, and MacOS X. Release candidate.
SfR Fresh Dox: fltk-1.3.0rc3-source.tar.gz ("inofficial" and yet experimental doxygen-generated source code documentation) ![]() |
00001 // 00002 // "$Id: Fl_XBM_Image.cxx 7903 2010-11-28 21:06:39Z matt $" 00003 // 00004 // Fl_XBM_Image routines. 00005 // 00006 // Copyright 1997-2010 by Bill Spitzak and others. 00007 // 00008 // This library is free software; you can redistribute it and/or 00009 // modify it under the terms of the GNU Library General Public 00010 // License as published by the Free Software Foundation; either 00011 // version 2 of the License, or (at your option) any later version. 00012 // 00013 // This library is distributed in the hope that it will be useful, 00014 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00016 // Library General Public License for more details. 00017 // 00018 // You should have received a copy of the GNU Library General Public 00019 // License along with this library; if not, write to the Free Software 00020 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 00021 // USA. 00022 // 00023 // Please report all bugs and problems on the following page: 00024 // 00025 // http://www.fltk.org/str.php 00026 // 00027 // Contents: 00028 // 00029 // Fl_XBM_Image::Fl_XBM_Image() - Load an XBM file. 00030 // 00031 00032 // 00033 // Include necessary header files... 00034 // 00035 00036 #include <FL/Fl.H> 00037 #include <FL/Fl_XBM_Image.H> 00038 #include <stdio.h> 00039 #include <stdlib.h> 00040 #include <FL/fl_utf8.h> 00041 #include "flstring.h" 00042 00043 // 00044 // 'Fl_XBM_Image::Fl_XBM_Image()' - Load an XBM file. 00045 // 00046 00052 Fl_XBM_Image::Fl_XBM_Image(const char *name) : Fl_Bitmap((const char *)0,0,0) { 00053 FILE *f; 00054 uchar *ptr; 00055 00056 if ((f = fl_fopen(name, "rb")) == NULL) return; 00057 00058 char buffer[1024]; 00059 char junk[1024]; 00060 int wh[2]; // width and height 00061 int i; 00062 for (i = 0; i<2; i++) { 00063 for (;;) { 00064 if (!fgets(buffer,1024,f)) { 00065 fclose(f); 00066 return; 00067 } 00068 int r = sscanf(buffer,"#define %s %d",junk,&wh[i]); 00069 if (r >= 2) break; 00070 } 00071 } 00072 00073 // skip to data array: 00074 for (;;) { 00075 if (!fgets(buffer,1024,f)) { 00076 fclose(f); 00077 return; 00078 } 00079 if (!strncmp(buffer,"static ",7)) break; 00080 } 00081 00082 // Allocate memory... 00083 w(wh[0]); 00084 h(wh[1]); 00085 00086 int n = ((wh[0]+7)/8)*wh[1]; 00087 array = new uchar[n]; 00088 00089 // read the data: 00090 for (i = 0, ptr = (uchar *)array; i < n;) { 00091 if (!fgets(buffer,1024,f)) { 00092 fclose(f); 00093 return; 00094 } 00095 const char *a = buffer; 00096 while (*a && i<n) { 00097 unsigned int t; 00098 if (sscanf(a," 0x%x",&t)>0) { 00099 *ptr++ = (uchar)t; 00100 i ++; 00101 } 00102 while (*a && *a++ != ','); 00103 } 00104 } 00105 00106 fclose(f); 00107 } 00108 00109 00110 // 00111 // End of "$Id: Fl_XBM_Image.cxx 7903 2010-11-28 21:06:39Z matt $". 00112 //