Index: trunk/Ohana/src/libkapa/include/kapa.h
===================================================================
--- trunk/Ohana/src/libkapa/include/kapa.h	(revision 31496)
+++ trunk/Ohana/src/libkapa/include/kapa.h	(revision 31559)
@@ -255,5 +255,5 @@
 void bDrawRectFill (bDrawBuffer *buffer, double x1, double y1, double x2, double y2);
 void bDrawTriOpen  (bDrawBuffer *buffer, double x1, double y1, double x2, double y2, double x3, double y3);
-void bDrawTriFill  (bDrawBuffer *buffer, double x1, double y1, double x2, double y2, double x3, double y3);
+void bDrawTriFill  (bDrawBuffer *buffer, double x1, double y1, double dx, double dy);
 
 /* bDrawRotFont.c */
Index: trunk/Ohana/src/libkapa/src/bDrawFuncs.c
===================================================================
--- trunk/Ohana/src/libkapa/src/bDrawFuncs.c	(revision 31496)
+++ trunk/Ohana/src/libkapa/src/bDrawFuncs.c	(revision 31559)
@@ -134,6 +134,6 @@
   Y2 = MIN (MAX (ROUND (y2), 1), buffer[0].Ny - 1);
 
-  bDrawLineHorizontal (buffer, X1, X2, Y1);
-  bDrawLineHorizontal (buffer, X1, X2, Y2);
+  bDrawLineHorizontal (buffer, X1, X2 + 1, Y1);
+  bDrawLineHorizontal (buffer, X1, X2 + 1, Y2);
   bDrawLineVertical   (buffer, X1, Y1, Y2);
   bDrawLineVertical   (buffer, X2, Y1, Y2);
@@ -275,7 +275,53 @@
 }
 
-void bDrawTriFill (bDrawBuffer *buffer, double x1, double y1, double x2, double y2, double x3, double y3) {
-
-  bDrawTriOpen (buffer, x1, y1, x2, y2, x3, y3);
+// upright triangle with base of width 2 dX + 1, height of dY, center of base at x1, y1
+void bDrawTriFill (bDrawBuffer *buffer, double x1, double y1, double dx, double dy) {
+
+  int xs, xe, x, y;
+  float e, m;
+
+  double dX = fabs(dx);
+  
+  xs = x1 - dX;
+  xe = x1 + dX + 1;
+  e = 0;
+  m = dX / dy;
+
+  if (dy > 0.0) {
+    for (y = y1; y < y1 + dy + 1; y++) {
+      for (x = xs; x < xe; x++) {
+	bDrawPoint (buffer, x, y);
+      }
+      e += m;
+      if (e > 0.5) {
+	xs ++;
+	xe --;
+	e -= 1.0;
+      }
+      if (e < -0.5) {
+	xs ++;
+	xe --;
+	e += 1.0;
+      }
+    }    
+  } else {
+    for (y = y1; y > y1 + dy - 1; y--) {
+      for (x = xs; x < xe; x++) {
+	bDrawPoint (buffer, x, y);
+      }
+      e += m;
+      if (e > 0.5) {
+	xs ++;
+	xe --;
+	e -= 1.0;
+      }
+      if (e < -0.5) {
+	xs ++;
+	xe --;
+	e += 1.0;
+      }
+    }    
+  }
+ 
   return;
 }
