diff gtk/dw.c @ 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 e6a2e6405d30
children c6ebff29a916
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);