changeset 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 148daf522080
children 24f1dc19601d
files dw.h dwtest.c mac/dw.m
diffstat 3 files changed, 39 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/dw.h	Tue Oct 25 12:33:09 2011 +0000
+++ b/dw.h	Sun Oct 30 00:40:22 2011 +0000
@@ -1412,6 +1412,12 @@
 #define DW_HTML_STOP       5
 #define DW_HTML_PRINT      6
 
+/* Drawing flags... used for Arc currently */
+#define DW_DRAW_DEFAULT    0
+#define DW_DRAW_FILL       1
+#define DW_DRAW_FULL       (1 << 1)
+
+
 /* Macro for casting resource IDs to HICN */
 #define DW_RESOURCE(a) (a < 65536 ? (HICN)a : (HICN)0)
 
--- a/dwtest.c	Tue Oct 25 12:33:09 2011 +0000
+++ b/dwtest.c	Sun Oct 30 00:40:22 2011 +0000
@@ -369,7 +369,14 @@
     dw_color_foreground_set(DW_CLR_BLUE);
     dw_draw_polygon(window, pixmap, TRUE, 7, x, y);
     dw_color_foreground_set(DW_CLR_CYAN);
+    /* Bottom right corner */
     dw_draw_arc(window, pixmap, 0, width - 30, height - 30, width - 10, height - 30, width - 30, height - 10);
+    /* Top right corner */
+    dw_draw_arc(window, pixmap, 0, width - 30, 30, width - 30, 10, width - 10, 30);
+    /* Bottom left corner */
+    dw_draw_arc(window, pixmap, 0, 30, height - 30, 30, height - 10, 10, height - 30);
+    /* Full circle in the left top area */
+    dw_draw_arc(window, pixmap, 0, 100, 100, 80, 80, 120, 120);
     if(image)
     {
         if(image_stretch)
--- 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)
     {