summaryrefslogtreecommitdiff
path: root/libXg/arc.c
diff options
context:
space:
mode:
authorJosip Rodin <jrodin@jagor.srce.hr>1999-06-15 14:49:16 -0700
committerJosip Rodin <jrodin@jagor.srce.hr>1999-06-15 14:49:16 -0700
commitb4340e99efb5486fb66c0d4d9348b967dc039a3a (patch)
tree9f87c02bf18a1a4bcad920d6c488e8523b667ba3 /libXg/arc.c
Import wily_0.13.41.orig.tar.gz
[dgit import orig wily_0.13.41.orig.tar.gz]
Diffstat (limited to 'libXg/arc.c')
-rw-r--r--libXg/arc.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/libXg/arc.c b/libXg/arc.c
new file mode 100644
index 0000000..44a8282
--- /dev/null
+++ b/libXg/arc.c
@@ -0,0 +1,44 @@
+/* Copyright (c) 1992 AT&T - All rights reserved. */
+#include <libc.h>
+#include <libg.h>
+#include "libgint.h"
+#include <math.h>
+
+#define rad2deg(x) 180*((x)/3.1415926535897932384626433832795028841971693993751)
+
+void
+arc(Bitmap *b, Point p0, Point p1, Point p2, int v, Fcode f)
+{
+ unsigned int d;
+ int x, y, r, start, end, delta;
+ GC g;
+
+ p1.x -= p0.x;
+ p1.y -= p0.y;
+ p2.x -= p0.x;
+ p2.y -= p0.y;
+ r = (int)sqrt((double)(p1.x*p1.x + p1.y*p1.y));
+ start = (int)(64*rad2deg(atan2(-p2.y, p2.x)));
+ end = (int)(64*rad2deg(atan2(-p1.y, p1.x)));
+ if(start < 0)
+ start += 64*360;
+ if(end < 0)
+ end += 64*360;
+ delta = end - start;
+ if(delta < 0)
+ delta += 64*360;
+ x = p0.x - r;
+ y = p0.y - r;
+ if(b->flag&SHIFT){
+ x -= b->r.min.x;
+ y -= b->r.min.y;
+ }
+ d = 2*r;
+ g = _getfillgc(f, b, v);
+ /*
+ * delta is positive, so this draws counterclockwise arc
+ * from start to start+delta
+ */
+ XDrawArc(_dpy, (Drawable)b->id, g, x, y, d, d, start, delta);
+}
+