#include #include #include #include #define COMPLEX 1 // must be 0 or 1 #define USE_FL_GAP 1 // must be 0 or 1 (irrelevant if COMPLEX == 0) // 0 => okay, 1 => bad #if (COMPLEX) #define BEGIN_POLYGON fl_begin_complex_polygon(); #define END_POLYGON fl_end_complex_polygon(); #if (USE_FL_GAP) #define GAP fl_gap(); // don't use fl_gap() ! #else #define GAP END_POLYGON fl_color(FL_BLACK); BEGIN_POLYGON // this is correct #endif #else // COMPLEX #define BEGIN_POLYGON fl_begin_polygon(); #define END_POLYGON fl_end_polygon(); #define GAP END_POLYGON BEGIN_POLYGON #endif class MyBox : public Fl_Box { public: MyBox(int X, int Y, int W, int H) : Fl_Box(X,Y,W,H) {}; void draw() { Fl_Box::draw(); fl_color(FL_BLUE); fl_push_matrix(); fl_translate(100,0); BEGIN_POLYGON fl_vertex(40, 140); fl_vertex(20, 100); fl_vertex( 0, 140); fl_vertex(20, 180); fl_vertex(40, 140); GAP fl_color(FL_GREEN); fl_vertex(60, 140); fl_vertex(80, 100); fl_vertex(100, 140); fl_vertex(80, 180); fl_vertex(60, 140); GAP fl_color(FL_RED); fl_vertex(70, 240); fl_vertex(90, 280); fl_vertex(110, 240); fl_vertex(90, 200); fl_vertex(70, 240); END_POLYGON fl_pop_matrix(); fl_color(FL_BLACK); } }; int main(int argc, char **argv) { Fl_Window *window = new Fl_Window(640,440); MyBox *box = new MyBox(20,20,600,400); box->box(FL_UP_BOX); box->color(FL_YELLOW); window->end(); window->show(argc, argv); return Fl::run(); }