1 //
2 // "$Id: fl_symbols.cxx 5190 2006-06-09 16:16:34Z mike $"
3 //
4 // Symbol drawing code for the Fast Light Tool Kit (FLTK).
5 //
6 // Copyright 1998-2005 by Bill Spitzak and others.
7 //
8 // This library is free software; you can redistribute it and/or
9 // modify it under the terms of the GNU Library General Public
10 // License as published by the Free Software Foundation; either
11 // version 2 of the License, or (at your option) any later version.
12 //
13 // This library is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 // Library General Public License for more details.
17 //
18 // You should have received a copy of the GNU Library General Public
19 // License along with this library; if not, write to the Free Software
20 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
21 // USA.
22 //
23 // Please report all bugs and problems on the following page:
24 //
25 // http://www.fltk.org/str.php
26 //
27
28 // These are small graphics drawn by the normal label-drawing
29 // code when the string starts with an '@' sign.
30
31 // Adapted from original code written by:
32
33 // Written by Mark Overmars
34 // Version 2.1 a
35 // Date: Oct 2, 1992
36
37 #include <FL/Fl.H>
38 #include <FL/fl_draw.H>
39 #include <FL/math.h>
40 #include "flstring.h"
41
42 typedef struct {
43 const char *name;
44 void (*drawit)(Fl_Color);
45 char scalable;
46 char notempty;
47 } SYMBOL;
48
49 #define MAXSYMBOL 211
50 /* Maximal number of symbols in table. Only half of them are
51 used. Should be prime. */
52
53 static SYMBOL symbols[MAXSYMBOL]; /* The symbols */
54 static int symbnumb = -1; /* Their number */
55
find(const char * name)56 static int find(const char *name) {
57 // returns hash entry if it exists, or first empty slot:
58 int pos = name[0] ? (
59 name[1] ? (
60 name[2] ? 71*name[0]+31*name[1]+name[2] : 31*name[0]+name[1]
61 ) :
62 name[0]
63 ) : 0;
64 pos %= MAXSYMBOL;
65 int hh2 = name[0] ? (
66 (name[1]) ? 51*name[0]+3*name[1] : 3*name[0]
67 ) : 1;
68 hh2 %= MAXSYMBOL; if (!hh2) hh2 = 1;
69 for (;;) {
70 if (!symbols[pos].notempty) return pos;
71 if (!strcmp(symbols[pos].name,name)) return pos;
72 pos = (pos + hh2) % MAXSYMBOL;
73 }
74 }
75
76 static void fl_init_symbols(void);
77
78 /**************** The routines seen by the user *************************/
79
fl_add_symbol(const char * name,void (* drawit)(Fl_Color),int scalable)80 int fl_add_symbol(const char *name, void (*drawit)(Fl_Color), int scalable)
81 /* Adds a symbol to the system. Returns whether correct. */
82 {
83 fl_init_symbols();
84 int pos;
85 if (symbnumb > MAXSYMBOL / 2) return 0; // table is full
86 pos = find(name);
87 symbols[pos].name = name;
88 symbols[pos].drawit = drawit;
89 symbols[pos].notempty = 1;
90 symbols[pos].scalable = scalable;
91 symbnumb++;
92 return 1;
93 }
94
95 int fl_return_arrow(int x,int y,int w,int h);
96
97 // provided for back compatability:
fl_draw_symbol(const char * label,int x,int y,int w,int h,Fl_Color col)98 int fl_draw_symbol(const char *label,int x,int y,int w,int h,Fl_Color col) {
99 const char *p = label;
100 if (*p++ != '@') return 0;
101 fl_init_symbols();
102 int equalscale = 0;
103 if (*p == '#') {equalscale = 1; p++;}
104 if (*p == '-' && p[1]>='1' && p[1]<='9') {
105 int n = p[1]-'0';
106 x += n; y += n; w -= 2*n; h -= 2*n;
107 p += 2;
108 } else if (*p == '+' && p[1]>='1' && p[1]<='9') {
109 int n = p[1]-'0';
110 x -= n; y -= n; w += 2*n; h += 2*n;
111 p += 2;
112 }
113 if (w < 10) {x -= (10-w)/2; w = 10;}
114 if (h < 10) {y -= (10-h)/2; h = 10;}
115 w = (w-1)|1; h = (h-1)|1;
116 char flip_x = 0, flip_y = 0;
117 if (*p=='$') {
118 flip_x = 1;
119 p++;
120 }
121 if (*p=='%') {
122 flip_y = 1;
123 p++;
124 }
125 int rotangle;
126 switch (*p++) {
127 case '0':
128 rotangle = 1000*(p[1]-'0') + 100*(p[2]-'0') + 10*(p[3]-'0');
129 p += 4;
130 break;
131 case '1': rotangle = 2250; break;
132 case '2': rotangle = 2700; break;
133 case '3': rotangle = 3150; break;
134 case '4': rotangle = 1800; break;
135 case '5':
136 case '6': rotangle = 0; break;
137 case '7': rotangle = 1350; break;
138 case '8': rotangle = 900; break;
139 case '9': rotangle = 450; break;
140 default: rotangle = 0; p--; break;
141 }
142 int pos = find(p);
143 if (!symbols[pos].notempty) return 0;
144 if (symbols[pos].scalable == 3) { // kludge to detect return arrow
145 fl_return_arrow(x,y,w,h);
146 return 1;
147 }
148 fl_push_matrix();
149 fl_translate(x+w/2,y+h/2);
150 if (symbols[pos].scalable) {
151 if (equalscale) {if (w<h) h = w; else w = h;}
152 fl_scale(0.5*w, 0.5*h);
153 fl_rotate(rotangle/10.0);
154 if (flip_x) fl_scale(-1.0, 1.0);
155 if (flip_y) fl_scale(1.0, -1.0);
156 }
157 (symbols[pos].drawit)(col);
158 fl_pop_matrix();
159 return 1;
160 }
161
162 /******************** THE DEFAULT SYMBOLS ****************************/
163
164 /* Some help stuff */
165
166 #define BP fl_begin_polygon()
167 #define EP fl_end_polygon()
168 #define BCP fl_begin_complex_polygon()
169 #define ECP fl_end_complex_polygon()
170 #define BL fl_begin_line()
171 #define EL fl_end_line()
172 #define BC fl_begin_loop()
173 #define EC fl_end_loop()
174 #define vv(x,y) fl_vertex(x,y)
175
176 //for the outline color
set_outline_color(Fl_Color c)177 static void set_outline_color(Fl_Color c) {
178 fl_color(fl_darker(c));
179 }
180
rectangle(double x,double y,double x2,double y2,Fl_Color col)181 static void rectangle(double x,double y,double x2,double y2,Fl_Color col) {
182 fl_color(col);
183 BP; vv(x,y); vv(x2,y); vv(x2,y2); vv(x,y2); EP;
184 set_outline_color(col);
185 BC; vv(x,y); vv(x2,y); vv(x2,y2); vv(x,y2); EC;
186 }
187
188 /* The drawing routines */
189
draw_fltk(Fl_Color col)190 static void draw_fltk(Fl_Color col)
191 {
192 fl_color(col);
193 // F fill
194 BCP; vv(-2.0, -0.5); vv(-1.0, -0.5); vv(-1.0, -0.3); vv(-1.8, -0.3);
195 vv(-1.8, -0.1); vv(-1.2, -0.1); vv(-1.2, 0.1); vv(-1.8, 0.1);
196 vv(-1.8, 0.5); vv(-2.0, 0.5); ECP;
197 // L fill
198 BCP; vv(-1.0, -0.5); vv(-0.8, -0.5); vv(-0.8, 0.3); vv(0.0, 0.3);
199 vv(0.0, 0.5); vv(-1.0, 0.5); ECP;
200 // T outline
201 BCP; vv(-0.1, -0.5); vv(1.1, -0.5); vv(1.1, -0.3); vv(0.6, -0.3);
202 vv(0.6, 0.5); vv(0.4, 0.5); vv(0.4, -0.3); vv(-0.1, -0.3); ECP;
203 // K outline
204 BCP; vv(1.1, -0.5); vv(1.3, -0.5); vv(1.3, -0.15); vv(1.70, -0.5);
205 vv(2.0, -0.5); vv(1.43, 0.0); vv(2.0, 0.5); vv(1.70, 0.5);
206 vv(1.3, 0.15); vv(1.3, 0.5); vv(1.1, 0.5); ECP;
207 set_outline_color(col);
208 // F outline
209 BC; vv(-2.0, -0.5); vv(-1.0, -0.5); vv(-1.0, -0.3); vv(-1.8, -0.3);
210 vv(-1.8, -0.1); vv(-1.2, -0.1); vv(-1.2, 0.1); vv(-1.8, 0.1);
211 vv(-1.8, 0.5); vv(-2.0, 0.5); EC;
212 // L outline
213 BC; vv(-1.0, -0.5); vv(-0.8, -0.5); vv(-0.8, 0.3); vv(0.0, 0.3);
214 vv(0.0, 0.5); vv(-1.0, 0.5); EC;
215 // T outline
216 BC; vv(-0.1, -0.5); vv(1.1, -0.5); vv(1.1, -0.3); vv(0.6, -0.3);
217 vv(0.6, 0.5); vv(0.4, 0.5); vv(0.4, -0.3); vv(-0.1, -0.3); EC;
218 // K outline
219 BC; vv(1.1, -0.5); vv(1.3, -0.5); vv(1.3, -0.15); vv(1.70, -0.5);
220 vv(2.0, -0.5); vv(1.43, 0.0); vv(2.0, 0.5); vv(1.70, 0.5);
221 vv(1.3, 0.15); vv(1.3, 0.5); vv(1.1, 0.5); EC;
222 }
223
draw_search(Fl_Color col)224 static void draw_search(Fl_Color col)
225 {
226 fl_color(col);
227 BP; vv(-.4, .13); vv(-1.0, .73); vv(-.73, 1.0); vv(-.13, .4); EP;
228 set_outline_color(col);
229 fl_line_style(FL_SOLID, 3, 0);
230 BC; fl_circle(.2, -.2, .6); EC;
231 fl_line_style(FL_SOLID, 1, 0);
232 BC; vv(-.4, .13); vv(-1.0, .73); vv(-.73, 1.0); vv(-.13, .4); EC;
233 }
234
draw_arrow1(Fl_Color col)235 static void draw_arrow1(Fl_Color col)
236 {
237 fl_color(col);
238 BP; vv(-0.8,-0.4); vv(-0.8,0.4); vv(0.0,0.4); vv(0.0,-0.4); EP;
239 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;
240 set_outline_color(col);
241 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);
242 vv(0.0,-0.8); vv(0.0,-0.4); EC;
243 }
244
draw_arrow1bar(Fl_Color col)245 static void draw_arrow1bar(Fl_Color col)
246 {
247 draw_arrow1(col);
248 rectangle(.6,-.8,.9,.8,col);
249 }
250
draw_arrow2(Fl_Color col)251 static void draw_arrow2(Fl_Color col)
252 {
253 fl_color(col);
254 BP; vv(-0.3,0.8); vv(0.50,0.0); vv(-0.3,-0.8); EP;
255 set_outline_color(col);
256 BC; vv(-0.3,0.8); vv(0.50,0.0); vv(-0.3,-0.8); EC;
257 }
258
draw_arrow3(Fl_Color col)259 static void draw_arrow3(Fl_Color col)
260 {
261 fl_color(col);
262 BP; vv(0.1,0.8); vv(0.9,0.0); vv(0.1,-0.8); EP;
263 BP; vv(-0.7,0.8); vv(0.1,0.0); vv(-0.7,-0.8); EP;
264 set_outline_color(col);
265 BC; vv(0.1,0.8); vv(0.9,0.0); vv(0.1,-0.8); EC;
266 BC; vv(-0.7,0.8); vv(0.1,0.0); vv(-0.7,-0.8); EC;
267 }
268
draw_arrowbar(Fl_Color col)269 static void draw_arrowbar(Fl_Color col)
270 {
271 fl_color(col);
272 BP; vv(0.2,0.8); vv(0.6,0.8); vv(0.6,-0.8); vv(0.2,-0.8); EP;
273 BP; vv(-0.6,0.8); vv(0.2,0.0); vv(-0.6,-0.8); EP;
274 set_outline_color(col);
275 BC; vv(0.2,0.8); vv(0.6,0.8); vv(0.6,-0.8); vv(0.2,-0.8); EC;
276 BC; vv(-0.6,0.8); vv(0.2,0.0); vv(-0.6,-0.8); EC;
277 }
278
draw_arrowbox(Fl_Color col)279 static void draw_arrowbox(Fl_Color col)
280 {
281 fl_color(col);
282 BP; vv(-0.6,0.8); vv(0.2,0.0); vv(-0.6,-0.8); EP;
283 BC; vv(0.2,0.8); vv(0.6,0.8); vv(0.6,-0.8); vv(0.2,-0.8); EC;
284 set_outline_color(col);
285 BC; vv(0.2,0.8); vv(0.6,0.8); vv(0.6,-0.8); vv(0.2,-0.8); EC;
286 BC; vv(-0.6,0.8); vv(0.2,0.0); vv(-0.6,-0.8); EC;
287 }
288
draw_bararrow(Fl_Color col)289 static void draw_bararrow(Fl_Color col)
290 {
291 fl_color(col);
292 BP; vv(0.1,0.8); vv(0.9,0.0); vv(0.1,-0.8); EP;
293 BP; vv(-0.5,0.8); vv(-0.1,0.8); vv(-0.1,-0.8); vv(-0.5,-0.8); EP;
294 set_outline_color(col);
295 BC; vv(0.1,0.8); vv(0.9,0.0); vv(0.1,-0.8); EC;
296 BC; vv(-0.5,0.8); vv(-0.1,0.8); vv(-0.1,-0.8); vv(-0.5,-0.8); EC;
297 }
298
draw_doublebar(Fl_Color col)299 static void draw_doublebar(Fl_Color col) {
300 rectangle(-0.6,-0.8,-.1,.8,col);
301 rectangle(.1,-0.8,.6,.8,col);
302 }
303
draw_arrow01(Fl_Color col)304 static void draw_arrow01(Fl_Color col)
305 { fl_rotate(180); draw_arrow1(col); }
306
draw_arrow02(Fl_Color col)307 static void draw_arrow02(Fl_Color col)
308 { fl_rotate(180); draw_arrow2(col); }
309
draw_arrow03(Fl_Color col)310 static void draw_arrow03(Fl_Color col)
311 { fl_rotate(180); draw_arrow3(col); }
312
draw_0arrowbar(Fl_Color col)313 static void draw_0arrowbar(Fl_Color col)
314 { fl_rotate(180); draw_arrowbar(col); }
315
draw_0arrowbox(Fl_Color col)316 static void draw_0arrowbox(Fl_Color col)
317 { fl_rotate(180); draw_arrowbox(col); }
318
draw_0bararrow(Fl_Color col)319 static void draw_0bararrow(Fl_Color col)
320 { fl_rotate(180); draw_bararrow(col); }
321
draw_doublearrow(Fl_Color col)322 static void draw_doublearrow(Fl_Color col)
323 {
324 fl_color(col);
325 BP; vv(-0.35,-0.4); vv(-0.35,0.4); vv(0.35,0.4); vv(0.35,-0.4); EP;
326 BP; vv(0.15,0.8); vv(0.95,0.0); vv(0.15,-0.8); EP;
327 BP; vv(-0.15,0.8); vv(-0.95,0.0); vv(-0.15,-0.8); EP;
328 set_outline_color(col);
329 BC; vv(-0.15,0.4); vv(0.15,0.4); vv(0.15,0.8); vv(0.95,0.0);
330 vv(0.15,-0.8); vv(0.15,-0.4); vv(-0.15,-0.4); vv(-0.15,-0.8);
331 vv(-0.95,0.0); vv(-0.15,0.8); EC;
332 }
333
draw_arrow(Fl_Color col)334 static void draw_arrow(Fl_Color col)
335 {
336 fl_color(col);
337 BP; vv(0.65,0.1); vv(1.0,0.0); vv(0.65,-0.1); EP;
338 BL; vv(-1.0,0.0); vv(0.65,0.0); EL;
339 set_outline_color(col);
340 BL; vv(-1.0,0.0); vv(0.65,0.0); EL;
341 BC; vv(0.65,0.1); vv(1.0,0.0); vv(0.65,-0.1); EC;
342 }
343
draw_square(Fl_Color col)344 static void draw_square(Fl_Color col)
345 { rectangle(-1,-1,1,1,col); }
346
draw_circle(Fl_Color col)347 static void draw_circle(Fl_Color col) {
348 fl_color(col); BP; fl_circle(0,0,1); EP;
349 set_outline_color(col);
350 BC; fl_circle(0,0,1); EC;
351 }
352
draw_line(Fl_Color col)353 static void draw_line(Fl_Color col)
354 { fl_color(col); BL; vv(-1.0,0.0); vv(1.0,0.0); EL; }
355
draw_plus(Fl_Color col)356 static void draw_plus(Fl_Color col)
357 {
358 fl_color(col);
359 BP; vv(-0.9,-0.15); vv(-0.9,0.15); vv(0.9,0.15); vv(0.9,-0.15); EP;
360 BP; vv(-0.15,-0.9); vv(-0.15,0.9); vv(0.15,0.9); vv(0.15,-0.9); EP;
361 set_outline_color(col);
362 BC;
363 vv(-0.9,-0.15); vv(-0.9,0.15); vv(-0.15,0.15); vv(-0.15,0.9);
364 vv(0.15,0.9); vv(0.15,0.15); vv(0.9,0.15); vv(0.9,-0.15);
365 vv(0.15,-0.15); vv(0.15,-0.9); vv(-0.15,-0.9); vv(-0.15,-0.15);
366 EC;
367 }
368
draw_uparrow(Fl_Color)369 static void draw_uparrow(Fl_Color) {
370 fl_color(FL_LIGHT3);
371 BL; vv(-.8,.8); vv(-.8,-.8); vv(.8,0); EL;
372 fl_color(FL_DARK3);
373 BL; vv(-.8,.8); vv(.8, 0); EL;
374 }
375
draw_downarrow(Fl_Color)376 static void draw_downarrow(Fl_Color) {
377 fl_color(FL_DARK3);
378 BL; vv(-.8,.8); vv(-.8,-.8); vv(.8,0); EL;
379 fl_color(FL_LIGHT3);
380 BL; vv(-.8,.8); vv(.8, 0); EL;
381 }
382
draw_menu(Fl_Color col)383 static void draw_menu(Fl_Color col)
384 {
385 rectangle(-0.65, 0.85, 0.65, -0.25, col);
386 rectangle(-0.65, -0.6, 0.65, -1.0, col);
387 }
388
389 // Standard UI icons...
draw_filenew(Fl_Color c)390 static void draw_filenew(Fl_Color c) {
391 fl_color(c);
392 BCP;
393 vv(-0.7, -1.0);
394 vv(0.1, -1.0);
395 vv(0.1, -0.4);
396 vv(0.7, -0.4);
397 vv(0.7, 1.0);
398 vv(-0.7, 1.0);
399 ECP;
400
401 fl_color(fl_lighter(c));
402 BP;
403 vv(0.1, -1.0);
404 vv(0.1, -0.4);
405 vv(0.7, -0.4);
406 EP;
407
408 fl_color(fl_darker(c));
409 BC;
410 vv(-0.7, -1.0);
411 vv(0.1, -1.0);
412 vv(0.1, -0.4);
413 vv(0.7, -0.4);
414 vv(0.7, 1.0);
415 vv(-0.7, 1.0);
416 EC;
417
418 BL;
419 vv(0.1, -1.0);
420 vv(0.7, -0.4);
421 EL;
422 }
423
draw_fileopen(Fl_Color c)424 static void draw_fileopen(Fl_Color c) {
425 fl_color(c);
426 BP;
427 vv(-1.0, -0.7);
428 vv(-0.9, -0.8);
429 vv(-0.4, -0.8);
430 vv(-0.3, -0.7);
431 vv(0.6, -0.7);
432 vv(0.6, 0.7);
433 vv(-1.0, 0.7);
434 EP;
435
436 fl_color(fl_darker(c));
437 BC;
438 vv(-1.0, -0.7);
439 vv(-0.9, -0.8);
440 vv(-0.4, -0.8);
441 vv(-0.3, -0.7);
442 vv(0.6, -0.7);
443 vv(0.6, 0.7);
444 vv(-1.0, 0.7);
445 EC;
446
447 fl_color(fl_lighter(c));
448 BP;
449 vv(-1.0, 0.7);
450 vv(-0.6, -0.3);
451 vv(1.0, -0.3);
452 vv(0.6, 0.7);
453 EP;
454
455 fl_color(fl_darker(c));
456 BC;
457 vv(-1.0, 0.7);
458 vv(-0.6, -0.3);
459 vv(1.0, -0.3);
460 vv(0.6, 0.7);
461 EC;
462 }
463
draw_filesave(Fl_Color c)464 static void draw_filesave(Fl_Color c) {
465 fl_color(c);
466 BP;
467 vv(-0.9, -1.0);
468 vv(0.9, -1.0);
469 vv(1.0, -0.9);
470 vv(1.0, 0.9);
471 vv(0.9, 1.0);
472 vv(-0.9, 1.0);
473 vv(-1.0, 0.9);
474 vv(-1.0, -0.9);
475 EP;
476
477 fl_color(fl_lighter(c));
478 BP;
479 vv(-0.7, -1.0);
480 vv(0.7, -1.0);
481 vv(0.7, -0.4);
482 vv(-0.7, -0.4);
483 EP;
484
485 BP;
486 vv(-0.7, 0.0);
487 vv(0.7, 0.0);
488 vv(0.7, 1.0);
489 vv(-0.7, 1.0);
490 EP;
491
492 fl_color(c);
493 BP;
494 vv(-0.5, -0.9);
495 vv(-0.3, -0.9);
496 vv(-0.3, -0.5);
497 vv(-0.5, -0.5);
498 EP;
499
500 fl_color(fl_darker(c));
501 BC;
502 vv(-0.9, -1.0);
503 vv(0.9, -1.0);
504 vv(1.0, -0.9);
505 vv(1.0, 0.9);
506 vv(0.9, 1.0);
507 vv(-0.9, 1.0);
508 vv(-1.0, 0.9);
509 vv(-1.0, -0.9);
510 EC;
511 }
512
draw_filesaveas(Fl_Color c)513 static void draw_filesaveas(Fl_Color c) {
514 draw_filesave(c);
515
516 fl_color(fl_color_average(c, FL_WHITE, 0.25f));
517 BP;
518 vv(0.6, -0.8);
519 vv(1.0, -0.4);
520 vv(0.0, 0.6);
521 vv(-0.4, 0.6);
522 vv(-0.4, 0.2);
523 EP;
524
525 fl_color(fl_darker(c));
526 BC;
527 vv(0.6, -0.8);
528 vv(1.0, -0.4);
529 vv(0.0, 0.6);
530 vv(-0.4, 0.6);
531 vv(-0.4, 0.2);
532 EC;
533
534 BP;
535 vv(-0.1, 0.6);
536 vv(-0.4, 0.6);
537 vv(-0.4, 0.3);
538 EP;
539 }
540
draw_fileprint(Fl_Color c)541 static void draw_fileprint(Fl_Color c) {
542 fl_color(c);
543 BP;
544 vv(-0.8, 0.0);
545 vv(0.8, 0.0);
546 vv(1.0, 0.2);
547 vv(1.0, 1.0);
548 vv(-1.0, 1.0);
549 vv(-1.0, 0.2);
550 EP;
551
552 fl_color(fl_color_average(c, FL_WHITE, 0.25f));
553 BP;
554 vv(-0.6, 0.0);
555 vv(-0.6, -1.0);
556 vv(0.6, -1.0);
557 vv(0.6, 0.0);
558 EP;
559
560 fl_color(fl_lighter(c));
561 BP;
562 vv(-0.6, 0.6);
563 vv(0.6, 0.6);
564 vv(0.6, 1.0);
565 vv(-0.6, 1.0);
566 EP;
567
568 fl_color(fl_darker(c));
569 BC;
570 vv(-0.8, 0.0);
571 vv(-0.6, 0.0);
572 vv(-0.6, -1.0);
573 vv(0.6, -1.0);
574 vv(0.6, 0.0);
575 vv(0.8, 0.0);
576 vv(1.0, 0.2);
577 vv(1.0, 1.0);
578 vv(-1.0, 1.0);
579 vv(-1.0, 0.2);
580 EC;
581
582 BC;
583 vv(-0.6, 0.6);
584 vv(0.6, 0.6);
585 vv(0.6, 1.0);
586 vv(-0.6, 1.0);
587 EC;
588 }
589
draw_round_arrow(Fl_Color c,float da=5.0)590 static void draw_round_arrow(Fl_Color c, float da=5.0) {
591 double a, r, dr1=0.005, dr2=0.015;
592 int i, j;
593 for (j=0; j<2; j++) {
594 if (j&1) {
595 fl_color(c);
596 set_outline_color(c);
597 BC;
598 } else {
599 fl_color(c);
600 BCP;
601 }
602 vv(-0.1, 0.0);
603 vv(-1.0, 0.0);
604 vv(-1.0, 0.9);
605 for (i=27, a=140.0, r=1.0; i>0; i--, a-=da, r-=dr1) {
606 double ar = a/180.0 * M_PI;
607 vv(cos(ar)*r, sin(ar)*r);
608 }
609 for (i=27; i>=0; a+=da, i--, r-=dr2) {
610 double ar = a/180.0 * M_PI;
611 vv(cos(ar)*r, sin(ar)*r);
612 }
613 if (j&1) {
614 EC;
615 } else {
616 ECP;
617 }
618 }
619 }
620
draw_refresh(Fl_Color c)621 static void draw_refresh(Fl_Color c) {
622 draw_round_arrow(c);
623 fl_rotate(180.0);
624 draw_round_arrow(c);
625 fl_rotate(-180.0);
626 }
627
draw_reload(Fl_Color c)628 static void draw_reload(Fl_Color c) {
629 fl_rotate(-135.0);
630 draw_round_arrow(c, 10);
631 fl_rotate(135.0);
632 }
633
draw_undo(Fl_Color c)634 static void draw_undo(Fl_Color c) {
635 fl_translate(0.0, 0.2);
636 fl_scale(1.0, -1.0);
637 draw_round_arrow(c, 6);
638 fl_scale(1.0, -1.0);
639 fl_translate(0.0, -0.2);
640 }
641
draw_redo(Fl_Color c)642 static void draw_redo(Fl_Color c) {
643 fl_scale(-1.0, 1.0);
644 draw_undo(c);
645 fl_scale(-1.0, 1.0);
646 }
647
fl_init_symbols(void)648 static void fl_init_symbols(void) {
649 static char beenhere;
650 if (beenhere) return;
651 beenhere = 1;
652 symbnumb = 0;
653
654 fl_add_symbol("", draw_arrow1, 1);
655 fl_add_symbol("->", draw_arrow1, 1);
656 fl_add_symbol(">", draw_arrow2, 1);
657 fl_add_symbol(">>", draw_arrow3, 1);
658 fl_add_symbol(">|", draw_arrowbar, 1);
659 fl_add_symbol(">[]", draw_arrowbox, 1);
660 fl_add_symbol("|>", draw_bararrow, 1);
661 fl_add_symbol("<-", draw_arrow01, 1);
662 fl_add_symbol("<", draw_arrow02, 1);
663 fl_add_symbol("<<", draw_arrow03, 1);
664 fl_add_symbol("|<", draw_0arrowbar, 1);
665 fl_add_symbol("[]<", draw_0arrowbox, 1);
666 fl_add_symbol("<|", draw_0bararrow, 1);
667 fl_add_symbol("<->", draw_doublearrow, 1);
668 fl_add_symbol("-->", draw_arrow, 1);
669 fl_add_symbol("+", draw_plus, 1);
670 fl_add_symbol("->|", draw_arrow1bar, 1);
671 fl_add_symbol("arrow", draw_arrow, 1);
672 fl_add_symbol("returnarrow", 0, 3);
673 fl_add_symbol("square", draw_square, 1);
674 fl_add_symbol("circle", draw_circle, 1);
675 fl_add_symbol("line", draw_line, 1);
676 fl_add_symbol("plus", draw_plus, 1);
677 fl_add_symbol("menu", draw_menu, 1);
678 fl_add_symbol("UpArrow", draw_uparrow, 1);
679 fl_add_symbol("DnArrow", draw_downarrow, 1);
680 fl_add_symbol("||", draw_doublebar, 1);
681 fl_add_symbol("search", draw_search, 1);
682 fl_add_symbol("FLTK", draw_fltk, 1);
683
684 fl_add_symbol("filenew", draw_filenew, 1);
685 fl_add_symbol("fileopen", draw_fileopen, 1);
686 fl_add_symbol("filesave", draw_filesave, 1);
687 fl_add_symbol("filesaveas", draw_filesaveas, 1);
688 fl_add_symbol("fileprint", draw_fileprint, 1);
689
690 fl_add_symbol("refresh", draw_refresh, 1);
691 fl_add_symbol("reload", draw_reload, 1);
692 fl_add_symbol("undo", draw_undo, 1);
693 fl_add_symbol("redo", draw_redo, 1);
694
695 // fl_add_symbol("file", draw_file, 1);
696 }
697
698 //
699 // End of "$Id: fl_symbols.cxx 5190 2006-06-09 16:16:34Z mike $".
700 //
701