Index: trunk/Ohana/src/kapa2/include/structures.h
===================================================================
--- trunk/Ohana/src/kapa2/include/structures.h	(revision 40557)
+++ trunk/Ohana/src/kapa2/include/structures.h	(revision 40558)
@@ -137,4 +137,5 @@
   double lweight, size;
   double x0, x1, y0, y1;  /* limits for this object */
+  float alpha;
 } Gobjects;
 
Index: trunk/Ohana/src/kapa2/src/bDrawFrame.c
===================================================================
--- trunk/Ohana/src/kapa2/src/bDrawFrame.c	(revision 40557)
+++ trunk/Ohana/src/kapa2/src/bDrawFrame.c	(revision 40558)
@@ -37,5 +37,5 @@
     // P *= (1 + 0.25*lweight);
 
-    bDrawSetStyle (buffer, color, lweight, 0);
+    bDrawSetStyle (buffer, color, lweight, 0, 1.0);
     // function about sets color and weight
     // bDrawRotTextInit does not exist
@@ -53,5 +53,5 @@
 	// should the font weight stay the same?
 	// XXX probably not needed now:
-	// bDrawSetStyle (buffer, color, lweight, 0);
+	// bDrawSetStyle (buffer, color, lweight, 0, 1.0);
       }
       FREE (ticks);
Index: trunk/Ohana/src/kapa2/src/bDrawIt.c
===================================================================
--- trunk/Ohana/src/kapa2/src/bDrawIt.c	(revision 40557)
+++ trunk/Ohana/src/kapa2/src/bDrawIt.c	(revision 40558)
@@ -16,5 +16,5 @@
   // the dx,dy size.  
   buffer = bDrawBufferCreate (graphic->dxwin, graphic->dywin, Nbyte, palette, Npalette);
-  bDrawSetStyle (buffer, black, 0, 0);
+  bDrawSetStyle (buffer, black, 0, 0, 1.0);
   
   // reset the sizes for all sections
Index: trunk/Ohana/src/kapa2/src/bDrawObjects.c
===================================================================
--- trunk/Ohana/src/kapa2/src/bDrawObjects.c	(revision 40557)
+++ trunk/Ohana/src/kapa2/src/bDrawObjects.c	(revision 40558)
@@ -23,5 +23,5 @@
   }
   bDrawColor black = KapaColorByName ("black");
-  bDrawSetStyle (buffer, black, 0, 0);
+  bDrawSetStyle (buffer, black, 0, 0, 1.0);
   return (TRUE);
 }
@@ -30,5 +30,5 @@
   
   int weight = MAX (0, MIN (10, object->lweight));
-  bDrawSetStyle (buffer, object->color, weight, object->ltype);
+  bDrawSetStyle (buffer, object->color, weight, object->ltype, 1.0);
   
   switch (object->style) {
Index: trunk/Ohana/src/kapa2/src/bDrawOverlay.c
===================================================================
--- trunk/Ohana/src/kapa2/src/bDrawOverlay.c	(revision 40557)
+++ trunk/Ohana/src/kapa2/src/bDrawOverlay.c	(revision 40558)
@@ -14,5 +14,5 @@
   /* translate color to bDrawColors : image[0].overlay[N].color */
   color = KapaColorByName (name[N]);
-  bDrawSetStyle (buffer, color, 0, 0);
+  bDrawSetStyle (buffer, color, 0, 0, 1.0);
   
   expand = 1.0;
@@ -99,5 +99,5 @@
   
   /* translate color to bDrawColors : image[0].overlay[N].color */
-  bDrawSetStyle (buffer, color, 0, 0);
+  bDrawSetStyle (buffer, color, 0, 0, 1.0);
 }
 
Index: trunk/Ohana/src/libkapa/include/kapa.h
===================================================================
--- trunk/Ohana/src/libkapa/include/kapa.h	(revision 40557)
+++ trunk/Ohana/src/libkapa/include/kapa.h	(revision 40558)
@@ -177,4 +177,5 @@
   int bWeight;
   int bType;
+  float alpha;
   bDrawColor bColor;
   bDrawColor bColor_R;
@@ -293,5 +294,5 @@
 void bDrawSetBuffer (bDrawBuffer *buffer);
 void bDrawSetColor (bDrawBuffer *buffer, bDrawColor color);
-void bDrawSetStyle (bDrawBuffer *buffer, bDrawColor color, int lw, int lt);
+void bDrawSetStyle (bDrawBuffer *buffer, bDrawColor color, int lw, int lt, float alpha);
 void bDrawPoint (bDrawBuffer *buffer, int x, int y);
 void bDrawPointf (bDrawBuffer *buffer, float x, float y);
Index: trunk/Ohana/src/libkapa/src/bDrawFuncs.c
===================================================================
--- trunk/Ohana/src/libkapa/src/bDrawFuncs.c	(revision 40557)
+++ trunk/Ohana/src/libkapa/src/bDrawFuncs.c	(revision 40558)
@@ -86,14 +86,30 @@
 }
 
-void bDrawSetStyle (bDrawBuffer *buffer, bDrawColor color, int lw, int lt) {
+void bDrawSetStyle (bDrawBuffer *buffer, bDrawColor color, int lw, int lt, float alpha) {
   bDrawSetColor (buffer, color);
 
   buffer->bWeight = lw;
   buffer->bType = lt;
-  return;
-}
+  buffer->alpha = alpha;
+  return;
+}
+
+// if values were from 0.0 = white to 1.0 = black, the math would be:
+// out = (1 - alpha) * in + alpha * new
+// but values go from 0.0 = black to 1.0 = white
+// rin = 1 - in, rnew = 1 - new
+// rout = (1 - alpha) * (1 - in) + alpha (1 - new)
+// out = 1 - ((1 - alpha) * (1 - in) + alpha (1 - new))
+// out = 1 - ((1 - in - alpha + in * alpha) + alpha - alpha * new)
+// out = 1 - ((1 - in + in*alpha - alpha*new))
+// out = in - in*alpha + alpha*new
 
 // draw a point in the current color 
+// adding in an alpha-channel: out = (1 - alpha) * in + alpha * new
+// bcolor_R,G,B are values in the range 0x00 - 0xff
 void bDrawPoint (bDrawBuffer *buffer, int x, int y) {
+
+  float alpha = buffer->alpha;
+  float beta = (1.0 - alpha);
 
   // myAssert(buffer[0].Nbyte == 1, "invalid depth");
@@ -105,7 +121,10 @@
     buffer[0].pixels[y][x] = buffer->bColor;
   } else {
-    buffer[0].pixels[y][3*x+0] = buffer->bColor_R;
-    buffer[0].pixels[y][3*x+1] = buffer->bColor_G;
-    buffer[0].pixels[y][3*x+2] = buffer->bColor_B;
+    // buffer[0].pixels[y][3*x+0] = buffer->bColor_R;
+    // buffer[0].pixels[y][3*x+1] = buffer->bColor_G;
+    // buffer[0].pixels[y][3*x+2] = buffer->bColor_B;
+    buffer[0].pixels[y][3*x+0] = MAX (0x00, MIN(0xff, beta * buffer[0].pixels[y][3*x+0] + alpha * buffer->bColor_R));
+    buffer[0].pixels[y][3*x+1] = MAX (0x00, MIN(0xff, beta * buffer[0].pixels[y][3*x+1] + alpha * buffer->bColor_G));
+    buffer[0].pixels[y][3*x+2] = MAX (0x00, MIN(0xff, beta * buffer[0].pixels[y][3*x+2] + alpha * buffer->bColor_B));
   }
   return;
@@ -268,4 +287,7 @@
   if (Y >= buffer[0].Ny) return;
 
+  float alpha = buffer->alpha;
+  float beta = (1.0 - alpha);
+
   for (i = X1; i < X2; i++) {
     if (i <  0) continue;
@@ -274,7 +296,10 @@
       buffer[0].pixels[Y][i] = buffer->bColor;
     } else {
-      buffer[0].pixels[Y][3*i+0] = buffer->bColor_R;
-      buffer[0].pixels[Y][3*i+1] = buffer->bColor_G;
-      buffer[0].pixels[Y][3*i+2] = buffer->bColor_B;
+      buffer[0].pixels[Y][3*i+0] = MAX (0x00, MIN(0xff, beta * buffer[0].pixels[Y][3*i+0] + alpha * buffer->bColor_R));
+      buffer[0].pixels[Y][3*i+1] = MAX (0x00, MIN(0xff, beta * buffer[0].pixels[Y][3*i+1] + alpha * buffer->bColor_G));
+      buffer[0].pixels[Y][3*i+2] = MAX (0x00, MIN(0xff, beta * buffer[0].pixels[Y][3*i+2] + alpha * buffer->bColor_B));
+      // buffer[0].pixels[Y][3*i+0] = buffer->bColor_R;
+      // buffer[0].pixels[Y][3*i+1] = buffer->bColor_G;
+      // buffer[0].pixels[Y][3*i+2] = buffer->bColor_B;
     }
   }
@@ -288,4 +313,7 @@
   if (X <  0) return;
   if (X >= buffer[0].Nx) return;
+
+  float alpha = buffer->alpha;
+  float beta = (1.0 - alpha);
 
   for (i = Y1; i < Y2; i++) {
@@ -295,7 +323,10 @@
       buffer[0].pixels[i][X] = buffer->bColor;
     } else {
-      buffer[0].pixels[i][3*X+0] = buffer->bColor_R;
-      buffer[0].pixels[i][3*X+1] = buffer->bColor_G;
-      buffer[0].pixels[i][3*X+2] = buffer->bColor_B;
+      buffer[0].pixels[i][3*X+0] = MAX (0x00, MIN(0xff, beta * buffer[0].pixels[i][3*X+0] + alpha * buffer->bColor_R));
+      buffer[0].pixels[i][3*X+1] = MAX (0x00, MIN(0xff, beta * buffer[0].pixels[i][3*X+1] + alpha * buffer->bColor_G));
+      buffer[0].pixels[i][3*X+2] = MAX (0x00, MIN(0xff, beta * buffer[0].pixels[i][3*X+2] + alpha * buffer->bColor_B));
+      // buffer[0].pixels[i][3*X+0] = buffer->bColor_R;
+      // buffer[0].pixels[i][3*X+1] = buffer->bColor_G;
+      // buffer[0].pixels[i][3*X+2] = buffer->bColor_B;
     }
   }
Index: trunk/Ohana/src/libkapa/src/bDrawRotFont.c
===================================================================
--- trunk/Ohana/src/libkapa/src/bDrawRotFont.c	(revision 40557)
+++ trunk/Ohana/src/libkapa/src/bDrawRotFont.c	(revision 40558)
@@ -189,5 +189,4 @@
   X2 = MAX (X, X2);
 
-  // bDrawSetStyle (color, 0, 0);
   if (scale > 1) {
     for (i = X1; i <= X2; i+=1) {
@@ -215,5 +214,4 @@
     }
   }
-  // bDrawSetStyle (black, 0, 0);
   return (TRUE);
 }
