source: rtems-graphics-toolkit/fltk-1.3.0/test/device.cxx @ 855379e

Last change on this file since 855379e was f5c9e9c, checked in by Alexandru-Sever Horin <alex.sever.h@…>, on 07/05/12 at 09:33:03

Aded FLTK 1.3.0

  • Property mode set to 100644
File size: 20.1 KB
Line 
1//
2// "$Id: device.cxx 8815 2011-06-16 15:11:18Z matt $"
3//
4// Device test program for the Fast Light Tool Kit (FLTK).
5//
6// Copyright 1998-2011 by Roman Kantor 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307
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#include <math.h>
29#include <FL/Fl.H>
30
31#include <FL/Fl_Overlay_Window.H>
32#include <FL/Fl_Light_Button.H>
33#include <FL/fl_draw.H>
34#include <FL/Fl_Clock.H>
35#include "pixmaps/porsche.xpm"
36#include <FL/Fl_Pixmap.H>
37#include <FL/Fl_Bitmap.H>
38#include <FL/Fl_Round_Button.H>
39
40
41#include <FL/Fl_Printer.H>
42
43//#include "fl_printer_chooser.H"
44
45#include <FL/Fl_File_Chooser.H>
46#include <FL/fl_draw.H>
47
48
49#define sorceress_width 75
50#define sorceress_height 75
51
52
53// shameles copy from bitmap...
54static uchar sorceress_bits[] = {
55  0xfc, 0x7e, 0x40, 0x20, 0x90, 0x00, 0x07, 0x80, 0x23, 0x00, 0x00, 0xc6,
56  0xc1, 0x41, 0x98, 0xb8, 0x01, 0x07, 0x66, 0x00, 0x15, 0x9f, 0x03, 0x47,
57  0x8c, 0xc6, 0xdc, 0x7b, 0xcc, 0x00, 0xb0, 0x71, 0x0e, 0x4d, 0x06, 0x66,
58  0x73, 0x8e, 0x8f, 0x01, 0x18, 0xc4, 0x39, 0x4b, 0x02, 0x23, 0x0c, 0x04,
59  0x1e, 0x03, 0x0c, 0x08, 0xc7, 0xef, 0x08, 0x30, 0x06, 0x07, 0x1c, 0x02,
60  0x06, 0x30, 0x18, 0xae, 0xc8, 0x98, 0x3f, 0x78, 0x20, 0x06, 0x02, 0x20,
61  0x60, 0xa0, 0xc4, 0x1d, 0xc0, 0xff, 0x41, 0x04, 0xfa, 0x63, 0x80, 0xa1,
62  0xa4, 0x3d, 0x00, 0x84, 0xbf, 0x04, 0x0f, 0x06, 0xfc, 0xa1, 0x34, 0x6b,
63  0x01, 0x1c, 0xc9, 0x05, 0x06, 0xc7, 0x06, 0xbe, 0x11, 0x1e, 0x43, 0x30,
64  0x91, 0x05, 0xc3, 0x61, 0x02, 0x30, 0x1b, 0x30, 0xcc, 0x20, 0x11, 0x00,
65  0xc1, 0x3c, 0x03, 0x20, 0x0a, 0x00, 0xe8, 0x60, 0x21, 0x00, 0x61, 0x1b,
66  0xc1, 0x63, 0x08, 0xf0, 0xc6, 0xc7, 0x21, 0x03, 0xf8, 0x08, 0xe1, 0xcf,
67  0x0a, 0xfc, 0x4d, 0x99, 0x43, 0x07, 0x3c, 0x0c, 0xf1, 0x9f, 0x0b, 0xfc,
68  0x5b, 0x81, 0x47, 0x02, 0x16, 0x04, 0x31, 0x1c, 0x0b, 0x1f, 0x17, 0x89,
69  0x4d, 0x06, 0x1a, 0x04, 0x31, 0x38, 0x02, 0x07, 0x56, 0x89, 0x49, 0x04,
70  0x0b, 0x04, 0xb1, 0x72, 0x82, 0xa1, 0x54, 0x9a, 0x49, 0x04, 0x1d, 0x66,
71  0x50, 0xe7, 0xc2, 0xf0, 0x54, 0x9a, 0x58, 0x04, 0x0d, 0x62, 0xc1, 0x1f,
72  0x44, 0xfc, 0x51, 0x90, 0x90, 0x04, 0x86, 0x63, 0xe0, 0x74, 0x04, 0xef,
73  0x31, 0x1a, 0x91, 0x00, 0x02, 0xe2, 0xc1, 0xfd, 0x84, 0xf9, 0x30, 0x0a,
74  0x91, 0x00, 0x82, 0xa9, 0xc0, 0xb9, 0x84, 0xf9, 0x31, 0x16, 0x81, 0x00,
75  0x42, 0xa9, 0xdb, 0x7f, 0x0c, 0xff, 0x1c, 0x16, 0x11, 0x00, 0x02, 0x28,
76  0x0b, 0x07, 0x08, 0x60, 0x1c, 0x02, 0x91, 0x00, 0x46, 0x29, 0x0e, 0x00,
77  0x00, 0x00, 0x10, 0x16, 0x11, 0x02, 0x06, 0x29, 0x04, 0x00, 0x00, 0x00,
78  0x10, 0x16, 0x91, 0x06, 0xa6, 0x2a, 0x04, 0x00, 0x00, 0x00, 0x18, 0x24,
79  0x91, 0x04, 0x86, 0x2a, 0x04, 0x00, 0x00, 0x00, 0x18, 0x27, 0x93, 0x04,
80  0x96, 0x4a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x02, 0x91, 0x04, 0x86, 0x4a,
81  0x0c, 0x00, 0x00, 0x00, 0x1e, 0x23, 0x93, 0x04, 0x56, 0x88, 0x08, 0x00,
82  0x00, 0x00, 0x90, 0x21, 0x93, 0x04, 0x52, 0x0a, 0x09, 0x80, 0x01, 0x00,
83  0xd0, 0x21, 0x95, 0x04, 0x57, 0x0a, 0x0f, 0x80, 0x27, 0x00, 0xd8, 0x20,
84  0x9d, 0x04, 0x5d, 0x08, 0x1c, 0x80, 0x67, 0x00, 0xe4, 0x01, 0x85, 0x04,
85  0x79, 0x8a, 0x3f, 0x00, 0x00, 0x00, 0xf4, 0x11, 0x85, 0x06, 0x39, 0x08,
86  0x7d, 0x00, 0x00, 0x18, 0xb7, 0x10, 0x81, 0x03, 0x29, 0x12, 0xcb, 0x00,
87  0x7e, 0x30, 0x28, 0x00, 0x85, 0x03, 0x29, 0x10, 0xbe, 0x81, 0xff, 0x27,
88  0x0c, 0x10, 0x85, 0x03, 0x29, 0x32, 0xfa, 0xc1, 0xff, 0x27, 0x94, 0x11,
89  0x85, 0x03, 0x28, 0x20, 0x6c, 0xe1, 0xff, 0x07, 0x0c, 0x01, 0x85, 0x01,
90  0x28, 0x62, 0x5c, 0xe3, 0x8f, 0x03, 0x4e, 0x91, 0x80, 0x05, 0x39, 0x40,
91  0xf4, 0xc2, 0xff, 0x00, 0x9f, 0x91, 0x84, 0x05, 0x31, 0xc6, 0xe8, 0x07,
92  0x7f, 0x80, 0xcd, 0x00, 0xc4, 0x04, 0x31, 0x06, 0xc9, 0x0e, 0x00, 0xc0,
93  0x48, 0x88, 0xe0, 0x04, 0x79, 0x04, 0xdb, 0x12, 0x00, 0x30, 0x0c, 0xc8,
94  0xe4, 0x04, 0x6d, 0x06, 0xb6, 0x23, 0x00, 0x18, 0x1c, 0xc0, 0x84, 0x04,
95  0x25, 0x0c, 0xff, 0xc2, 0x00, 0x4e, 0x06, 0xb0, 0x80, 0x04, 0x3f, 0x8a,
96  0xb3, 0x83, 0xff, 0xc3, 0x03, 0x91, 0x84, 0x04, 0x2e, 0xd8, 0x0f, 0x3f,
97  0x00, 0x00, 0x5f, 0x83, 0x84, 0x04, 0x2a, 0x70, 0xfd, 0x7f, 0x00, 0x00,
98  0xc8, 0xc0, 0x84, 0x04, 0x4b, 0xe2, 0x2f, 0x01, 0x00, 0x08, 0x58, 0x60,
99  0x80, 0x04, 0x5b, 0x82, 0xff, 0x01, 0x00, 0x08, 0xd0, 0xa0, 0x84, 0x04,
100  0x72, 0x80, 0xe5, 0x00, 0x00, 0x08, 0xd2, 0x20, 0x44, 0x04, 0xca, 0x02,
101  0xff, 0x00, 0x00, 0x08, 0xde, 0xa0, 0x44, 0x04, 0x82, 0x02, 0x6d, 0x00,
102  0x00, 0x08, 0xf6, 0xb0, 0x40, 0x02, 0x82, 0x07, 0x3f, 0x00, 0x00, 0x08,
103  0x44, 0x58, 0x44, 0x02, 0x93, 0x3f, 0x1f, 0x00, 0x00, 0x30, 0x88, 0x4f,
104  0x44, 0x03, 0x83, 0x23, 0x3e, 0x00, 0x00, 0x00, 0x18, 0x60, 0xe0, 0x07,
105  0xe3, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x70, 0x70, 0xe4, 0x07, 0xc7, 0x1b,
106  0xfe, 0x01, 0x00, 0x00, 0xe0, 0x3c, 0xe4, 0x07, 0xc7, 0xe3, 0xfe, 0x1f,
107  0x00, 0x00, 0xff, 0x1f, 0xfc, 0x07, 0xc7, 0x03, 0xf8, 0x33, 0x00, 0xc0,
108  0xf0, 0x07, 0xff, 0x07, 0x87, 0x02, 0xfc, 0x43, 0x00, 0x60, 0xf0, 0xff,
109  0xff, 0x07, 0x8f, 0x06, 0xbe, 0x87, 0x00, 0x30, 0xf8, 0xff, 0xff, 0x07,
110  0x8f, 0x14, 0x9c, 0x8f, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x07, 0x9f, 0x8d,
111  0x8a, 0x0f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x07, 0xbf, 0x0b, 0x80, 0x1f,
112  0x00, 0x00, 0xff, 0xff, 0xff, 0x07, 0x7f, 0x3a, 0x80, 0x3f, 0x00, 0x80,
113  0xff, 0xff, 0xff, 0x07, 0xff, 0x20, 0xc0, 0x3f, 0x00, 0x80, 0xff, 0xff,
114  0xff, 0x07, 0xff, 0x01, 0xe0, 0x7f, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x07,
115  0xff, 0x0f, 0xf8, 0xff, 0x40, 0xe0, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff,
116  0xff, 0xff, 0x40, 0xf0, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff,
117  0x41, 0xf0, 0xff, 0xff, 0xff, 0x07};
118
119class MyWidget: public Fl_Box{
120protected:
121  void draw(){
122    Fl_Box::draw();
123    fl_color(FL_RED);
124    fl_rectf(x()+5,y()+5,w()-10,h()-10);
125    fl_push_clip(x()+6,y()+6,w()-12,h()-12);
126    fl_color(FL_DARK_GREEN);
127    fl_rectf(x()+5,y()+5,w()-10,h()-10);
128    fl_pop_clip();
129    fl_color(FL_YELLOW);
130    fl_rectf(x()+7,y()+7,w()-14,h()-14);
131    fl_color(FL_BLUE);
132   
133    fl_rect(x()+8,y()+8,w()-16,h()-16);
134    fl_push_clip(x()+25,y()+25,w()-50, h()-50);
135    fl_color(FL_BLACK);
136    fl_rect(x()+24,y()+24,w()-48,h()-48);
137    fl_line(x()+27,y()+27,x()+w()-27,y()+h()-27);
138    fl_line(x()+27,y()+h()-27,x()+w()-27,y()+27);
139    //fl_rect(x()+30,y()+30,w()-60,h()-60);
140    fl_pop_clip();
141   
142  }
143public:
144  MyWidget(int x, int y):Fl_Box(x,y,100,100, "Clipping and rect(f):\nYellow rect.framed\nby B-Y-G-R rect. 1 p.\nthick. Your printer may \nrender very thin lines\nsurrounding \"X\""){
145    align(FL_ALIGN_TOP);
146    labelsize(10);
147  };
148};
149
150
151class MyWidget2: public Fl_Box{
152protected:
153  void draw(){
154    Fl_Box::draw();
155    int d;
156    //    fl_line_style(0);
157    for(d=y()+5;d<48+y();d+=2){
158      fl_xyline(x()+5,d,x()+48);
159    }
160   
161    fl_push_clip(x()+52,y()+5,45,43);
162    for(d=y()+5;d<150+y();d+=3){
163      fl_line(x()+52,d,x()+92,d-40);
164    }
165    fl_pop_clip();
166   
167    fl_line_style(FL_DASH);
168    fl_xyline(x()+5,y()+55,x()+48);
169    fl_line_style(FL_DOT);
170    fl_xyline(x()+5,y()+58,x()+48);
171    fl_line_style(FL_DASHDOT);
172    fl_xyline(x()+5,y()+61,x()+48);
173    fl_line_style(FL_DASHDOTDOT);
174    fl_xyline(x()+5,y()+64,x()+48);
175    fl_line_style(0,0,(char*)"\7\3\7\2");
176    fl_xyline(x()+5,y()+67,x()+48);
177   
178    fl_line_style(0);
179   
180    fl_line(x()+5,y()+72,x()+25,y()+95);
181    fl_line(x()+8,y()+72,x()+28,y()+95,x()+31,y()+72);
182   
183    fl_color(FL_YELLOW);
184    fl_polygon(x()+11, y()+72,x()+27,y()+91,x()+29,y()+72);
185    fl_color(FL_RED);
186    fl_loop(x()+11, y()+72,x()+27,y()+91,x()+29,y()+72);
187   
188    fl_color(FL_BLUE); ////
189    fl_line_style(FL_SOLID, 6);
190    fl_loop(x()+31, y()+12,x()+47,y()+31,x()+49,y()+12);
191    fl_line_style(0);
192   
193    fl_color(200,0,200);
194    fl_polygon(x()+35,y()+72,x()+33,y()+95,x()+48,y()+95,x()+43,y()+72);
195    fl_color(FL_GREEN);
196    fl_loop(x()+35,y()+72,x()+33,y()+95,x()+48,y()+95,x()+43,y()+72);
197   
198    fl_color(FL_BLUE);   
199    fl_yxline(x()+65,y()+63,y()+66);
200    fl_color(FL_GREEN);   
201    fl_yxline(x()+66,y()+66,y()+63);
202   
203    fl_color(FL_BLUE);
204    fl_rect(x()+80,y()+55,5,5);
205    fl_color(FL_YELLOW);
206    fl_rectf(x()+81,y()+56,3,3);
207    fl_color(FL_BLACK);
208    fl_point(x()+82,y()+57);
209   
210    fl_color(FL_BLUE);
211    fl_rect(x()+56, y()+79, 24, 17);
212    fl_color(FL_CYAN);
213    fl_rectf(x()+57, y()+80, 22 , 15 );
214    fl_color(FL_RED);
215    fl_arc(x()+57, y()+80, 22 ,15 ,40, 270);
216    fl_color(FL_YELLOW);
217    fl_pie(x()+58, y()+81, 20 ,13 ,40, 270);
218   
219    fl_line_style(0);
220   
221    fl_color(FL_BLACK);
222    fl_point(x()+58,y()+58);
223    fl_color(FL_RED);
224    fl_yxline(x()+59,y()+58,y()+59);
225    fl_color(FL_GREEN);
226    fl_yxline(x()+60,y()+59,y()+58);
227    fl_color(FL_BLACK);
228    fl_xyline(x()+61,y()+58,x()+62);
229    fl_color(FL_RED);
230    fl_xyline(x()+62,y()+59,x()+61);
231   
232    fl_color(FL_GREEN);
233    fl_yxline(x()+57,y()+58,y()+59,x()+58);
234    fl_color(FL_BLUE);
235    fl_xyline(x()+58,y()+60,x()+56,y()+58);
236    fl_color(FL_RED);
237    fl_xyline(x()+58,y()+61,x()+56,y()+63);
238    fl_color(FL_GREEN);
239    fl_yxline(x()+57,y()+63,y()+62,x()+58);
240   
241    fl_color(FL_BLUE);
242    fl_line(x()+58,y()+63, x()+60, y()+65);
243    fl_color(FL_BLACK);
244    fl_line(x()+61,y()+65, x()+59, y()+63);
245   
246    fl_color(FL_BLACK);
247  };
248 
249public:
250  MyWidget2(int x, int y):Fl_Box(x,y,100,100, "Integer primitives"){
251    labelsize(10);
252    align(FL_ALIGN_TOP);
253  };
254};
255
256
257class MyWidget3: public Fl_Box{
258protected:
259  void draw(){
260    Fl_Box::draw();
261    double d;
262    //    fl_line_style(0);
263    fl_push_clip(x()+5,y()+5,45,43);
264    for(d=y()+5;d<95+y();d+=1.63){
265      fl_begin_line();
266      fl_vertex(x()+5,d);
267      fl_vertex(x()+48,d);
268      fl_end_line();
269    }
270    fl_pop_clip();
271   
272    fl_push_clip(x()+52,y()+5,45,43);
273    for(d=y()+5;d<150+y();d+=2.3052){
274      fl_begin_line();
275      fl_vertex(x()+52,d);
276      fl_vertex(x()+92,d-43);
277      fl_end_line();
278    }
279    fl_pop_clip();
280   
281  };
282public:
283  MyWidget3(int x, int y):Fl_Box(x,y,100,100, "Sub-pixel drawing of\nlines 1.63 points apart\nOn the screen you\ncan see aliasing, the\nprinter should render\nthem properly"){
284    labelsize(10);
285    align(FL_ALIGN_TOP);
286  };
287};
288
289
290
291class MyWidget4: public Fl_Box{
292protected:
293  void draw(){
294    Fl_Box::draw();
295    fl_push_matrix();
296    fl_translate(x(),y());
297    fl_scale(.75,.75);
298   
299    fl_line_style(FL_SOLID , 5);
300    fl_begin_line();
301    fl_vertex(10, 160);
302    fl_vertex(40, 160);
303    fl_vertex(40, 190);
304    fl_end_line();
305    fl_line_style(0);
306
307    fl_color(FL_RED);
308    fl_line_style(FL_SOLID | FL_CAP_FLAT |FL_JOIN_MITER , 5);
309    fl_begin_line();
310    fl_vertex(10, 150);
311    fl_vertex(50, 150);
312    fl_vertex(50, 190);
313    fl_end_line();
314    fl_line_style(0);
315   
316    fl_color(FL_GREEN);   
317    fl_line_style(FL_SOLID | FL_CAP_ROUND |FL_JOIN_ROUND , 5);
318    fl_begin_line();
319    fl_vertex(10, 140);
320    fl_vertex(60, 140);
321    fl_vertex(60, 190);
322    fl_end_line();
323    fl_line_style(0);
324   
325    fl_color(FL_BLUE);
326    fl_line_style(FL_SOLID | FL_CAP_SQUARE |FL_JOIN_BEVEL , 5);
327    fl_begin_line();
328    fl_vertex(10, 130);
329    fl_vertex(70, 130);
330    fl_vertex(70, 190);
331    fl_end_line();
332    fl_line_style(0);
333   
334    fl_color(FL_BLACK);
335    fl_line_style(FL_DASH , 5);
336    fl_begin_line();
337    fl_vertex(10, 120);
338    fl_vertex(80, 120);
339    fl_vertex(80, 190);
340    fl_end_line();
341    fl_line_style(0);
342   
343    fl_color(FL_RED);
344    fl_line_style(FL_DASH |FL_CAP_FLAT , 5);
345    fl_begin_line();
346    fl_vertex(10, 110);
347    fl_vertex(90, 110);
348    fl_vertex(90, 190);
349    fl_end_line();
350    fl_line_style(0);
351   
352    fl_color(FL_GREEN);
353    fl_line_style(FL_DASH |FL_CAP_ROUND , 5);
354    fl_begin_line();
355    fl_vertex(10, 100);
356    fl_vertex(100, 100);
357    fl_vertex(100, 190);
358    fl_end_line();
359    fl_line_style(0);
360   
361   
362    fl_color(FL_BLUE);
363    fl_line_style(FL_DASH |FL_CAP_SQUARE , 5);
364    fl_begin_line();
365    fl_vertex(10, 90);
366    fl_vertex(110, 90);
367    fl_vertex(110, 190);
368    fl_end_line();
369    fl_line_style(0);
370   
371    fl_color(FL_BLACK);
372    fl_line_style(FL_DOT, 5);
373    fl_begin_line();
374    fl_vertex(10, 80);
375    fl_vertex(120, 80);
376    fl_vertex(120, 190);
377    fl_end_line();
378    fl_line_style(0);
379   
380    fl_color(FL_RED);
381    fl_line_style(FL_DOT | FL_CAP_FLAT, 5);
382    fl_begin_line();
383    fl_vertex(10, 70);
384    fl_vertex(130, 70);
385    fl_vertex(130, 190);
386    fl_end_line();
387    fl_line_style(0);
388   
389    fl_color(FL_GREEN);
390    fl_line_style(FL_DOT | FL_CAP_ROUND, 5);
391    fl_begin_line();
392    fl_vertex(10, 60);
393    fl_vertex(140, 60);
394    fl_vertex(140, 190);
395    fl_end_line();
396    fl_line_style(0);
397   
398    fl_color(FL_BLUE);
399    fl_line_style(FL_DOT | FL_CAP_SQUARE, 5);
400    fl_begin_line();
401    fl_vertex(10, 50);
402    fl_vertex(150, 50);
403    fl_vertex(150, 190);
404    fl_end_line();
405    fl_line_style(0);
406   
407    fl_color(FL_BLACK);
408    fl_line_style(FL_DASHDOT |FL_CAP_ROUND |FL_JOIN_ROUND , 5);
409    fl_begin_line();
410    fl_vertex(10, 40);
411    fl_vertex(160, 40);
412    fl_vertex(160, 190);
413    fl_end_line();
414    fl_line_style(0);
415   
416    fl_color(FL_RED);
417    fl_line_style(FL_DASHDOTDOT |FL_CAP_SQUARE |FL_JOIN_BEVEL , 5);
418    fl_begin_line();
419    fl_vertex(10, 30);
420    fl_vertex(170, 30);
421    fl_vertex(170, 190);
422    fl_end_line();
423    fl_line_style(0);
424   
425   
426    fl_color(FL_GREEN);
427    fl_line_style(FL_DASHDOTDOT |FL_CAP_ROUND |FL_JOIN_ROUND , 5);
428    fl_begin_line();
429    fl_vertex(10, 20);
430    fl_vertex(180, 20);
431    fl_vertex(180, 190);
432    fl_end_line();
433    fl_line_style(0);
434   
435    fl_color(FL_BLUE);
436    fl_line_style(0, 5, (char*)"\12\3\4\2\2\1");
437    fl_begin_line();
438    fl_vertex(10, 10);
439    fl_vertex(190, 10);
440    fl_vertex(190, 190);
441   
442    fl_end_line();
443    fl_line_style(0);
444    fl_pop_matrix();   
445   
446    fl_color(FL_BLACK);
447  };
448public:
449  MyWidget4(int x, int y):Fl_Box(x,y,150,150, "Line styles"){
450    labelsize(10);
451    align(FL_ALIGN_TOP);
452  };
453};
454
455
456class MyWidget5: public Fl_Box{
457protected:
458  void draw(){
459    Fl_Box::draw();
460    //fl_push_clip(x(),y(),w(),h());
461    fl_push_matrix();
462   
463    fl_translate(x(),y());
464    fl_push_matrix();
465    fl_mult_matrix(1,3,0,1,0,-20);
466    fl_color(FL_GREEN);
467    fl_begin_polygon();
468    fl_vertex(10,10);
469    fl_vertex(100,-80);
470    fl_vertex(100,-190);
471    fl_end_polygon();
472   
473    fl_color(FL_RED);
474    fl_line_style(FL_DASHDOT, 7);
475    fl_begin_loop();
476   
477    fl_vertex(10,10);
478    fl_vertex(100,-80);
479    fl_vertex(100,-190);
480    fl_end_loop();
481    fl_line_style(0);
482   
483    fl_color(FL_BLUE);
484    fl_line_style(FL_SOLID, 3);
485    fl_begin_loop();
486    fl_circle(60,-50,30);
487    fl_end_loop();
488    fl_line_style(0);
489   
490    fl_pop_matrix();
491    fl_scale(1.8,1);
492   
493    fl_color(FL_YELLOW);
494    fl_begin_polygon();
495    fl_arc(30,90,20,-45,200);
496    fl_end_polygon();
497   
498    fl_color(FL_BLACK);
499    fl_line_style(FL_DASH, 3);
500    fl_begin_line();
501    fl_arc(30,90,20,-45,200);
502    fl_end_line();
503    fl_line_style(0);
504   
505    fl_translate(15,0);
506    fl_scale(1.5,3);
507    fl_begin_complex_polygon();
508    fl_vertex(30,70);
509    fl_arc(45,55,10,200,90);
510    fl_arc(55,45,8,-170,20);
511    fl_vertex(60,40);
512    fl_vertex(30,20);
513    fl_vertex(40,5);
514    fl_vertex(60,25);
515    //fl_vertex(50,50);
516    fl_curve(35,30,30,53,0,35,65,65);
517    fl_gap();
518    fl_vertex(50,25);
519    fl_vertex(40,10);
520    fl_vertex(35,20);
521    fl_end_complex_polygon();
522   
523    fl_pop_matrix();
524   
525    //    fl_color(FL_BLACK);
526    //    fl_line_style(0);
527    //fl_pop_clip();
528   
529  };
530public:
531  MyWidget5(int x, int y):Fl_Box(x,y,230,250, "Complex (double) drawings:\nBlue ellipse may not be\ncorrectly transformed\ndue to non-orthogonal\ntransformation"){
532    labelsize(10);
533    align(FL_ALIGN_TOP);
534  };
535};
536
537
538uchar *image;
539int width = 80;
540int height = 80;
541
542void make_image() {
543  image = new uchar[4*width*height];
544  uchar *p = image;
545  for (int y = 0; y < height; y++) {
546    double Y = double(y)/(height-1);
547    for (int x = 0; x < width; x++) {
548      double X = double(x)/(width-1);
549      *p++ = uchar(255*((1-X)*(1-Y))); // red in upper-left
550      *p++ = uchar(255*((1-X)*Y));      // green in lower-left
551      *p++ = uchar(255*(X*Y));  // blue in lower-right
552      X -= 0.5;
553      Y -= 0.5;
554      int alpha = (int)(350 * sqrt(X * X + Y * Y));
555      if (alpha < 255) *p++ = uchar(alpha);     // alpha transparency
556      else *p++ = 255;
557      Y += 0.5;
558    }
559  }
560}
561
562
563void print(Fl_Widget *, void *w) {
564  Fl_Widget * g = (Fl_Widget *)w;
565 
566  Fl_Printer * p = new Fl_Printer();
567  if (!p->start_job(1)) {
568    p->start_page();
569    p->print_window(g->window());
570    p->end_page();
571    p->end_job();
572  }
573  delete p;
574}
575
576/*void print2(Fl_Widget *, void *w) {
577 Fl_Widget * g = (Fl_Widget *)w;
578 Fl_Printer * p = fl_printer_chooser();
579 if(!p) return;
580 p->page(Fl_Printer::A4);
581 // fitting inside margins 1 inch wide
582 p->place(g, FL_INCH, FL_INCH, p->page_width() - 2 * FL_INCH, p->page_height() - 2 * FL_INCH,  FL_ALIGN_CENTER);
583 Fl_Device * c = p->set_current();
584 fl_draw(g);
585 c->set_current();
586 delete p;
587 };*/
588
589
590class My_Button:public Fl_Button{
591protected:
592  void draw(){
593    // Fl_Button::draw();
594    if (type() == FL_HIDDEN_BUTTON) return;
595    Fl_Color col = value() ? selection_color() : color();
596    draw_box(value() ? (down_box()?down_box():fl_down(box())) : box(), col);
597    fl_color(FL_WHITE);
598    fl_line_style(FL_SOLID,5);
599    fl_line(x()+15,y()+10,x()+w()-15,y()+h()-23);
600    fl_line(x()+w()-15,y()+10,x()+15,y()+h()-23);
601    fl_line_style(0);
602    draw_label();
603   
604  };
605public:
606  My_Button(int x, int y, int w, int h, const char * label = 0):Fl_Button(x,y,w,h,label){}
607};
608
609
610int main(int argc, char ** argv) {
611 
612  //Fl::scheme("plastic");
613 
614 
615 
616  Fl_Window * w2 = new Fl_Window(500,560,"Graphics test");
617 
618 
619  Fl_Group *c2 =new Fl_Group(3, 43, 494, 514 );
620 
621  new MyWidget(10,140);
622  new MyWidget2(110,80);
623  new MyWidget3(220,140);
624  new MyWidget4(330,70);
625  new MyWidget5(140,270);
626 
627  make_image();
628  Fl_RGB_Image *rgb = new Fl_RGB_Image(image, width, height, 4);
629  My_Button b_rgb(10,245,100,100,"RGB with alpha");
630  b_rgb.image(rgb);
631 
632  My_Button b_pixmap(10,345,100,100,"Pixmap");
633  Fl_Pixmap *pixmap = new Fl_Pixmap(porsche_xpm);
634  b_pixmap.image(pixmap);
635 
636  My_Button b_bitmap(10,445,100,100,"Bitmap");
637  b_bitmap.labelcolor(FL_GREEN);
638  b_bitmap.image(new Fl_Bitmap(sorceress_bits,sorceress_width,sorceress_height));
639 
640  new Fl_Clock(360,230,120,120);
641  Fl_Return_Button * ret = new Fl_Return_Button (360, 360, 120,30, "Return");
642  ret->deactivate();
643  Fl_Button but1(360, 390, 30, 30, "@->|");
644  but1.labelcolor(FL_DARK3);
645  Fl_Button but2(390, 390, 30, 30, "@UpArrow");
646  but2.labelcolor(FL_DARK3);
647  Fl_Button but3(420, 390, 30, 30, "@DnArrow");
648  but3.labelcolor(FL_DARK3);
649  Fl_Button but4(450, 390, 30, 30, "@+");
650  but4.labelcolor(FL_DARK3);
651  Fl_Button but5(360, 425, 120, 30, "Hello, World");
652  but5.labelfont(FL_BOLD|FL_ITALIC);
653  but5.labeltype(FL_SHADOW_LABEL);
654  but5.box(FL_ROUND_UP_BOX);
655  //  but5.selection_color(FL_WHITE);
656 
657  Fl_Button but6(360, 460, 120, 30, "Plastic");
658  but6.box(FL_PLASTIC_UP_BOX);
659 
660  //Fl_Button but7(, 480, 120, 30, "Engraved box");
661  //but7.box(FL_ENGRAVED_BOX);
662  { Fl_Group* o = new Fl_Group(360, 495, 120, 40);
663    o->box(FL_UP_BOX);
664    { Fl_Group* o = new Fl_Group(365, 500, 110, 30);
665      o->box(FL_THIN_UP_FRAME);
666      { Fl_Round_Button* o = new Fl_Round_Button(365, 500, 40, 30, "rad");
667        o->value(1);
668      }
669      { Fl_Check_Button* o = new Fl_Check_Button(410, 500, 60, 30, "check");
670        o->value(1);
671       
672      }
673      o->end();
674    }
675    o->end();
676    o->deactivate();
677  }
678  Fl_Box tx(120,492,230,50,"Background is not printed because\nencapsulating group, which we are\n printing, has not set the box type");
679  tx.box(FL_SHADOW_BOX);
680  tx.labelsize(12);
681 
682  tx.hide();
683 
684  c2->end();
685  Fl_Button *b4 = new Fl_Button(10,5, 150, 25, "Print");
686  b4->callback(print,c2);
687  /*Fl_Button *b5 = new Fl_Button(165,5, 90, 25, "Print");
688   b5->tooltip("This is a tooltip");
689   b5->callback(print2,c2);*/
690 
691  w2->end();
692  w2->show(argc, argv);
693 
694 
695  Fl::run();
696  return 0;
697}
698
699//
700// End of "$Id: device.cxx 8815 2011-06-16 15:11:18Z matt $"
701//
Note: See TracBrowser for help on using the repository browser.