diff mac/dw.m @ 1269:9e477efbacca

Added DW_DRAW_DEFAULT, DW_DRAW_FILL and DW_DRAW_FULL drawing flags. Adde some more arc segments and full circle commands to test program.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Sun, 30 Oct 2011 00:40:22 +0000
parents c72f5c35e67c
children 0b34e2cf0706
line wrap: on
line diff
--- a/mac/dw.m	Tue Oct 25 12:33:09 2011 +0000
+++ b/mac/dw.m	Sun Oct 30 00:40:22 2011 +0000
@@ -5267,18 +5267,32 @@
     NSColor *color = pthread_getspecific(_dw_fg_color_key);
     [color set];
 
-    [aPath moveToPoint:NSMakePoint(x1, y1)];
-    /* Calculate the midpoint */
-    r = 0.5 * (hypot((double)(y1 - yorigin), (double)(x1 - xorigin)) +
-               hypot((double)(y2 - yorigin), (double)(x2 - xorigin)));
-    a1 = atan2((double)(y1 - yorigin), (double)(x1 - xorigin));
-    a2 = atan2((double)(y2 - yorigin), (double)(x2 - xorigin));
-    if(a2 < a1)
-        a2 += M_PI * 2;
-    a = (a1 + a2) / 2.;
-    /* Prepare to draw */
-    [aPath appendBezierPathWithArcFromPoint:NSMakePoint((xorigin + r * cos(a)), (yorigin + r * sin(a)))
-           toPoint:NSMakePoint(x2, y2) radius:r];
+    /* Special state of a full circle/oval */
+    if(flags & DW_DRAW_FULL)
+    {
+        [aPath appendBezierPathWithOvalInRect:NSMakeRect(x1, y1, x2, y2)];
+    }
+    else
+    {
+        [aPath moveToPoint:NSMakePoint(x1, y1)];
+        /* Calculate the midpoint */
+        r = 0.5 * (hypot((double)(y1 - yorigin), (double)(x1 - xorigin)) +
+                   hypot((double)(y2 - yorigin), (double)(x2 - xorigin)));
+        a1 = atan2((double)(y1 - yorigin), (double)(x1 - xorigin));
+        a2 = atan2((double)(y2 - yorigin), (double)(x2 - xorigin));
+        if(a2 < a1)
+            a2 += M_PI * 2;
+        a = (a1 + a2) / 2.;
+        /* Prepare to draw */
+        [aPath appendBezierPathWithArcFromPoint:NSMakePoint((xorigin + r * cos(a)), (yorigin + r * sin(a)))
+                                        toPoint:NSMakePoint(x2, y2) radius:r];
+    }
+    /* If the fill flag is passed */
+    if(flags & DW_DRAW_FILL)
+    {
+        [aPath fill];
+    }
+    /* Actually do the drawing */
     [aPath stroke];
     if(pixmap)
     {