| @@ -106,12 +106,12 @@ static double lw = 1; | |||||
| static double hlw; | static double hlw; | ||||
| static cairo_antialias_t aa = CAIRO_ANTIALIAS_GRAY; | static cairo_antialias_t aa = CAIRO_ANTIALIAS_GRAY; | ||||
| static int npoints = 0; | |||||
| cairo_matrix_t Fl_Cairo_Graphics_Driver::m; | cairo_matrix_t Fl_Cairo_Graphics_Driver::m; | ||||
| cairo_matrix_t Fl_Cairo_Graphics_Driver::stack[FL_MATRIX_STACK_SIZE]; | cairo_matrix_t Fl_Cairo_Graphics_Driver::stack[FL_MATRIX_STACK_SIZE]; | ||||
| int Fl_Cairo_Graphics_Driver::sptr; | int Fl_Cairo_Graphics_Driver::sptr; | ||||
| static int awaiting_vertex = false; | |||||
| #define cairo_set_antialias( cr, aa ) | #define cairo_set_antialias( cr, aa ) | ||||
| Fl_Cairo_Graphics_Driver::Fl_Cairo_Graphics_Driver ( ) : Fl_Xlib_Graphics_Driver () | Fl_Cairo_Graphics_Driver::Fl_Cairo_Graphics_Driver ( ) : Fl_Xlib_Graphics_Driver () | ||||
| @@ -573,32 +573,32 @@ void Fl_Cairo_Graphics_Driver::rectf ( int x, int y, int w, int h ) | |||||
| void Fl_Cairo_Graphics_Driver::begin_line ( void ) | void Fl_Cairo_Graphics_Driver::begin_line ( void ) | ||||
| { | { | ||||
| awaiting_vertex = true; | |||||
| what = LINE; | what = LINE; | ||||
| npoints = 0; | |||||
| } | } | ||||
| void Fl_Cairo_Graphics_Driver::begin_points ( void ) | void Fl_Cairo_Graphics_Driver::begin_points ( void ) | ||||
| { | { | ||||
| awaiting_vertex = true; | |||||
| what = POINT_; | what = POINT_; | ||||
| npoints = 0; | |||||
| } | } | ||||
| void Fl_Cairo_Graphics_Driver::begin_polygon ( void ) | void Fl_Cairo_Graphics_Driver::begin_polygon ( void ) | ||||
| { | { | ||||
| awaiting_vertex = true; | |||||
| what = POLYGON; | what = POLYGON; | ||||
| npoints = 0; | |||||
| } | } | ||||
| void Fl_Cairo_Graphics_Driver::begin_loop ( void ) | void Fl_Cairo_Graphics_Driver::begin_loop ( void ) | ||||
| { | { | ||||
| awaiting_vertex = true; | |||||
| what = LOOP; | what = LOOP; | ||||
| npoints = 0; | |||||
| } | } | ||||
| void Fl_Cairo_Graphics_Driver::begin_complex_polygon ( void ) | void Fl_Cairo_Graphics_Driver::begin_complex_polygon ( void ) | ||||
| { | { | ||||
| what = POLYGON; | what = POLYGON; | ||||
| awaiting_vertex = true; | |||||
| npoints = 0; | |||||
| } | } | ||||
| void Fl_Cairo_Graphics_Driver::end_line ( void ) | void Fl_Cairo_Graphics_Driver::end_line ( void ) | ||||
| @@ -634,35 +634,47 @@ void Fl_Cairo_Graphics_Driver::end_points ( void ) | |||||
| void Fl_Cairo_Graphics_Driver::end_loop ( void ) | void Fl_Cairo_Graphics_Driver::end_loop ( void ) | ||||
| { | { | ||||
| if ( npoints < 3 ) | |||||
| { | |||||
| end_line(); | |||||
| return; | |||||
| } | |||||
| cairo_t *cr = Fl::cairo_cc(); | cairo_t *cr = Fl::cairo_cc(); | ||||
| cairo_close_path( cr ); | cairo_close_path( cr ); | ||||
| end_line(); | end_line(); | ||||
| } | } | ||||
| /* static double last_vertex_x; */ | |||||
| /* static double last_vertex_y; */ | |||||
| void Fl_Cairo_Graphics_Driver::vertex ( double x, double y ) | void Fl_Cairo_Graphics_Driver::vertex ( double x, double y ) | ||||
| { | { | ||||
| cairo_t *cr = Fl::cairo_cc(); | cairo_t *cr = Fl::cairo_cc(); | ||||
| if ( awaiting_vertex ) | |||||
| { | |||||
| if ( !npoints ) | |||||
| cairo_move_to( cr, x, y ); | cairo_move_to( cr, x, y ); | ||||
| awaiting_vertex = false; | |||||
| } | |||||
| else | else | ||||
| cairo_line_to( cr, x, y ); | cairo_line_to( cr, x, y ); | ||||
| ++npoints; | |||||
| } | } | ||||
| void Fl_Cairo_Graphics_Driver::gap ( void ) | void Fl_Cairo_Graphics_Driver::gap ( void ) | ||||
| { | { | ||||
| awaiting_vertex = true; | |||||
| npoints = 0; | |||||
| } | } | ||||
| void Fl_Cairo_Graphics_Driver::end_complex_polygon ( void ) | void Fl_Cairo_Graphics_Driver::end_complex_polygon ( void ) | ||||
| { | { | ||||
| cairo_t *cr = Fl::cairo_cc(); | |||||
| if ( npoints < 3 ) | |||||
| { | |||||
| end_line(); | |||||
| return; | |||||
| } | |||||
| gap(); | |||||
| cairo_t *cr = Fl::cairo_cc(); | |||||
| cairo_close_path( cr ); | cairo_close_path( cr ); | ||||
| @@ -675,6 +687,12 @@ void Fl_Cairo_Graphics_Driver::end_complex_polygon ( void ) | |||||
| void Fl_Cairo_Graphics_Driver::end_polygon ( void ) | void Fl_Cairo_Graphics_Driver::end_polygon ( void ) | ||||
| { | { | ||||
| if ( npoints < 3 ) | |||||
| { | |||||
| end_line(); | |||||
| return; | |||||
| } | |||||
| cairo_t *cr = Fl::cairo_cc(); | cairo_t *cr = Fl::cairo_cc(); | ||||
| cairo_close_path( cr ); | cairo_close_path( cr ); | ||||