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