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);