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)  

fl_symbols.cxx

Go to the documentation of this file.
00001 //
00002 // "$Id: fl_symbols.cxx 7903 2010-11-28 21:06:39Z matt $"
00003 //
00004 // Symbol drawing code for the Fast Light Tool Kit (FLTK).
00005 //
00006 // Copyright 1998-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 
00028 // These are small graphics drawn by the normal label-drawing
00029 // code when the string starts with an '@' sign.
00030 
00031 // Adapted from original code written by:
00032 
00033 // Written by Mark Overmars
00034 // Version 2.1 a
00035 // Date: Oct  2, 1992
00036 
00037 #include <FL/Fl.H>
00038 #include <FL/fl_draw.H>
00039 #include <FL/math.h>
00040 #include "flstring.h"
00041 
00042 typedef struct {
00043   const char *name;
00044   void (*drawit)(Fl_Color);
00045   char scalable;
00046   char notempty;
00047 } SYMBOL;
00048 
00049 #define MAXSYMBOL       211
00050    /* Maximal number of symbols in table. Only half of them are
00051       used. Should be prime. */
00052 
00053 static SYMBOL symbols[MAXSYMBOL];      /* The symbols */
00054 static int symbnumb = -1;              /* Their number */
00055 
00056 static int find(const char *name) {
00057 // returns hash entry if it exists, or first empty slot:
00058   int pos = name[0] ? (
00059     name[1] ? (
00060       name[2] ? 71*name[0]+31*name[1]+name[2] : 31*name[0]+name[1]
00061     ) :
00062       name[0]
00063   ) : 0;
00064   pos %= MAXSYMBOL;
00065   int hh2 = name[0] ? (
00066     (name[1]) ? 51*name[0]+3*name[1] : 3*name[0]
00067     ) : 1;
00068   hh2 %= MAXSYMBOL; if (!hh2) hh2 = 1;
00069   for (;;) {
00070     if (!symbols[pos].notempty) return pos;
00071     if (!strcmp(symbols[pos].name,name)) return pos;
00072     pos = (pos + hh2) % MAXSYMBOL;
00073   }
00074 }
00075 
00076 static void fl_init_symbols(void);
00077 
00078 /**************** The routines seen by the user *************************/
00079 
00087 int fl_add_symbol(const char *name, void (*drawit)(Fl_Color), int scalable)
00088 {
00089   fl_init_symbols();
00090   int pos;
00091   if (symbnumb > MAXSYMBOL / 2) return 0;       // table is full
00092   pos = find(name);
00093   symbols[pos].name = name;
00094   symbols[pos].drawit = drawit;
00095   symbols[pos].notempty = 1;
00096   symbols[pos].scalable = scalable;
00097   symbnumb++;
00098   return 1;
00099 }
00100 
00101 int fl_return_arrow(int x,int y,int w,int h);
00102 
00111 // provided for back compatibility:
00112 int fl_draw_symbol(const char *label,int x,int y,int w,int h,Fl_Color col) {  
00113   const char *p = label;
00114   if (*p++ != '@') return 0;
00115   fl_init_symbols();
00116   int equalscale = 0;
00117   if (*p == '#') {equalscale = 1; p++;}
00118   if (*p == '-' && p[1]>='1' && p[1]<='9') {
00119     int n = p[1]-'0';
00120     x += n; y += n; w -= 2*n; h -= 2*n;
00121     p += 2;
00122   } else if (*p == '+' && p[1]>='1' && p[1]<='9') {
00123     int n = p[1]-'0';
00124     x -= n; y -= n; w += 2*n; h += 2*n;
00125     p += 2;
00126   }
00127   if (w < 10) {x -= (10-w)/2; w = 10;}
00128   if (h < 10) {y -= (10-h)/2; h = 10;}
00129   w = (w-1)|1; h = (h-1)|1;
00130   char flip_x = 0, flip_y = 0;
00131   if (*p=='$') {
00132     flip_x = 1;
00133     p++;
00134   }
00135   if (*p=='%') {
00136     flip_y = 1;
00137     p++;
00138   }
00139   int rotangle;
00140   switch (*p++) {
00141   case '0':
00142     rotangle = 1000*(p[1]-'0') + 100*(p[2]-'0') + 10*(p[3]-'0');
00143     p += 4;
00144     break;
00145   case '1': rotangle = 2250; break;
00146   case '2': rotangle = 2700; break;
00147   case '3': rotangle = 3150; break;
00148   case '4': rotangle = 1800; break;
00149   case '5':
00150   case '6': rotangle = 0; break;
00151   case '7': rotangle = 1350; break;
00152   case '8': rotangle =  900; break;
00153   case '9': rotangle =  450; break;
00154   default: rotangle = 0; p--; break;
00155   }
00156   int pos = find(p);
00157   if (!symbols[pos].notempty) return 0;
00158   if (symbols[pos].scalable == 3) { // kludge to detect return arrow
00159     fl_return_arrow(x,y,w,h);
00160     return 1;
00161   }
00162   fl_push_matrix();
00163   fl_translate(x+w/2,y+h/2);
00164   if (symbols[pos].scalable) {
00165     if (equalscale) {if (w<h) h = w; else w = h;}
00166     fl_scale(0.5*w, 0.5*h);
00167     fl_rotate(rotangle/10.0);
00168     if (flip_x) fl_scale(-1.0, 1.0);
00169     if (flip_y) fl_scale(1.0, -1.0);
00170   }
00171   (symbols[pos].drawit)(col);
00172   fl_pop_matrix();
00173   return 1;
00174 }
00175 
00176 /******************** THE DEFAULT SYMBOLS ****************************/
00177 
00178 /* Some help stuff */
00179 
00180 #define BP fl_begin_polygon()
00181 #define EP fl_end_polygon()
00182 #define BCP fl_begin_complex_polygon()
00183 #define ECP fl_end_complex_polygon()
00184 #define BL fl_begin_line()
00185 #define EL fl_end_line()
00186 #define BC fl_begin_loop()
00187 #define EC fl_end_loop()
00188 #define vv(x,y) fl_vertex(x,y)
00189 
00190 //for the outline color
00191 static void set_outline_color(Fl_Color c) {
00192   fl_color(fl_darker(c));
00193 }
00194 
00195 static void rectangle(double x,double y,double x2,double y2,Fl_Color col) {
00196   fl_color(col);
00197   BP; vv(x,y); vv(x2,y); vv(x2,y2); vv(x,y2); EP;
00198   set_outline_color(col);
00199   BC; vv(x,y); vv(x2,y); vv(x2,y2); vv(x,y2); EC;
00200 }
00201 
00202 /* The drawing routines */
00203 
00204 static void draw_fltk(Fl_Color col) 
00205 {
00206   fl_color(col);
00207   // F fill
00208   BCP; vv(-2.0, -0.5); vv(-1.0, -0.5); vv(-1.0, -0.3); vv(-1.8, -0.3);
00209   vv(-1.8, -0.1); vv(-1.2, -0.1); vv(-1.2, 0.1); vv(-1.8, 0.1);
00210   vv(-1.8, 0.5); vv(-2.0, 0.5); ECP;
00211   // L fill
00212   BCP; vv(-1.0, -0.5); vv(-0.8, -0.5); vv(-0.8, 0.3); vv(0.0, 0.3);
00213   vv(0.0, 0.5); vv(-1.0, 0.5); ECP;
00214   // T outline
00215   BCP; vv(-0.1, -0.5); vv(1.1, -0.5); vv(1.1, -0.3); vv(0.6, -0.3);
00216   vv(0.6, 0.5); vv(0.4, 0.5); vv(0.4, -0.3); vv(-0.1, -0.3); ECP;
00217   // K outline
00218   BCP; vv(1.1, -0.5); vv(1.3, -0.5); vv(1.3, -0.15); vv(1.70, -0.5);
00219   vv(2.0, -0.5); vv(1.43, 0.0); vv(2.0, 0.5); vv(1.70, 0.5);
00220   vv(1.3, 0.15); vv(1.3, 0.5); vv(1.1, 0.5); ECP;
00221   set_outline_color(col);
00222   // F outline
00223   BC; vv(-2.0, -0.5); vv(-1.0, -0.5); vv(-1.0, -0.3); vv(-1.8, -0.3);
00224   vv(-1.8, -0.1); vv(-1.2, -0.1); vv(-1.2, 0.1); vv(-1.8, 0.1);
00225   vv(-1.8, 0.5); vv(-2.0, 0.5); EC;
00226   // L outline
00227   BC; vv(-1.0, -0.5); vv(-0.8, -0.5); vv(-0.8, 0.3); vv(0.0, 0.3);
00228   vv(0.0, 0.5); vv(-1.0, 0.5); EC;
00229   // T outline
00230   BC; vv(-0.1, -0.5); vv(1.1, -0.5); vv(1.1, -0.3); vv(0.6, -0.3);
00231   vv(0.6, 0.5); vv(0.4, 0.5); vv(0.4, -0.3); vv(-0.1, -0.3); EC;
00232   // K outline
00233   BC; vv(1.1, -0.5); vv(1.3, -0.5); vv(1.3, -0.15); vv(1.70, -0.5);
00234   vv(2.0, -0.5); vv(1.43, 0.0); vv(2.0, 0.5); vv(1.70, 0.5);
00235   vv(1.3, 0.15); vv(1.3, 0.5); vv(1.1, 0.5); EC;
00236 }
00237 
00238 static void draw_search(Fl_Color col) 
00239 {
00240   fl_color(col);
00241   BP; vv(-.4, .13); vv(-1.0, .73); vv(-.73, 1.0); vv(-.13, .4); EP;
00242   set_outline_color(col);
00243   fl_line_style(FL_SOLID, 3, 0);
00244   BC; fl_circle(.2, -.2, .6); EC;
00245   fl_line_style(FL_SOLID, 1, 0);
00246   BC; vv(-.4, .13); vv(-1.0, .73); vv(-.73, 1.0); vv(-.13, .4); EC;
00247 }
00248 
00249 static void draw_arrow1(Fl_Color col)
00250 {
00251   fl_color(col);
00252   BP; vv(-0.8,-0.4); vv(-0.8,0.4); vv(0.0,0.4); vv(0.0,-0.4); EP;
00253   BP; vv(0.0,0.8); vv(0.8,0.0); vv(0.0,-0.8); vv(0.0,-0.4); vv(0.0,0.4); EP;
00254   set_outline_color(col);
00255   BC; vv(-0.8,-0.4); vv(-0.8,0.4); vv(0.0,0.4); vv(0.0,0.8); vv(0.8,0.0);
00256       vv(0.0,-0.8); vv(0.0,-0.4); EC;
00257 }
00258 
00259 static void draw_arrow1bar(Fl_Color col)
00260 {
00261   draw_arrow1(col);
00262   rectangle(.6,-.8,.9,.8,col);
00263 }
00264 
00265 static void draw_arrow2(Fl_Color col)
00266 {
00267   fl_color(col);
00268   BP; vv(-0.3,0.8); vv(0.50,0.0); vv(-0.3,-0.8); EP;
00269   set_outline_color(col);
00270   BC; vv(-0.3,0.8); vv(0.50,0.0); vv(-0.3,-0.8); EC;
00271 }
00272 
00273 static void draw_arrow3(Fl_Color col)
00274 {
00275   fl_color(col);
00276   BP; vv(0.1,0.8); vv(0.9,0.0); vv(0.1,-0.8); EP;
00277   BP; vv(-0.7,0.8); vv(0.1,0.0); vv(-0.7,-0.8); EP;
00278   set_outline_color(col);
00279   BC; vv(0.1,0.8); vv(0.9,0.0); vv(0.1,-0.8); EC;
00280   BC; vv(-0.7,0.8); vv(0.1,0.0); vv(-0.7,-0.8); EC;
00281 }
00282 
00283 static void draw_arrowbar(Fl_Color col)
00284 {
00285   fl_color(col);
00286   BP; vv(0.2,0.8); vv(0.6,0.8); vv(0.6,-0.8); vv(0.2,-0.8); EP;
00287   BP; vv(-0.6,0.8); vv(0.2,0.0); vv(-0.6,-0.8); EP;
00288   set_outline_color(col);
00289   BC; vv(0.2,0.8); vv(0.6,0.8); vv(0.6,-0.8); vv(0.2,-0.8); EC;
00290   BC; vv(-0.6,0.8); vv(0.2,0.0); vv(-0.6,-0.8); EC;
00291 }
00292 
00293 static void draw_arrowbox(Fl_Color col)
00294 {
00295   fl_color(col);
00296   BP; vv(-0.6,0.8); vv(0.2,0.0); vv(-0.6,-0.8); EP;
00297   BC; vv(0.2,0.8); vv(0.6,0.8); vv(0.6,-0.8); vv(0.2,-0.8); EC;
00298   set_outline_color(col);
00299   BC; vv(0.2,0.8); vv(0.6,0.8); vv(0.6,-0.8); vv(0.2,-0.8); EC;
00300   BC; vv(-0.6,0.8); vv(0.2,0.0); vv(-0.6,-0.8); EC;
00301 }
00302 
00303 static void draw_bararrow(Fl_Color col)
00304 {
00305   fl_color(col);
00306   BP; vv(0.1,0.8); vv(0.9,0.0); vv(0.1,-0.8); EP;
00307   BP; vv(-0.5,0.8); vv(-0.1,0.8); vv(-0.1,-0.8); vv(-0.5,-0.8); EP;
00308   set_outline_color(col);
00309   BC; vv(0.1,0.8); vv(0.9,0.0); vv(0.1,-0.8); EC;
00310   BC; vv(-0.5,0.8); vv(-0.1,0.8); vv(-0.1,-0.8); vv(-0.5,-0.8); EC;
00311 }
00312 
00313 static void draw_doublebar(Fl_Color col) { 
00314   rectangle(-0.6,-0.8,-.1,.8,col);
00315   rectangle(.1,-0.8,.6,.8,col); 
00316 }
00317 
00318 static void draw_arrow01(Fl_Color col)
00319   { fl_rotate(180); draw_arrow1(col); }
00320 
00321 static void draw_arrow02(Fl_Color col)
00322   { fl_rotate(180); draw_arrow2(col); }
00323 
00324 static void draw_arrow03(Fl_Color col)
00325   { fl_rotate(180); draw_arrow3(col); }
00326 
00327 static void draw_0arrowbar(Fl_Color col)
00328   { fl_rotate(180); draw_arrowbar(col); }
00329 
00330 static void draw_0arrowbox(Fl_Color col)
00331   { fl_rotate(180); draw_arrowbox(col); }
00332 
00333 static void draw_0bararrow(Fl_Color col)
00334   { fl_rotate(180); draw_bararrow(col); }
00335 
00336 static void draw_doublearrow(Fl_Color col)
00337 {
00338   fl_color(col);
00339   BP; vv(-0.35,-0.4); vv(-0.35,0.4); vv(0.35,0.4); vv(0.35,-0.4); EP;
00340   BP; vv(0.15,0.8); vv(0.95,0.0); vv(0.15,-0.8); EP;
00341   BP; vv(-0.15,0.8); vv(-0.95,0.0); vv(-0.15,-0.8); EP;
00342   set_outline_color(col);
00343   BC; vv(-0.15,0.4); vv(0.15,0.4); vv(0.15,0.8); vv(0.95,0.0);
00344       vv(0.15,-0.8); vv(0.15,-0.4); vv(-0.15,-0.4); vv(-0.15,-0.8);
00345       vv(-0.95,0.0); vv(-0.15,0.8); EC;
00346 }
00347 
00348 static void draw_arrow(Fl_Color col)
00349 {
00350   fl_color(col);
00351   BP; vv(0.65,0.1); vv(1.0,0.0); vv(0.65,-0.1); EP;
00352   BL; vv(-1.0,0.0); vv(0.65,0.0); EL;
00353   set_outline_color(col);
00354   BL; vv(-1.0,0.0); vv(0.65,0.0); EL;
00355   BC; vv(0.65,0.1); vv(1.0,0.0); vv(0.65,-0.1); EC;
00356 }
00357 
00358 static void draw_square(Fl_Color col)
00359   { rectangle(-1,-1,1,1,col); }
00360 
00361 static void draw_circle(Fl_Color col) {
00362   fl_color(col); BP; fl_circle(0,0,1); EP;
00363   set_outline_color(col);
00364   BC; fl_circle(0,0,1); EC;
00365 }
00366 
00367 static void draw_line(Fl_Color col)
00368   { fl_color(col); BL; vv(-1.0,0.0); vv(1.0,0.0); EL; }
00369 
00370 static void draw_plus(Fl_Color col)
00371 {
00372   fl_color(col);
00373   BP; vv(-0.9,-0.15); vv(-0.9,0.15); vv(0.9,0.15); vv(0.9,-0.15); EP;
00374   BP; vv(-0.15,-0.9); vv(-0.15,0.9); vv(0.15,0.9); vv(0.15,-0.9); EP;
00375   set_outline_color(col);
00376   BC;
00377   vv(-0.9,-0.15); vv(-0.9,0.15); vv(-0.15,0.15); vv(-0.15,0.9);
00378   vv(0.15,0.9); vv(0.15,0.15); vv(0.9,0.15); vv(0.9,-0.15);
00379   vv(0.15,-0.15); vv(0.15,-0.9); vv(-0.15,-0.9); vv(-0.15,-0.15);
00380   EC;
00381 }
00382 
00383 static void draw_uparrow(Fl_Color) {
00384   fl_color(FL_LIGHT3);
00385   BL; vv(-.8,.8); vv(-.8,-.8); vv(.8,0); EL;
00386   fl_color(FL_DARK3);
00387   BL; vv(-.8,.8); vv(.8, 0); EL;
00388 }
00389 
00390 static void draw_downarrow(Fl_Color) {
00391   fl_color(FL_DARK3);
00392   BL; vv(-.8,.8); vv(-.8,-.8); vv(.8,0); EL;
00393   fl_color(FL_LIGHT3);
00394   BL; vv(-.8,.8); vv(.8, 0); EL;
00395 }
00396 
00397 static void draw_menu(Fl_Color col)
00398 {
00399   rectangle(-0.65, 0.85, 0.65, -0.25, col);
00400   rectangle(-0.65, -0.6, 0.65, -1.0, col);
00401 }
00402 
00403 // Standard UI icons...
00404 static void draw_filenew(Fl_Color c) {
00405   fl_color(c);
00406   BCP;
00407     vv(-0.7, -1.0);
00408     vv(0.1, -1.0);
00409     vv(0.1, -0.4);
00410     vv(0.7, -0.4);
00411     vv(0.7, 1.0);
00412     vv(-0.7, 1.0);
00413   ECP;
00414 
00415   fl_color(fl_lighter(c));
00416   BP;
00417     vv(0.1, -1.0);
00418     vv(0.1, -0.4);
00419     vv(0.7, -0.4);
00420   EP;
00421 
00422   fl_color(fl_darker(c));
00423   BC;
00424     vv(-0.7, -1.0);
00425     vv(0.1, -1.0);
00426     vv(0.1, -0.4);
00427     vv(0.7, -0.4);
00428     vv(0.7, 1.0);
00429     vv(-0.7, 1.0);
00430   EC;
00431 
00432   BL;
00433     vv(0.1, -1.0);
00434     vv(0.7, -0.4);
00435   EL;
00436 }
00437 
00438 static void draw_fileopen(Fl_Color c) {
00439   fl_color(c);
00440   BP;
00441     vv(-1.0, -0.7);
00442     vv(-0.9, -0.8);
00443     vv(-0.4, -0.8);
00444     vv(-0.3, -0.7);
00445     vv(0.6, -0.7);
00446     vv(0.6, 0.7);
00447     vv(-1.0, 0.7);
00448   EP;
00449 
00450   fl_color(fl_darker(c));
00451   BC;
00452     vv(-1.0, -0.7);
00453     vv(-0.9, -0.8);
00454     vv(-0.4, -0.8);
00455     vv(-0.3, -0.7);
00456     vv(0.6, -0.7);
00457     vv(0.6, 0.7);
00458     vv(-1.0, 0.7);
00459   EC;
00460 
00461   fl_color(fl_lighter(c));
00462   BP;
00463     vv(-1.0, 0.7);
00464     vv(-0.6, -0.3);
00465     vv(1.0, -0.3);
00466     vv(0.6, 0.7);
00467   EP;
00468 
00469   fl_color(fl_darker(c));
00470   BC;
00471     vv(-1.0, 0.7);
00472     vv(-0.6, -0.3);
00473     vv(1.0, -0.3);
00474     vv(0.6, 0.7);
00475   EC;
00476 }
00477 
00478 static void draw_filesave(Fl_Color c) {
00479   fl_color(c);
00480   BP;
00481     vv(-0.9, -1.0);
00482     vv(0.9, -1.0);
00483     vv(1.0, -0.9);
00484     vv(1.0, 0.9);
00485     vv(0.9, 1.0);
00486     vv(-0.9, 1.0);
00487     vv(-1.0, 0.9);
00488     vv(-1.0, -0.9);
00489   EP;
00490 
00491   fl_color(fl_lighter(c));
00492   BP;
00493     vv(-0.7, -1.0);
00494     vv(0.7, -1.0);
00495     vv(0.7, -0.4);
00496     vv(-0.7, -0.4);
00497   EP;
00498 
00499   BP;
00500     vv(-0.7, 0.0);
00501     vv(0.7, 0.0);
00502     vv(0.7, 1.0);
00503     vv(-0.7, 1.0);
00504   EP;
00505 
00506   fl_color(c);
00507   BP;
00508     vv(-0.5, -0.9);
00509     vv(-0.3, -0.9);
00510     vv(-0.3, -0.5);
00511     vv(-0.5, -0.5);
00512   EP;
00513 
00514   fl_color(fl_darker(c));
00515   BC;
00516     vv(-0.9, -1.0);
00517     vv(0.9, -1.0);
00518     vv(1.0, -0.9);
00519     vv(1.0, 0.9);
00520     vv(0.9, 1.0);
00521     vv(-0.9, 1.0);
00522     vv(-1.0, 0.9);
00523     vv(-1.0, -0.9);
00524   EC;
00525 }
00526 
00527 static void draw_filesaveas(Fl_Color c) {
00528   draw_filesave(c);
00529 
00530   fl_color(fl_color_average(c, FL_WHITE, 0.25f));
00531   BP;
00532     vv(0.6, -0.8);
00533     vv(1.0, -0.4);
00534     vv(0.0, 0.6);
00535     vv(-0.4, 0.6);
00536     vv(-0.4, 0.2);
00537   EP;
00538 
00539   fl_color(fl_darker(c));
00540   BC;
00541     vv(0.6, -0.8);
00542     vv(1.0, -0.4);
00543     vv(0.0, 0.6);
00544     vv(-0.4, 0.6);
00545     vv(-0.4, 0.2);
00546   EC;
00547 
00548   BP;
00549     vv(-0.1, 0.6);
00550     vv(-0.4, 0.6);
00551     vv(-0.4, 0.3);
00552   EP;
00553 }
00554 
00555 static void draw_fileprint(Fl_Color c) {
00556   fl_color(c);
00557   BP;
00558     vv(-0.8, 0.0);
00559     vv(0.8, 0.0);
00560     vv(1.0, 0.2);
00561     vv(1.0, 1.0);
00562     vv(-1.0, 1.0);
00563     vv(-1.0, 0.2);
00564   EP;
00565 
00566   fl_color(fl_color_average(c, FL_WHITE, 0.25f));
00567   BP;
00568     vv(-0.6, 0.0);
00569     vv(-0.6, -1.0);
00570     vv(0.6, -1.0);
00571     vv(0.6, 0.0);
00572   EP;
00573 
00574   fl_color(fl_lighter(c));
00575   BP;
00576     vv(-0.6, 0.6);
00577     vv(0.6, 0.6);
00578     vv(0.6, 1.0);
00579     vv(-0.6, 1.0);
00580   EP;
00581 
00582   fl_color(fl_darker(c));
00583   BC;
00584     vv(-0.8, 0.0);
00585     vv(-0.6, 0.0);
00586     vv(-0.6, -1.0);
00587     vv(0.6, -1.0);
00588     vv(0.6, 0.0);
00589     vv(0.8, 0.0);
00590     vv(1.0, 0.2);
00591     vv(1.0, 1.0);
00592     vv(-1.0, 1.0);
00593     vv(-1.0, 0.2);
00594   EC;
00595 
00596   BC;
00597     vv(-0.6, 0.6);
00598     vv(0.6, 0.6);
00599     vv(0.6, 1.0);
00600     vv(-0.6, 1.0);
00601   EC;
00602 }
00603 
00604 static void draw_round_arrow(Fl_Color c, float da=5.0) {
00605   double a, r, dr1=0.005, dr2=0.015;
00606   int i, j;
00607   for (j=0; j<2; j++) {
00608     if (j&1) {
00609       fl_color(c);
00610       set_outline_color(c);
00611       BC;
00612     } else {
00613       fl_color(c);
00614       BCP;
00615     }
00616     vv(-0.1, 0.0);
00617     vv(-1.0, 0.0);
00618     vv(-1.0, 0.9);
00619     for (i=27, a=140.0, r=1.0; i>0; i--, a-=da, r-=dr1) {
00620       double ar = a/180.0 * M_PI;
00621       vv(cos(ar)*r, sin(ar)*r);
00622     }
00623     for (i=27; i>=0; a+=da, i--, r-=dr2) {
00624       double ar = a/180.0 * M_PI;
00625       vv(cos(ar)*r, sin(ar)*r);
00626     }
00627     if (j&1) {
00628       EC;
00629     } else {
00630       ECP;
00631     }
00632   }
00633 }
00634 
00635 static void draw_refresh(Fl_Color c) {
00636   draw_round_arrow(c);
00637   fl_rotate(180.0);
00638   draw_round_arrow(c);
00639   fl_rotate(-180.0);
00640 }
00641 
00642 static void draw_reload(Fl_Color c) {
00643   fl_rotate(-135.0);
00644   draw_round_arrow(c, 10);
00645   fl_rotate(135.0);
00646 }
00647 
00648 static void draw_undo(Fl_Color c) {
00649   fl_translate(0.0, 0.2);
00650   fl_scale(1.0, -1.0);
00651   draw_round_arrow(c, 6);
00652   fl_scale(1.0, -1.0);
00653   fl_translate(0.0, -0.2);
00654 }
00655 
00656 static void draw_redo(Fl_Color c) {
00657   fl_scale(-1.0, 1.0);
00658   draw_undo(c);
00659   fl_scale(-1.0, 1.0);
00660 }
00661 
00662 static void fl_init_symbols(void) {
00663   static char beenhere;
00664   if (beenhere) return;
00665   beenhere = 1;
00666   symbnumb = 0;
00667 
00668   fl_add_symbol("",             draw_arrow1,            1);
00669   fl_add_symbol("->",           draw_arrow1,            1);
00670   fl_add_symbol(">",            draw_arrow2,            1);
00671   fl_add_symbol(">>",           draw_arrow3,            1);
00672   fl_add_symbol(">|",           draw_arrowbar,          1);
00673   fl_add_symbol(">[]",          draw_arrowbox,          1);
00674   fl_add_symbol("|>",           draw_bararrow,          1);
00675   fl_add_symbol("<-",           draw_arrow01,           1);
00676   fl_add_symbol("<",            draw_arrow02,           1);
00677   fl_add_symbol("<<",           draw_arrow03,           1);
00678   fl_add_symbol("|<",           draw_0arrowbar,         1);
00679   fl_add_symbol("[]<",          draw_0arrowbox,         1);
00680   fl_add_symbol("<|",           draw_0bararrow,         1);
00681   fl_add_symbol("<->",          draw_doublearrow,       1);
00682   fl_add_symbol("-->",          draw_arrow,             1);
00683   fl_add_symbol("+",            draw_plus,              1);
00684   fl_add_symbol("->|",          draw_arrow1bar,         1);
00685   fl_add_symbol("arrow",        draw_arrow,             1);
00686   fl_add_symbol("returnarrow",  0,                      3);
00687   fl_add_symbol("square",       draw_square,            1);
00688   fl_add_symbol("circle",       draw_circle,            1);
00689   fl_add_symbol("line",         draw_line,              1);
00690   fl_add_symbol("plus",         draw_plus,              1);
00691   fl_add_symbol("menu",         draw_menu,              1);
00692   fl_add_symbol("UpArrow",      draw_uparrow,           1);
00693   fl_add_symbol("DnArrow",      draw_downarrow,         1);
00694   fl_add_symbol("||",           draw_doublebar,         1);
00695   fl_add_symbol("search",       draw_search,            1);
00696   fl_add_symbol("FLTK",         draw_fltk,              1);
00697 
00698   fl_add_symbol("filenew",      draw_filenew,           1);
00699   fl_add_symbol("fileopen",     draw_fileopen,          1);
00700   fl_add_symbol("filesave",     draw_filesave,          1);
00701   fl_add_symbol("filesaveas",   draw_filesaveas,        1);
00702   fl_add_symbol("fileprint",    draw_fileprint,         1);
00703 
00704   fl_add_symbol("refresh",      draw_refresh,           1);
00705   fl_add_symbol("reload",       draw_reload,            1);
00706   fl_add_symbol("undo",         draw_undo,              1);
00707   fl_add_symbol("redo",         draw_redo,              1);
00708 
00709 //  fl_add_symbol("file",      draw_file,           1);
00710 }
00711 
00712 //
00713 // End of "$Id: fl_symbols.cxx 7903 2010-11-28 21:06:39Z matt $".
00714 //