# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1332998186 0 # Node ID c3e08322b8f60da4ea978d9c1f772a0adabf4adf # Parent c441c85baa572c98916a8460ebe72bceb2497f5c Fixed issues drawing arcs on GTK3 and GTK2 for printing. This issue was seen in the test program with the failure to draw the bottom right arc. GTK2 printing may require some other updates after looking at this change. diff -r c441c85baa57 -r c3e08322b8f6 gtk/dw.c --- a/gtk/dw.c Wed Mar 28 23:11:12 2012 +0000 +++ b/gtk/dw.c Thu Mar 29 05:16:26 2012 +0000 @@ -8389,19 +8389,28 @@ if(cr) { GdkColor *foreground = pthread_getspecific(_dw_fg_color_key); - double a1 = atan2((y1-yorigin), (x1-xorigin)); - double a2 = atan2((y2-yorigin), (x2-xorigin)); - int width = x2-x1; - float scale = (float)(y2-y1)/(float)width; - + int width = abs(x2-x1); + float scale = fabs((float)(y2-y1))/(float)width; + + if(flags & DW_DRAW_NOAA) + cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE); + gdk_cairo_set_source_color (cr, foreground); cairo_set_line_width(cr, 1); if(scale != 1.0) cairo_scale(cr, 1.0, scale); if(flags & DW_DRAW_FULL) - cairo_arc(cr, xorigin, yorigin / scale, (x2-x1)/2, 0, M_PI*2); + cairo_arc(cr, xorigin, yorigin / scale, width/2, 0, M_PI*2); else + { + double dx = xorigin - x1; + double dy = yorigin - y1; + double r = sqrt(dx*dx + dy*dy); + double a1 = atan2((y1-yorigin), (x1-xorigin)); + double a2 = atan2((y2-yorigin), (x2-xorigin)); + cairo_arc(cr, xorigin, yorigin, r, a1, a2); + } if(flags & DW_DRAW_FILL) cairo_fill(cr); cairo_stroke(cr); diff -r c441c85baa57 -r c3e08322b8f6 gtk3/dw.c --- a/gtk3/dw.c Wed Mar 28 23:11:12 2012 +0000 +++ b/gtk3/dw.c Thu Mar 29 05:16:26 2012 +0000 @@ -7027,13 +7027,8 @@ if(cr) { GdkRGBA *foreground = pthread_getspecific(_dw_fg_color_key); - double dx = xorigin - x1; - double dy = yorigin - y1; - double r = sqrt(dx*dx + dy*dy); - double a1 = atan2((y1-yorigin), (x1-xorigin)); - double a2 = atan2((y2-yorigin), (x2-xorigin)); - int width = x2-x1; - float scale = (float)(y2-y1)/(float)width; + int width = abs(x2-x1); + float scale = fabs((float)(y2-y1))/(float)width; if(flags & DW_DRAW_NOAA) cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE); @@ -7043,9 +7038,17 @@ if(scale != 1.0) cairo_scale(cr, 1.0, scale); if(flags & DW_DRAW_FULL) - cairo_arc(cr, xorigin, yorigin / scale, (x2-x1)/2, 0, M_PI*2); + cairo_arc(cr, xorigin, yorigin / scale, width/2, 0, M_PI*2); else + { + double dx = xorigin - x1; + double dy = yorigin - y1; + double r = sqrt(dx*dx + dy*dy); + double a1 = atan2((y1-yorigin), (x1-xorigin)); + double a2 = atan2((y2-yorigin), (x2-xorigin)); + cairo_arc(cr, xorigin, yorigin, r, a1, a2); + } if(flags & DW_DRAW_FILL) cairo_fill(cr); cairo_stroke(cr);