packages feed

fltkhs-0.1.0.0: c-examples/device.c

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <Fl_C.h>
#include <Fl_Overlay_WindowC.h>
#include <Fl_WindowC.h>
#include <Fl_GroupC.h>

#include <Fl_Light_ButtonC.h>
#include <Fl_ButtonC.h>
#include <Fl_DrawC.h>
#include <Fl_ClockC.h>
#include "pixmaps/porsche.xpm"
#include <Fl_PixmapC.h>
#include <Fl_BitmapC.h>
#include <Fl_RGB_ImageC.h>
#include <Fl_Round_ButtonC.h>
#include <Fl_Return_ButtonC.h>
#include <Fl_Check_ButtonC.h>
#include <Fl_ButtonC.h>
#include <Fl_BoxC.h>
#include <Fl_PrinterC.h>
#include <Fl_WidgetC.h>

#define sorceress_width 75
#define sorceress_height 75
uchar sorceress_bits[] = {
  0xfc, 0x7e, 0x40, 0x20, 0x90, 0x00, 0x07, 0x80, 0x23, 0x00, 0x00, 0xc6,
  0xc1, 0x41, 0x98, 0xb8, 0x01, 0x07, 0x66, 0x00, 0x15, 0x9f, 0x03, 0x47,
  0x8c, 0xc6, 0xdc, 0x7b, 0xcc, 0x00, 0xb0, 0x71, 0x0e, 0x4d, 0x06, 0x66,
  0x73, 0x8e, 0x8f, 0x01, 0x18, 0xc4, 0x39, 0x4b, 0x02, 0x23, 0x0c, 0x04,
  0x1e, 0x03, 0x0c, 0x08, 0xc7, 0xef, 0x08, 0x30, 0x06, 0x07, 0x1c, 0x02,
  0x06, 0x30, 0x18, 0xae, 0xc8, 0x98, 0x3f, 0x78, 0x20, 0x06, 0x02, 0x20,
  0x60, 0xa0, 0xc4, 0x1d, 0xc0, 0xff, 0x41, 0x04, 0xfa, 0x63, 0x80, 0xa1,
  0xa4, 0x3d, 0x00, 0x84, 0xbf, 0x04, 0x0f, 0x06, 0xfc, 0xa1, 0x34, 0x6b,
  0x01, 0x1c, 0xc9, 0x05, 0x06, 0xc7, 0x06, 0xbe, 0x11, 0x1e, 0x43, 0x30,
  0x91, 0x05, 0xc3, 0x61, 0x02, 0x30, 0x1b, 0x30, 0xcc, 0x20, 0x11, 0x00,
  0xc1, 0x3c, 0x03, 0x20, 0x0a, 0x00, 0xe8, 0x60, 0x21, 0x00, 0x61, 0x1b,
  0xc1, 0x63, 0x08, 0xf0, 0xc6, 0xc7, 0x21, 0x03, 0xf8, 0x08, 0xe1, 0xcf,
  0x0a, 0xfc, 0x4d, 0x99, 0x43, 0x07, 0x3c, 0x0c, 0xf1, 0x9f, 0x0b, 0xfc,
  0x5b, 0x81, 0x47, 0x02, 0x16, 0x04, 0x31, 0x1c, 0x0b, 0x1f, 0x17, 0x89,
  0x4d, 0x06, 0x1a, 0x04, 0x31, 0x38, 0x02, 0x07, 0x56, 0x89, 0x49, 0x04,
  0x0b, 0x04, 0xb1, 0x72, 0x82, 0xa1, 0x54, 0x9a, 0x49, 0x04, 0x1d, 0x66,
  0x50, 0xe7, 0xc2, 0xf0, 0x54, 0x9a, 0x58, 0x04, 0x0d, 0x62, 0xc1, 0x1f,
  0x44, 0xfc, 0x51, 0x90, 0x90, 0x04, 0x86, 0x63, 0xe0, 0x74, 0x04, 0xef,
  0x31, 0x1a, 0x91, 0x00, 0x02, 0xe2, 0xc1, 0xfd, 0x84, 0xf9, 0x30, 0x0a,
  0x91, 0x00, 0x82, 0xa9, 0xc0, 0xb9, 0x84, 0xf9, 0x31, 0x16, 0x81, 0x00,
  0x42, 0xa9, 0xdb, 0x7f, 0x0c, 0xff, 0x1c, 0x16, 0x11, 0x00, 0x02, 0x28,
  0x0b, 0x07, 0x08, 0x60, 0x1c, 0x02, 0x91, 0x00, 0x46, 0x29, 0x0e, 0x00,
  0x00, 0x00, 0x10, 0x16, 0x11, 0x02, 0x06, 0x29, 0x04, 0x00, 0x00, 0x00,
  0x10, 0x16, 0x91, 0x06, 0xa6, 0x2a, 0x04, 0x00, 0x00, 0x00, 0x18, 0x24,
  0x91, 0x04, 0x86, 0x2a, 0x04, 0x00, 0x00, 0x00, 0x18, 0x27, 0x93, 0x04,
  0x96, 0x4a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x02, 0x91, 0x04, 0x86, 0x4a,
  0x0c, 0x00, 0x00, 0x00, 0x1e, 0x23, 0x93, 0x04, 0x56, 0x88, 0x08, 0x00,
  0x00, 0x00, 0x90, 0x21, 0x93, 0x04, 0x52, 0x0a, 0x09, 0x80, 0x01, 0x00,
  0xd0, 0x21, 0x95, 0x04, 0x57, 0x0a, 0x0f, 0x80, 0x27, 0x00, 0xd8, 0x20,
  0x9d, 0x04, 0x5d, 0x08, 0x1c, 0x80, 0x67, 0x00, 0xe4, 0x01, 0x85, 0x04,
  0x79, 0x8a, 0x3f, 0x00, 0x00, 0x00, 0xf4, 0x11, 0x85, 0x06, 0x39, 0x08,
  0x7d, 0x00, 0x00, 0x18, 0xb7, 0x10, 0x81, 0x03, 0x29, 0x12, 0xcb, 0x00,
  0x7e, 0x30, 0x28, 0x00, 0x85, 0x03, 0x29, 0x10, 0xbe, 0x81, 0xff, 0x27,
  0x0c, 0x10, 0x85, 0x03, 0x29, 0x32, 0xfa, 0xc1, 0xff, 0x27, 0x94, 0x11,
  0x85, 0x03, 0x28, 0x20, 0x6c, 0xe1, 0xff, 0x07, 0x0c, 0x01, 0x85, 0x01,
  0x28, 0x62, 0x5c, 0xe3, 0x8f, 0x03, 0x4e, 0x91, 0x80, 0x05, 0x39, 0x40,
  0xf4, 0xc2, 0xff, 0x00, 0x9f, 0x91, 0x84, 0x05, 0x31, 0xc6, 0xe8, 0x07,
  0x7f, 0x80, 0xcd, 0x00, 0xc4, 0x04, 0x31, 0x06, 0xc9, 0x0e, 0x00, 0xc0,
  0x48, 0x88, 0xe0, 0x04, 0x79, 0x04, 0xdb, 0x12, 0x00, 0x30, 0x0c, 0xc8,
  0xe4, 0x04, 0x6d, 0x06, 0xb6, 0x23, 0x00, 0x18, 0x1c, 0xc0, 0x84, 0x04,
  0x25, 0x0c, 0xff, 0xc2, 0x00, 0x4e, 0x06, 0xb0, 0x80, 0x04, 0x3f, 0x8a,
  0xb3, 0x83, 0xff, 0xc3, 0x03, 0x91, 0x84, 0x04, 0x2e, 0xd8, 0x0f, 0x3f,
  0x00, 0x00, 0x5f, 0x83, 0x84, 0x04, 0x2a, 0x70, 0xfd, 0x7f, 0x00, 0x00,
  0xc8, 0xc0, 0x84, 0x04, 0x4b, 0xe2, 0x2f, 0x01, 0x00, 0x08, 0x58, 0x60,
  0x80, 0x04, 0x5b, 0x82, 0xff, 0x01, 0x00, 0x08, 0xd0, 0xa0, 0x84, 0x04,
  0x72, 0x80, 0xe5, 0x00, 0x00, 0x08, 0xd2, 0x20, 0x44, 0x04, 0xca, 0x02,
  0xff, 0x00, 0x00, 0x08, 0xde, 0xa0, 0x44, 0x04, 0x82, 0x02, 0x6d, 0x00,
  0x00, 0x08, 0xf6, 0xb0, 0x40, 0x02, 0x82, 0x07, 0x3f, 0x00, 0x00, 0x08,
  0x44, 0x58, 0x44, 0x02, 0x93, 0x3f, 0x1f, 0x00, 0x00, 0x30, 0x88, 0x4f,
  0x44, 0x03, 0x83, 0x23, 0x3e, 0x00, 0x00, 0x00, 0x18, 0x60, 0xe0, 0x07,
  0xe3, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x70, 0x70, 0xe4, 0x07, 0xc7, 0x1b,
  0xfe, 0x01, 0x00, 0x00, 0xe0, 0x3c, 0xe4, 0x07, 0xc7, 0xe3, 0xfe, 0x1f,
  0x00, 0x00, 0xff, 0x1f, 0xfc, 0x07, 0xc7, 0x03, 0xf8, 0x33, 0x00, 0xc0,
  0xf0, 0x07, 0xff, 0x07, 0x87, 0x02, 0xfc, 0x43, 0x00, 0x60, 0xf0, 0xff,
  0xff, 0x07, 0x8f, 0x06, 0xbe, 0x87, 0x00, 0x30, 0xf8, 0xff, 0xff, 0x07,
  0x8f, 0x14, 0x9c, 0x8f, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x07, 0x9f, 0x8d,
  0x8a, 0x0f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x07, 0xbf, 0x0b, 0x80, 0x1f,
  0x00, 0x00, 0xff, 0xff, 0xff, 0x07, 0x7f, 0x3a, 0x80, 0x3f, 0x00, 0x80,
  0xff, 0xff, 0xff, 0x07, 0xff, 0x20, 0xc0, 0x3f, 0x00, 0x80, 0xff, 0xff,
  0xff, 0x07, 0xff, 0x01, 0xe0, 0x7f, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x07,
  0xff, 0x0f, 0xf8, 0xff, 0x40, 0xe0, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff,
  0xff, 0xff, 0x40, 0xf0, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff,
  0x41, 0xf0, 0xff, 0xff, 0xff, 0x07};
void draw_widget(fl_Widget self){
  Fl_Box_draw_super(self);
  flc_set_color(FL_RED);
  flc_rectf(Fl_Box_x(self)+5,Fl_Box_y(self)+5,Fl_Box_w(self)-10,Fl_Box_h(self)-10);
  flc_push_clip(Fl_Box_x(self)+6,Fl_Box_y(self)+6,Fl_Box_w(self)-12,Fl_Box_h(self)-12);
  flc_set_color(FL_DARK_GREEN);
  flc_rectf(Fl_Box_x(self)+5,Fl_Box_y(self)+5,Fl_Box_w(self)-10,Fl_Box_h(self)-10);
  flc_pop_clip();
  flc_set_color(FL_YELLOW);
  flc_rectf(Fl_Box_x(self)+7,Fl_Box_y(self)+7,Fl_Box_w(self)-14,Fl_Box_h(self)-14);
  flc_set_color(FL_BLUE);

  flc_rect(Fl_Box_x(self)+8,Fl_Box_y(self)+8,Fl_Box_w(self)-16,Fl_Box_h(self)-16);
  flc_push_clip(Fl_Box_x(self)+25,Fl_Box_y(self)+25,Fl_Box_w(self)-50, Fl_Box_h(self)-50);
  flc_set_color(FL_BLACK);
  flc_rect(Fl_Box_x(self)+24,Fl_Box_y(self)+24,Fl_Box_w(self)-48,Fl_Box_h(self)-48);
  flc_line(Fl_Box_x(self)+27,Fl_Box_y(self)+27,Fl_Box_x(self)+Fl_Box_w(self)-27,Fl_Box_y(self)+Fl_Box_h(self)-27);
  flc_line(Fl_Box_x(self)+27,Fl_Box_y(self)+Fl_Box_h(self)-27,Fl_Box_x(self)+Fl_Box_w(self)-27,Fl_Box_y(self)+27);
  flc_pop_clip();
}
void draw_widget2(fl_Widget self){
  Fl_Box_draw_super(self);
  int d;
  for(d=Fl_Box_y(self)+5;d<48+Fl_Box_y(self);d+=2){
    flc_xyline(Fl_Box_x(self)+5,d,Fl_Box_x(self)+48);
  }

  flc_push_clip(Fl_Box_x(self)+52,Fl_Box_y(self)+5,45,43);
  for(d=Fl_Box_y(self)+5;d<150+Fl_Box_y(self);d+=3){
    flc_line(Fl_Box_x(self)+52,d,Fl_Box_x(self)+92,d-40);
  }
  flc_pop_clip();

  flc_line_style(FL_DASH);
  flc_xyline(Fl_Box_x(self)+5,Fl_Box_y(self)+55,Fl_Box_x(self)+48);
  flc_line_style(FL_DOT);
  flc_xyline(Fl_Box_x(self)+5,Fl_Box_y(self)+58,Fl_Box_x(self)+48);
  flc_line_style(FL_DASHDOT);
  flc_xyline(Fl_Box_x(self)+5,Fl_Box_y(self)+61,Fl_Box_x(self)+48);
  flc_line_style(FL_DASHDOTDOT);
  flc_xyline(Fl_Box_x(self)+5,Fl_Box_y(self)+64,Fl_Box_x(self)+48);
  flc_line_style_with_width_dashes(0,0,(char*)"\7\3\7\2");
  flc_xyline(Fl_Box_x(self)+5,Fl_Box_y(self)+67,Fl_Box_x(self)+48);

  flc_line_style(0);

  flc_line(Fl_Box_x(self)+5,Fl_Box_y(self)+72,Fl_Box_x(self)+25,Fl_Box_y(self)+95);
  flc_line_with_x2_y2(Fl_Box_x(self)+8,Fl_Box_y(self)+72,Fl_Box_x(self)+28,Fl_Box_y(self)+95,Fl_Box_x(self)+31,Fl_Box_y(self)+72);

  flc_set_color(FL_YELLOW);
  flc_polygon(Fl_Box_x(self)+11, Fl_Box_y(self)+72,Fl_Box_x(self)+27,Fl_Box_y(self)+91,Fl_Box_x(self)+29,Fl_Box_y(self)+72);
  flc_set_color(FL_RED);
  flc_loop(Fl_Box_x(self)+11, Fl_Box_y(self)+72,Fl_Box_x(self)+27,Fl_Box_y(self)+91,Fl_Box_x(self)+29,Fl_Box_y(self)+72);

  flc_set_color(FL_BLUE); ////
  flc_line_style_with_width(FL_SOLID, 6);
  flc_loop(Fl_Box_x(self)+31, Fl_Box_y(self)+12,Fl_Box_x(self)+47,Fl_Box_y(self)+31,Fl_Box_x(self)+49,Fl_Box_y(self)+12);
  flc_line_style(0);

  flc_set_color_with_rgb(200,0,200);
  flc_polygon_with_x3_y3(Fl_Box_x(self)+35,Fl_Box_y(self)+72,Fl_Box_x(self)+33,Fl_Box_y(self)+95,Fl_Box_x(self)+48,Fl_Box_y(self)+95,Fl_Box_x(self)+43,Fl_Box_y(self)+72);
  flc_set_color(FL_GREEN);
  flc_loop_with_x3_y3(Fl_Box_x(self)+35,Fl_Box_y(self)+72,Fl_Box_x(self)+33,Fl_Box_y(self)+95,Fl_Box_x(self)+48,Fl_Box_y(self)+95,Fl_Box_x(self)+43,Fl_Box_y(self)+72);

  flc_set_color(FL_BLUE);
  flc_yxline_with_y1(Fl_Box_x(self)+65,Fl_Box_y(self)+63,Fl_Box_y(self)+66);
  flc_set_color(FL_GREEN);
  flc_yxline_with_y1(Fl_Box_x(self)+66,Fl_Box_y(self)+66,Fl_Box_y(self)+63);

  flc_set_color(FL_BLUE);
  flc_rect(Fl_Box_x(self)+80,Fl_Box_y(self)+55,5,5);
  flc_set_color(FL_YELLOW);
  flc_rectf(Fl_Box_x(self)+81,Fl_Box_y(self)+56,3,3);
  flc_set_color(FL_BLACK);
  flc_point(Fl_Box_x(self)+82,Fl_Box_y(self)+57);

  flc_set_color(FL_BLUE);
  flc_rect(Fl_Box_x(self)+56, Fl_Box_y(self)+79, 24, 17);
  flc_set_color(FL_CYAN);
  flc_rectf(Fl_Box_x(self)+57, Fl_Box_y(self)+80, 22 , 15 );
  flc_set_color(FL_RED);
  flc_arc_by_width_height(Fl_Box_x(self)+57, Fl_Box_y(self)+80, 22 ,15 ,40, 270);
  flc_set_color(FL_YELLOW);
  flc_pie(Fl_Box_x(self)+58, Fl_Box_y(self)+81, 20 ,13 ,40, 270);

  flc_line_style(0);

  flc_set_color(FL_BLACK);
  flc_point(Fl_Box_x(self)+58,Fl_Box_y(self)+58);
  flc_set_color(FL_RED);
  flc_yxline_with_y1(Fl_Box_x(self)+59,Fl_Box_y(self)+58,Fl_Box_y(self)+59);
  flc_set_color(FL_GREEN);
  flc_yxline_with_y1(Fl_Box_x(self)+60,Fl_Box_y(self)+59,Fl_Box_y(self)+58);
  flc_set_color(FL_BLACK);
  flc_xyline(Fl_Box_x(self)+61,Fl_Box_y(self)+58,Fl_Box_x(self)+62);
  flc_set_color(FL_RED);
  flc_xyline(Fl_Box_x(self)+62,Fl_Box_y(self)+59,Fl_Box_x(self)+61);

  flc_set_color(FL_GREEN);
  flc_yxline_with_y2_x2(Fl_Box_x(self)+57,Fl_Box_y(self)+58,Fl_Box_y(self)+59,Fl_Box_x(self)+58);
  flc_set_color(FL_BLUE);
  flc_xyline_with_x2(Fl_Box_x(self)+58,Fl_Box_y(self)+60,Fl_Box_x(self)+56,Fl_Box_y(self)+58);
  flc_set_color(FL_RED);
  flc_xyline_with_x2(Fl_Box_x(self)+58,Fl_Box_y(self)+61,Fl_Box_x(self)+56,Fl_Box_y(self)+63);
  flc_set_color(FL_GREEN);
  flc_yxline_with_y2_x2(Fl_Box_x(self)+57,Fl_Box_y(self)+63,Fl_Box_y(self)+62,Fl_Box_x(self)+58);

  flc_set_color(FL_BLUE);
  flc_line(Fl_Box_x(self)+58,Fl_Box_y(self)+63, Fl_Box_x(self)+60, Fl_Box_y(self)+65);
  flc_set_color(FL_BLACK);
  flc_line(Fl_Box_x(self)+61,Fl_Box_y(self)+65, Fl_Box_x(self)+59, Fl_Box_y(self)+63);

  flc_set_color(FL_BLACK);
};
void draw_widget3(fl_Widget self){
  Fl_Box_draw_super(self);
  double d;
  flc_push_clip(Fl_Box_x(self)+5,Fl_Box_y(self)+5,45,43);
  for(d=Fl_Box_y(self)+5;d<95+Fl_Box_y(self);d+=1.63){
    flc_begin_line();
    flc_vertex(Fl_Box_x(self)+5,d);
    flc_vertex(Fl_Box_x(self)+48,d);
    flc_end_line();
  }
  flc_pop_clip();

  flc_push_clip(Fl_Box_x(self)+52,Fl_Box_y(self)+5,45,43);
  for(d=Fl_Box_y(self)+5;d<150+Fl_Box_y(self);d+=2.3052){
    flc_begin_line();
    flc_vertex(Fl_Box_x(self)+52,d);
    flc_vertex(Fl_Box_x(self)+92,d-43);
    flc_end_line();
  }
  flc_pop_clip();
};
void draw_widget4(fl_Widget self){
  Fl_Box_draw_super(self);
  flc_push_matrix();
  flc_translate(Fl_Box_x(self),Fl_Box_y(self));
  flc_scale_with_y(.75,.75);

  flc_line_style_with_width(FL_SOLID , 5);
  flc_begin_line();
  flc_vertex(10, 160);
  flc_vertex(40, 160);
  flc_vertex(40, 190);
  flc_end_line();
  flc_line_style(0);

  flc_set_color(FL_RED);
  flc_line_style_with_width(FL_SOLID | FL_CAP_FLAT |FL_JOIN_MITER , 5);
  flc_begin_line();
  flc_vertex(10, 150);
  flc_vertex(50, 150);
  flc_vertex(50, 190);
  flc_end_line();
  flc_line_style(0);

  flc_set_color(FL_GREEN);
  flc_line_style_with_width(FL_SOLID | FL_CAP_ROUND |FL_JOIN_ROUND , 5);
  flc_begin_line();
  flc_vertex(10, 140);
  flc_vertex(60, 140);
  flc_vertex(60, 190);
  flc_end_line();
  flc_line_style(0);

  flc_set_color(FL_BLUE);
  flc_line_style_with_width(FL_SOLID | FL_CAP_SQUARE |FL_JOIN_BEVEL , 5);
  flc_begin_line();
  flc_vertex(10, 130);
  flc_vertex(70, 130);
  flc_vertex(70, 190);
  flc_end_line();
  flc_line_style(0);

  flc_set_color(FL_BLACK);
  flc_line_style_with_width(FL_DASH , 5);
  flc_begin_line();
  flc_vertex(10, 120);
  flc_vertex(80, 120);
  flc_vertex(80, 190);
  flc_end_line();
  flc_line_style(0);

  flc_set_color(FL_RED);
  flc_line_style_with_width(FL_DASH |FL_CAP_FLAT , 5);
  flc_begin_line();
  flc_vertex(10, 110);
  flc_vertex(90, 110);
  flc_vertex(90, 190);
  flc_end_line();
  flc_line_style(0);

  flc_set_color(FL_GREEN);
  flc_line_style_with_width(FL_DASH |FL_CAP_ROUND , 5);
  flc_begin_line();
  flc_vertex(10, 100);
  flc_vertex(100, 100);
  flc_vertex(100, 190);
  flc_end_line();
  flc_line_style(0);


  flc_set_color(FL_BLUE);
  flc_line_style_with_width(FL_DASH |FL_CAP_SQUARE , 5);
  flc_begin_line();
  flc_vertex(10, 90);
  flc_vertex(110, 90);
  flc_vertex(110, 190);
  flc_end_line();
  flc_line_style(0);

  flc_set_color(FL_BLACK);
  flc_line_style_with_width(FL_DOT, 5);
  flc_begin_line();
  flc_vertex(10, 80);
  flc_vertex(120, 80);
  flc_vertex(120, 190);
  flc_end_line();
  flc_line_style(0);

  flc_set_color(FL_RED);
  flc_line_style_with_width(FL_DOT | FL_CAP_FLAT, 5);
  flc_begin_line();
  flc_vertex(10, 70);
  flc_vertex(130, 70);
  flc_vertex(130, 190);
  flc_end_line();
  flc_line_style(0);

  flc_set_color(FL_GREEN);
  flc_line_style_with_width(FL_DOT | FL_CAP_ROUND, 5);
  flc_begin_line();
  flc_vertex(10, 60);
  flc_vertex(140, 60);
  flc_vertex(140, 190);
  flc_end_line();
  flc_line_style(0);

  flc_set_color(FL_BLUE);
  flc_line_style_with_width(FL_DOT | FL_CAP_SQUARE, 5);
  flc_begin_line();
  flc_vertex(10, 50);
  flc_vertex(150, 50);
  flc_vertex(150, 190);
  flc_end_line();
  flc_line_style(0);

  flc_set_color(FL_BLACK);
  flc_line_style_with_width(FL_DASHDOT |FL_CAP_ROUND |FL_JOIN_ROUND , 5);
  flc_begin_line();
  flc_vertex(10, 40);
  flc_vertex(160, 40);
  flc_vertex(160, 190);
  flc_end_line();
  flc_line_style(0);

  flc_set_color(FL_RED);
  flc_line_style_with_width(FL_DASHDOTDOT |FL_CAP_SQUARE |FL_JOIN_BEVEL , 5);
  flc_begin_line();
  flc_vertex(10, 30);
  flc_vertex(170, 30);
  flc_vertex(170, 190);
  flc_end_line();
  flc_line_style(0);


  flc_set_color(FL_GREEN);
  flc_line_style_with_width(FL_DASHDOTDOT |FL_CAP_ROUND |FL_JOIN_ROUND , 5);
  flc_begin_line();
  flc_vertex(10, 20);
  flc_vertex(180, 20);
  flc_vertex(180, 190);
  flc_end_line();
  flc_line_style(0);

  flc_set_color(FL_BLUE);
  flc_line_style_with_width_dashes(0, 5, (char*)"\12\3\4\2\2\1");
  flc_begin_line();
  flc_vertex(10, 10);
  flc_vertex(190, 10);
  flc_vertex(190, 190);

  flc_end_line();
  flc_line_style(0);
  flc_pop_matrix();
  flc_set_color(FL_BLACK);
}
void draw_widget5(fl_Widget self){
  Fl_Box_draw_super(self);
  //fl_push_clip(x(),y(),w(),h());
  flc_push_matrix();

  flc_translate(Fl_Box_x(self),Fl_Box_y(self));
  flc_push_matrix();
  flc_mult_matrix(1,3,0,1,0,-20);
  flc_set_color(FL_GREEN);
  flc_begin_polygon();
  flc_vertex(10,10);
  flc_vertex(100,-80);
  flc_vertex(100,-190);
  flc_end_polygon();

  flc_set_color(FL_RED);
  flc_line_style_with_width(FL_DASHDOT, 7);
  flc_begin_loop();

  flc_vertex(10,10);
  flc_vertex(100,-80);
  flc_vertex(100,-190);
  flc_end_loop();
  flc_line_style(0);

  flc_set_color(FL_BLUE);
  flc_line_style_with_width(FL_SOLID, 3);
  flc_begin_loop();
  flc_circle(60,-50,30);
  flc_end_loop();
  flc_line_style(0);

  flc_pop_matrix();
  flc_scale_with_y(1.8,1);

  flc_set_color(FL_YELLOW);
  flc_begin_polygon();
  flc_arc_by_radius(30,90,20,-45,200);
  flc_end_polygon();

  flc_set_color(FL_BLACK);
  flc_line_style_with_width(FL_DASH, 3);
  flc_begin_line();
  flc_arc_by_radius(30,90,20,-45,200);
  flc_end_line();
  flc_line_style(0);

  flc_translate(15,0);
  flc_scale_with_y(1.5,3);
  flc_begin_complex_polygon();
  flc_vertex(30,70);
  flc_arc_by_radius(45,55,10,200,90);
  flc_arc_by_radius(55,45,8,-170,20);
  flc_vertex(60,40);
  flc_vertex(30,20);
  flc_vertex(40,5);
  flc_vertex(60,25);
  //fl_vertex(50,50);
  flc_curve(35,30,30,53,0,35,65,65);
  flc_gap();
  flc_vertex(50,25);
  flc_vertex(40,10);
  flc_vertex(35,20);
  flc_end_complex_polygon();
  flc_pop_matrix();
}
fl_Box make_widget(int x, int y, fl_Box_Virtual_Funcs* funcs){
  fl_Box b = Fl_OverriddenBox_New_WithLabel(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\"",funcs);
  Fl_Box_set_align(b, FL_ALIGN_TOP);
  Fl_Box_set_labelsize(b, 10);
  return b;
}
fl_Box make_widget2(int x, int y, fl_Box_Virtual_Funcs* funcs){
  fl_Box b = Fl_OverriddenBox_New_WithLabel(x,y,100,100, "Integer primitives",funcs);
  Fl_Box_set_labelsize(b,10);
  Fl_Box_set_align(b,FL_ALIGN_TOP);
  return b;
}
fl_Box make_widget3(int x, int y, fl_Box_Virtual_Funcs* funcs){
  fl_Box b = Fl_OverriddenBox_New_WithLabel(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",funcs);
  Fl_Box_set_labelsize(b,10);
  Fl_Box_set_align(b,FL_ALIGN_TOP);
  return b;
}
fl_Box make_widget4(int x, int y, fl_Box_Virtual_Funcs* funcs){
  fl_Box b = Fl_OverriddenBox_New_WithLabel(x,y,150,150, "Line styles",funcs);
  Fl_Box_set_labelsize(b,10);
  Fl_Box_set_align(b,FL_ALIGN_TOP);
  return b;
}
fl_Box make_widget5(int x, int y, fl_Box_Virtual_Funcs* funcs){
  fl_Box b = Fl_OverriddenBox_New_WithLabel(x,y,230,250, "Complex (double) drawings:\nBlue ellipse may not be\ncorrectly transformed\ndue to non-orthogonal\ntransformation",funcs);
  Fl_Box_set_labelsize(b,10);
  Fl_Box_set_align(b,FL_ALIGN_TOP);
  return b;
}
uchar* image;
int width;
int height;
void make_image() {
  image = malloc(sizeof(uchar)*4*width*height);
  uchar *p = image;
  int y = 0;
  for (;y < height; y++) {
    double Y = (double)(y)/(height-1);
    int x = 0;
    for (; x < width; x++) {
      double X = (double)(x)/(width-1);
      *p++ = (uchar)(255*((1-X)*(1-Y))); // red in upper-left
      *p++ = (uchar)(255*((1-X)*Y));	// green in lower-left
      *p++ = (uchar)(255*(X*Y));	// blue in lower-right
      X -= 0.5;
      Y -= 0.5;
      int alpha = (int)(350 * sqrt(X * X + Y * Y));
      if (alpha < 255) *p++ = (uchar)(alpha);	// alpha transparency
      else *p++ = 255;
      Y += 0.5;
    }
  }
}
void print(fl_Widget w, void *v) {
  fl_Widget g = w;
  fl_Printer p = Fl_Printer_New();
  if (!Fl_Printer_start_job(p,1)) {
    Fl_Printer_start_page(p);
    fl_Window w = Fl_Widget_window(g);
    Fl_Printer_print_window(p,w);
    Fl_Printer_end_page(p);
    Fl_Printer_end_job(p);
  }
  Fl_Printer_Destroy(p);
}
void draw_button(fl_Widget w){
  fl_Button b = (fl_Button)w;
  Fl_Button_draw_super(b);
  if (Fl_Button_type(b) == FL_HIDDEN_BUTTON) return;
  Fl_Color col = Fl_Button_value(b) ? Fl_Button_selection_color(b) : Fl_Button_color(b);
  Fl_Button_draw_box_with_tc(b,Fl_Button_value(b) ? (Fl_Button_down_box(b)?Fl_Button_down_box(b):fl_downC(Fl_Button_box(b))) : Fl_Button_box(b), col);
  flc_set_color(FL_WHITE);
  flc_line_style_with_width(FL_SOLID,5);
  flc_line(Fl_Button_x(b)+15,Fl_Button_y(b)+10,Fl_Button_x(b)+Fl_Button_w(b)-15,Fl_Button_y(b)+Fl_Button_h(b)-23);
  flc_line(Fl_Button_x(b)+Fl_Button_w(b)-15,Fl_Button_y(b)+10,Fl_Button_x(b)+15,Fl_Button_y(b)+Fl_Button_h(b)-23);
  flc_line_style(0);
  Fl_Button_draw_label(b);
};
int main (int argc, char** argv){
  width = 80;
  height = 80;
  fl_Window w2 = Fl_Window_New_WithLabel(500,560,"Graphics test");
  fl_Group c2 = Fl_Group_New(3, 43, 494, 514 );
  fl_Box_Virtual_Funcs* widget_funcs = Fl_Box_default_virtual_funcs();
  widget_funcs->draw = &draw_widget;
  make_widget(10,140,widget_funcs);
  fl_Box_Virtual_Funcs* widget2_funcs = Fl_Box_default_virtual_funcs();
  widget2_funcs->draw = &draw_widget2;
  make_widget2(110,80,widget2_funcs);
  fl_Box_Virtual_Funcs* widget3_funcs = Fl_Box_default_virtual_funcs();
  widget3_funcs->draw = &draw_widget3;
  make_widget3(220,140,widget3_funcs);
  fl_Box_Virtual_Funcs* widget4_funcs = Fl_Box_default_virtual_funcs();
  widget4_funcs->draw = &draw_widget4;
  make_widget4(330,70,widget4_funcs);
  fl_Box_Virtual_Funcs* widget5_funcs = Fl_Box_default_virtual_funcs();
  widget5_funcs->draw = &draw_widget5;
  make_widget5(140,270,widget5_funcs);

  make_image();
  fl_RGB_Image rgb = Fl_RGB_Image_New_With_D(image, width, height, 4);
  fl_Button_Virtual_Funcs* b_rgb_funcs = Fl_Button_default_virtual_funcs();
  b_rgb_funcs->draw = &draw_button;
  fl_Button b_rgb = Fl_OverriddenButton_New_WithLabel(10,245,100,100,"RGB with alpha",b_rgb_funcs);
  Fl_Button_set_image(b_rgb,rgb);


  fl_Button_Virtual_Funcs* b_pixmap_funcs = Fl_Button_default_virtual_funcs();
  b_pixmap_funcs->draw = &draw_button;
  fl_Button b_pixmap = Fl_OverriddenButton_New_WithLabel(10,345,100,100,"Pixmap",b_pixmap_funcs);
  fl_Pixmap pixmap = Fl_Pixmap_New((char**)porsche_xpm);
  Fl_Button_set_image(b_pixmap, pixmap);

  fl_Button_Virtual_Funcs* b_bitmap_funcs = Fl_Button_default_virtual_funcs();
  b_bitmap_funcs->draw = &draw_button;
  fl_Button b_bitmap = Fl_OverriddenButton_New_WithLabel(10,445,100,100,"Bitmap",b_bitmap_funcs);
  fl_Bitmap sorceress = Fl_Bitmap_New_WithUchar(sorceress_bits, sorceress_width, sorceress_height);
  Fl_Button_set_labelcolor(b_bitmap,FL_GREEN);
  Fl_Button_set_image(b_bitmap, sorceress);
  Fl_Clock_New(360,230,120,120);
  fl_Return_Button ret = Fl_Return_Button_New_WithLabel(360, 360, 120,30, "Return");
  Fl_Return_Button_deactivate(ret);
  fl_Button but1 = Fl_Button_New_WithLabel(360, 390, 30, 30, "@->|");
  Fl_Button_set_labelcolor(but1,FL_DARK3);
  fl_Button but2 = Fl_Button_New_WithLabel(390, 390, 30, 30, "@UpArrow");
  Fl_Button_set_labelcolor(but2,FL_DARK3);
  fl_Button but3 = Fl_Button_New_WithLabel(420, 390, 30, 30, "@DnArrow");
  Fl_Button_set_labelcolor(but3,FL_DARK3);
  fl_Button but4 = Fl_Button_New_WithLabel(450, 390, 30, 30, "@+");
  Fl_Button_set_labelcolor(but4,FL_DARK3);
  fl_Button but5 = Fl_Button_New_WithLabel(360, 425, 120, 30, "Hello, World");
  Fl_Button_set_labelfont(but5,FL_BOLD|FL_ITALIC);
  Fl_Button_set_labeltype(but5,FL_SHADOW_LABEL);
  Fl_Button_set_box(but5,FL_ROUND_UP_BOX);
  fl_Button but6 = Fl_Button_New_WithLabel(360, 460, 120, 30, "Plastic");
  Fl_Button_set_box(but6,FL_PLASTIC_UP_BOX);
  {
    fl_Group o = Fl_Group_New(360, 495, 120, 40);
    Fl_Group_set_box(o,FL_UP_BOX);
    {
      fl_Group o = Fl_Group_New(365, 500, 110, 30);
      Fl_Group_set_box(o,FL_THIN_UP_FRAME);
      {
	fl_Round_Button o = Fl_Round_Button_New_WithLabel(365, 500, 40, 30, "rad");
	Fl_Round_Button_set_value(o,1);
      }
      {
	fl_Check_Button o = Fl_Check_Button_New_WithLabel(410, 500, 60, 30, "check");
	Fl_Check_Button_set_value(o,1);
      }

      Fl_Group_end(o);
    }
    Fl_Group_end(o);
    Fl_Group_deactivate(o);
  }
  fl_Box tx = Fl_Box_New_WithLabel(120,492,230,50,"Background is not printed because\nencapsulating group, which we are\n printing, has not set the box type");
  Fl_Box_set_box(tx,FL_SHADOW_BOX);
  Fl_Box_set_labelsize(tx,12);

  Fl_Box_hide(tx);

  Fl_Group_end(c2);
  fl_Button b4 = Fl_Button_New_WithLabel(10,5, 150, 25, "Print");
  Fl_Button_set_callback_with_user_data(b4,print,c2);

  Fl_Window_end(w2);
  Fl_Window_show_with_args(w2,argc, argv);
  return Fl_run();
}