Mercurial > dwindows
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) {