void ocpnDC::DrawRoundedRectangle( wxCoord x, wxCoord y, wxCoord w, wxCoord h, wxCoord r ) { if( dc ) dc->DrawRoundedRectangle( x, y, w, h, r ); #ifdef ocpnUSE_GL else { r++; int steps = ceil(sqrt((float)r)); wxCoord x1 = x + r, x2 = x + w - r; wxCoord y1 = y + r, y2 = y + h - r; if( ConfigureBrush() ) { glBegin( GL_TRIANGLE_FAN ); drawrrhelper( x2, y1, r, 0, steps ); drawrrhelper( x1, y1, r, 1, steps ); drawrrhelper( x1, y2, r, 2, steps ); drawrrhelper( x2, y2, r, 3, steps ); glEnd(); } if( ConfigurePen() ) { glBegin( GL_LINE_LOOP ); drawrrhelper( x2, y1, r, 0, steps ); drawrrhelper( x1, y1, r, 1, steps ); drawrrhelper( x1, y2, r, 2, steps ); drawrrhelper( x2, y2, r, 3, steps ); glEnd(); } } #endif }
void ocpnDC::DrawRoundedRectangle( wxCoord x, wxCoord y, wxCoord w, wxCoord h, wxCoord r ) { if( dc ) dc->DrawRoundedRectangle( x, y, w, h, r ); else { wxCoord x0 = x, x1 = x + r, x2 = x + w - r, x3 = x + h; wxCoord y0 = y, y1 = y + r, y2 = y + h - r, y3 = y + h; if( ConfigureBrush() ) { glBegin( GL_QUADS ); glVertex2i( x0, y1 ); glVertex2i( x1, y1 ); glVertex2i( x1, y2 ); glVertex2i( x0, y2 ); glVertex2i( x1, y0 ); glVertex2i( x2, y0 ); glVertex2i( x2, y3 ); glVertex2i( x0, y3 ); glVertex2i( x2, y1 ); glVertex2i( x3, y1 ); glVertex2i( x3, y2 ); glVertex2i( x2, y2 ); glEnd(); glBegin( GL_TRIANGLE_FAN ); glVertex2i( x1, y2 ); drawrrhelper( x1, y2, r, -M_PI, -M_PI / 2 ); glEnd(); glBegin( GL_TRIANGLE_FAN ); glVertex2i( x2, y2 ); drawrrhelper( x2, y2, r, -M_PI / 2, 0 ); glEnd(); glBegin( GL_TRIANGLE_FAN ); glVertex2i( x2, y1 ); drawrrhelper( x2, y1, r, 0, M_PI / 2 ); glEnd(); glBegin( GL_TRIANGLE_FAN ); glVertex2i( x1, y1 ); drawrrhelper( x1, y1, r, M_PI / 2, M_PI ); glEnd(); } if( ConfigurePen() ) { glBegin( GL_LINE_LOOP ); drawrrhelper( x1, y2, r, -M_PI, -M_PI / 2 ); drawrrhelper( x2, y2, r, -M_PI / 2, 0 ); drawrrhelper( x2, y1, r, 0, M_PI / 2 ); drawrrhelper( x1, y1, r, M_PI / 2, M_PI ); glEnd(); } } }