Mercurial > dwindows
changeset 1634:c3e08322b8f6
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.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Thu, 29 Mar 2012 05:16:26 +0000 |
parents | c441c85baa57 |
children | 4506f4e31efb |
files | gtk/dw.c gtk3/dw.c |
diffstat | 2 files changed, 26 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- 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);
--- 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);