[teklib-general] changeset in /hg/teklib/current: drawfan added

Franciska Schulze fschulze at neoscientists.org
Mon Nov 26 16:26:59 CET 2007


changeset 7c5ce8a35e27 in /hg/teklib/current
details: http://teklib.org:8001/hg/teklib/current?cmd=changeset;node=7c5ce8a35e27
description:
	drawfan added

diffs (179 lines):

diff -r dbdec3ac7285 -r 7c5ce8a35e27 src/display_x11/display_x11_api.c
--- a/src/display_x11/display_x11_api.c	Sun Nov 11 17:49:49 2007 +0100
+++ b/src/display_x11/display_x11_api.c	Mon Nov 12 20:17:14 2007 +0100
@@ -427,6 +427,45 @@ LOCAL void
 LOCAL void
 x11_drawfan(TMOD_X11 *mod, struct TVRequest *req)
 {
+	TINT i;
+	XPoint tri[3];
+	VISUAL *v = req->tvr_Op.Fan.Instance;
+	TINT *array = req->tvr_Op.Fan.Array;
+	TINT num = req->tvr_Op.Fan.Num;
+	TTAGITEM *tags = req->tvr_Op.Fan.Tags;
+	TVPEN pen = (TVPEN) TGetTag(tags, TVisual_Pen, TVPEN_UNDEFINED);
+	TVPEN *penarray = (TVPEN *) TGetTag(tags, TVisual_PenArray, TNULL);
+
+	if (num < 3) return;
+
+	if (penarray)
+		setfgpen(mod, v, penarray[2]);
+	else
+		setfgpen(mod, v, pen);
+
+	tri[0].x = (TINT16) array[0];
+	tri[0].y = (TINT16) array[1];
+	tri[1].x = (TINT16) array[2];
+	tri[1].y = (TINT16) array[3];
+	tri[2].x = (TINT16) array[4];
+	tri[2].y = (TINT16) array[5];
+
+	XFillPolygon(mod->x11_Display, v->window, v->gc, tri, 3,
+		Nonconvex, CoordModeOrigin);
+
+	for (i = 3; i < num; i++)
+	{
+		tri[1].x = tri[2].x;
+		tri[1].y = tri[2].y;
+		tri[2].x = (TINT16)array[i*2];
+		tri[2].y = (TINT16)array[i*2+1];
+
+		if (penarray)
+			setfgpen(mod, v, penarray[i]);
+
+		XFillPolygon(mod->x11_Display, v->window, v->gc, tri, 3,
+			Nonconvex, CoordModeOrigin);
+	}
 }
 
 /*****************************************************************************/
diff -r dbdec3ac7285 -r 7c5ce8a35e27 src/visual/tests/fonts.c
--- a/src/visual/tests/fonts.c	Sun Nov 11 17:49:49 2007 +0100
+++ b/src/visual/tests/fonts.c	Mon Nov 12 20:17:14 2007 +0100
@@ -120,7 +120,7 @@ TVOID fonttest(TAPTR v, TVPEN *pentab)
 
 	{
 		TTAGITEM stags[2];
-		TVPEN penarray[4];
+		TVPEN penarray[6];
 		TINT a1[6] = {
 			0,   300,
 			300,   0,
@@ -134,10 +134,21 @@ TVOID fonttest(TAPTR v, TVPEN *pentab)
 			300, 400,
 		};
 
+		TINT fan[12] = {
+			340, 230,
+			240, 130,
+			440, 130,
+			440, 330,
+			240, 330,
+			240, 130,
+		};
+
 		penarray[0] = pentab[0];
 		penarray[1] = pentab[0];
 		penarray[2] = pentab[0];
 		penarray[3] = pentab[3];
+		penarray[4] = pentab[0];
+		penarray[5] = pentab[3];
 
 		stags[0].tti_Tag = TVisual_PenArray;
 		stags[0].tti_Value = (TTAG) &penarray;
@@ -145,6 +156,8 @@ TVOID fonttest(TAPTR v, TVPEN *pentab)
 
 		TVisualDrawStrip(v, a1, 3, stags);
 		TVisualDrawStrip(v, a2, 4, stags);
+
+		TVisualDrawFan(v, fan, 6, stags);
 	}
 
 	TVisualText(v, 10, 10+fh, buf, TStrLen(buf), pentab[0], TVPEN_UNDEFINED);
diff -r dbdec3ac7285 -r 7c5ce8a35e27 src/visual/visual_api.c
--- a/src/visual/visual_api.c	Sun Nov 11 17:49:49 2007 +0100
+++ b/src/visual/visual_api.c	Mon Nov 12 20:17:14 2007 +0100
@@ -494,6 +494,19 @@ EXPORT void vis_drawstrip(TMOD_VIS *inst
 
 /*****************************************************************************/
 
+EXPORT void vis_drawfan(TMOD_VIS *inst, TINT *array, TINT num, TTAGITEM *tags)
+{
+	struct TVRequest *req = visi_getreq(inst, TVCMD_DRAWFAN,
+		inst->vis_Display, TNULL);
+	req->tvr_Op.Fan.Instance = inst->vis_Visual;
+	req->tvr_Op.Fan.Array = array;
+	req->tvr_Op.Fan.Num = num;
+	req->tvr_Op.Fan.Tags = tags;
+	visi_dosync(inst, req);
+}
+
+/*****************************************************************************/
+
 EXPORT void vis_drawrgb(TMOD_VIS *inst, TINT x, TINT y, TUINT *buf,
 	TINT w, TINT h, TINT totw)
 {
diff -r dbdec3ac7285 -r 7c5ce8a35e27 src/visual/visual_mod.c
--- a/src/visual/visual_mod.c	Sun Nov 11 17:49:49 2007 +0100
+++ b/src/visual/visual_mod.c	Mon Nov 12 20:17:14 2007 +0100
@@ -52,7 +52,7 @@ vis_vectors[VISUAL_NUMVECTORS] =
 	(TMFPTR) vis_drawrgb,
 	(TMFPTR) vis_drawtags,
 	(TMFPTR) vis_scroll,
-	//(TMFPTR) vis_drawfan,
+	(TMFPTR) vis_drawfan,
 	//(TMFPTR) vis_drawarc,
 };
 
diff -r dbdec3ac7285 -r 7c5ce8a35e27 src/visual/visual_mod.h
--- a/src/visual/visual_mod.h	Sun Nov 11 17:49:49 2007 +0100
+++ b/src/visual/visual_mod.h	Mon Nov 12 20:17:14 2007 +0100
@@ -22,7 +22,7 @@
 
 #define VISUAL_VERSION		2
 #define VISUAL_REVISION		0
-#define VISUAL_NUMVECTORS	37
+#define VISUAL_NUMVECTORS	35
 
 #ifndef LOCAL
 #define LOCAL
@@ -129,6 +129,6 @@ EXPORT void vis_scroll(TMOD_VIS *mod, TI
 EXPORT void vis_scroll(TMOD_VIS *mod, TINT x, TINT y, TINT w, TINT h,
 	TINT dx, TINT dy);
 EXPORT void vis_drawtags(TMOD_VIS *mod, TTAGITEM *tags);
-//EXPORT void vis_drawfan(TMOD_VIS *mod, TINT16 *array, TINT num, TVPEN pen);
+EXPORT void vis_drawfan(TMOD_VIS *mod, TINT *array, TINT num, TTAGITEM *tags);
 
 #endif
diff -r dbdec3ac7285 -r 7c5ce8a35e27 tek/ansicall/visual.h
--- a/tek/ansicall/visual.h	Sun Nov 11 17:49:49 2007 +0100
+++ b/tek/ansicall/visual.h	Mon Nov 12 20:17:14 2007 +0100
@@ -86,4 +86,7 @@
 #define TVisualScroll(visual,x,y,w,h,dx,dy) \
 	(*(((TMODCALL void(**)(TAPTR,TINT,TINT,TINT,TINT,TINT,TINT))(visual))[-34]))(visual,x,y,w,h,dx,dy)
 
+#define TVisualDrawFan(visual,array,num,tags) \
+	(*(((TMODCALL void(**)(TAPTR,TINT *,TINT,TTAGITEM *))(visual))[-35]))(visual,array,num,tags)
+
 #endif /* _TEK_ANSICALL_VISUAL_H */
diff -r dbdec3ac7285 -r 7c5ce8a35e27 tek/idf/visual.idf
--- a/tek/idf/visual.idf	Sun Nov 11 17:49:49 2007 +0100
+++ b/tek/idf/visual.idf	Mon Nov 12 20:17:14 2007 +0100
@@ -46,5 +46,6 @@ void DrawRGB(TINT x, TINT y, TUINT *buf,
 void DrawRGB(TINT x, TINT y, TUINT *buf, TINT w, TINT h, TINT totw)
 void DrawTags(TTAGITEM *tags)
 void Scroll(TINT x, TINT y, TINT w, TINT h, TINT dx, TINT dy)
+void DrawFan(TINT *array, TINT num, TTAGITEM *tags)
 
 .end
diff -r dbdec3ac7285 -r 7c5ce8a35e27 tek/mod/visual.h
--- a/tek/mod/visual.h	Sun Nov 11 17:49:49 2007 +0100
+++ b/tek/mod/visual.h	Mon Nov 12 20:17:14 2007 +0100
@@ -104,6 +104,7 @@ struct TVRequest
 			TVPEN FgPen, BgPen; } Text;
 		struct { TAPTR Instance; TINT *Array; TINT Num; TTAGITEM *Tags; } Strip;
 		struct { TAPTR Instance; TTAGITEM *Tags; } DrawTags;
+		struct { TAPTR Instance; TINT *Array; TINT Num; TTAGITEM *Tags; } Fan;
 
 	} tvr_Op;
 };


More information about the teklib-general mailing list