Introduced a new parameter for ctk_draw_window() that indicates if drawing the window borders is required.

This allows to avoid unnecessary drawing of window borders on calls to ctk_window_redraw() which happen often in the web browser.

Several ctk_draw_window() implementaions don't make use of the new parameter yet.
diff --git a/contiki/ctk/ctk-conio-service.c b/contiki/ctk/ctk-conio-service.c
index f9a5e87..af2bccb 100644
--- a/contiki/ctk/ctk-conio-service.c
+++ b/contiki/ctk/ctk-conio-service.c
@@ -29,7 +29,7 @@
  *
  * This file is part of the "ctk" console GUI toolkit for cc65
  *
- * $Id: ctk-conio-service.c,v 1.5 2005/03/15 14:19:40 oliverschmidt Exp $
+ * $Id: ctk-conio-service.c,v 1.6 2005/03/15 15:51:17 oliverschmidt Exp $
  *
  */
 
@@ -334,7 +334,8 @@
 /*-----------------------------------------------------------------------------------*/
 static void
 s_ctk_draw_window(struct ctk_window *window, unsigned char focus,
-		  unsigned char clipy1, unsigned char clipy2)
+		  unsigned char clipy1, unsigned char clipy2,
+		  unsigned char draw_borders)
 {
   unsigned char x, y;
   unsigned char h;
@@ -346,53 +347,55 @@
     
   x = window->x;
   y = window->y + 1;
-  
-  if(focus & CTK_FOCUS_WINDOW) {
-    textcolor(WINDOWCOLOR_FOCUS);
-  } else {
-    textcolor(WINDOWCOLOR);
-  }
-
   x1 = x + 1;
   y1 = y + 1;
   x2 = x1 + window->w;
   y2 = y1 + window->h;
 
-  /* Draw window frame. */  
-  if(y >= clipy1) {
-    cputcxy(x, y, CH_ULCORNER);
-    gotoxy(wherex() + window->titlelen + 2, wherey());
-    chline(window->w - (wherex() - x) - 2);
-    cputcxy(x2, y, CH_URCORNER);
-  }
+  if(draw_borders) {  
 
-  h = window->h;
+    /* Draw window frame. */
+    if(focus & CTK_FOCUS_WINDOW) {
+      textcolor(WINDOWCOLOR_FOCUS);
+    } else {
+      textcolor(WINDOWCOLOR);
+    }
+
+    if(y >= clipy1) {
+      cputcxy(x, y, CH_ULCORNER);
+      gotoxy(wherex() + window->titlelen + 2, wherey());
+      chline(window->w - (wherex() - x) - 2);
+      cputcxy(x2, y, CH_URCORNER);
+    }
+
+    h = window->h;
   
-  if(clipy1 > y1) {
-    if(clipy1 - y1 < h) {
-      h = clipy1 - y1;
-            y1 = clipy1;
-    } else {
-      h = 0;
+    if(clipy1 > y1) {
+      if(clipy1 - y1 < h) {
+	h = clipy1 - y1;
+	      y1 = clipy1;
+      } else {
+	h = 0;
+      }
     }
-  }
 
-  if(clipy2 < y1 + h) {
-    if(y1 >= clipy2) {
-      h = 0;
-    } else {
-      h = clipy2 - y1;
+    if(clipy2 < y1 + h) {
+      if(y1 >= clipy2) {
+	h = 0;
+      } else {
+	h = clipy2 - y1;
+      }
     }
-  }
 
-  cvlinexy(x, y1, h);
-  cvlinexy(x2, y1, h);  
+    cvlinexy(x, y1, h);
+    cvlinexy(x2, y1, h);  
 
-  if(y + window->h >= clipy1 &&
-     y + window->h < clipy2) {
-    cputcxy(x, y2, CH_LLCORNER);
-    chlinexy(x1, y2, window->w);
-    cputcxy(x2, y2, CH_LRCORNER);
+    if(y + window->h >= clipy1 &&
+       y + window->h < clipy2) {
+      cputcxy(x, y2, CH_LLCORNER);
+      chlinexy(x1, y2, window->w);
+      cputcxy(x2, y2, CH_LRCORNER);
+    }
   }
 
   draw_window_contents(window, focus, clipy1, clipy2,
diff --git a/contiki/ctk/ctk-conio.c b/contiki/ctk/ctk-conio.c
index e40d4a8..8106ee5 100644
--- a/contiki/ctk/ctk-conio.c
+++ b/contiki/ctk/ctk-conio.c
@@ -29,7 +29,7 @@
  *
  * This file is part of the "ctk" console GUI toolkit for cc65
  *
- * $Id: ctk-conio.c,v 1.17 2005/03/15 14:19:41 oliverschmidt Exp $
+ * $Id: ctk-conio.c,v 1.18 2005/03/15 15:51:17 oliverschmidt Exp $
  *
  */
 
@@ -335,7 +335,8 @@
 /*-----------------------------------------------------------------------------------*/
 void
 ctk_draw_window(struct ctk_window *window, unsigned char focus,
-		unsigned char clipy1, unsigned char clipy2)
+		unsigned char clipy1, unsigned char clipy2,
+		unsigned char draw_borders)
 {
   unsigned char x, y;
   unsigned char h;
@@ -347,53 +348,55 @@
     
   x = window->x;
   y = window->y + 1;
-  
-  if(focus & CTK_FOCUS_WINDOW) {
-    textcolor(WINDOWCOLOR_FOCUS);
-  } else {
-    textcolor(WINDOWCOLOR);
-  }
-
   x1 = x + 1;
   y1 = y + 1;
   x2 = x1 + window->w;
   y2 = y1 + window->h;
 
-  /* Draw window frame. */  
-  if(y >= clipy1) {
-    cputcxy(x, y, CH_ULCORNER);
-    gotoxy(wherex() + window->titlelen + 2, wherey());
-    chline(window->w - (wherex() - x) - 2);
-    cputcxy(x2, y, CH_URCORNER);
-  }
+  if(draw_borders) {
 
-  h = window->h;
+    /* Draw window frame. */  
+    if(focus & CTK_FOCUS_WINDOW) {
+      textcolor(WINDOWCOLOR_FOCUS);
+    } else {
+      textcolor(WINDOWCOLOR);
+    }
+
+    if(y >= clipy1) {
+      cputcxy(x, y, CH_ULCORNER);
+      gotoxy(wherex() + window->titlelen + 2, wherey());
+      chline(window->w - (wherex() - x) - 2);
+      cputcxy(x2, y, CH_URCORNER);
+    }
+
+    h = window->h;
   
-  if(clipy1 > y1) {
-    if(clipy1 - y1 < h) {
-      h = clipy1 - y1;
-            y1 = clipy1;
-    } else {
-      h = 0;
+    if(clipy1 > y1) {
+      if(clipy1 - y1 < h) {
+	h = clipy1 - y1;
+	      y1 = clipy1;
+      } else {
+	h = 0;
+      }
     }
-  }
 
-  if(clipy2 < y1 + h) {
-    if(y1 >= clipy2) {
-      h = 0;
-    } else {
-      h = clipy2 - y1;
+    if(clipy2 < y1 + h) {
+      if(y1 >= clipy2) {
+	h = 0;
+      } else {
+	h = clipy2 - y1;
+      }
     }
-  }
 
-  cvlinexy(x, y1, h);
-  cvlinexy(x2, y1, h);  
+    cvlinexy(x, y1, h);
+    cvlinexy(x2, y1, h);  
 
-  if(y + window->h >= clipy1 &&
-     y + window->h < clipy2) {
-    cputcxy(x, y2, CH_LLCORNER);
-    chlinexy(x1, y2, window->w);
-    cputcxy(x2, y2, CH_LRCORNER);
+    if(y + window->h >= clipy1 &&
+       y + window->h < clipy2) {
+      cputcxy(x, y2, CH_LLCORNER);
+      chlinexy(x1, y2, window->w);
+      cputcxy(x2, y2, CH_LRCORNER);
+    }
   }
 
   draw_window_contents(window, focus, clipy1, clipy2,
diff --git a/contiki/ctk/ctk-draw-service.h b/contiki/ctk/ctk-draw-service.h
index d0e572a..8b19768 100644
--- a/contiki/ctk/ctk-draw-service.h
+++ b/contiki/ctk/ctk-draw-service.h
@@ -30,7 +30,7 @@
  * 
  * Author: Adam Dunkels <adam@sics.se>
  *
- * $Id: ctk-draw-service.h,v 1.3 2004/09/12 20:24:55 adamdunkels Exp $
+ * $Id: ctk-draw-service.h,v 1.4 2005/03/15 15:51:17 oliverschmidt Exp $
  */
 #ifndef __CTK_DRAW_SERVICE_H__
 #define __CTK_DRAW_SERVICE_H__
@@ -56,7 +56,8 @@
   void (* draw_window)(struct ctk_window *window,
 		       unsigned char focus,
 		       unsigned char clipy1,
-		       unsigned char clipy2);
+		       unsigned char clipy2,
+		       unsigned char draw_borders);
   void (* draw_dialog)(struct ctk_window *dialog);
   void (* draw_widget)(struct ctk_widget *widget,
 		       unsigned char focus,
diff --git a/contiki/ctk/ctk-draw.c b/contiki/ctk/ctk-draw.c
index 33af1e2..7e0827a 100644
--- a/contiki/ctk/ctk-draw.c
+++ b/contiki/ctk/ctk-draw.c
@@ -30,7 +30,7 @@
  * 
  * Author: Adam Dunkels <adam@sics.se>
  *
- * $Id: ctk-draw.c,v 1.4 2004/09/12 20:24:55 adamdunkels Exp $
+ * $Id: ctk-draw.c,v 1.5 2005/03/15 15:51:17 oliverschmidt Exp $
  */
 
 #include "ek-service.h"
@@ -101,12 +101,13 @@
 ctk_draw_window(struct ctk_window *window,
 		unsigned char focus,
 		unsigned char clipy1,
-		unsigned char clipy2)
+		unsigned char clipy2,
+		unsigned char draw_borders)
 {
   struct ctk_draw_service_interface *interface;
   
   if((interface = find_interface()) != NULL) {   
-    interface->draw_window(window, focus, clipy1, clipy2);
+    interface->draw_window(window, focus, clipy1, clipy2, draw_borders);
   }
 }
 /*---------------------------------------------------------------------------*/
diff --git a/contiki/ctk/ctk-draw.h b/contiki/ctk/ctk-draw.h
index 5783d71..c0ba064 100644
--- a/contiki/ctk/ctk-draw.h
+++ b/contiki/ctk/ctk-draw.h
@@ -45,7 +45,7 @@
  *
  * This file is part of the Contiki desktop OS.
  *
- * $Id: ctk-draw.h,v 1.6 2004/07/04 11:40:04 adamdunkels Exp $
+ * $Id: ctk-draw.h,v 1.7 2005/03/15 15:51:17 oliverschmidt Exp $
  *
  */
 
@@ -95,8 +95,10 @@
  * screen through the function ctk_draw_window().. A pseudo-code
  * implementation of this  function might look like this:
  * \code
-   ctk_draw_window(window, focus, clipy1, clipy2) {
-      draw_window_borders(window, focus, clipy1, clipy2);
+   ctk_draw_window(window, focus, clipy1, clipy2, draw_borders) {
+      if(draw_borders) {
+         draw_window_borders(window, focus, clipy1, clipy2);
+      }
       foreach(widget, window->inactive) {
          ctk_draw_widget(widget, focus, clipy1, clipy2);
       }
@@ -205,7 +207,8 @@
 void ctk_draw_window(struct ctk_window *window,
 		     unsigned char focus,
 		     unsigned char clipy1,
-		     unsigned char clipy2);
+		     unsigned char clipy2,
+		     unsigned char draw_borders);
 
 
 /**
diff --git a/contiki/ctk/ctk-term.c b/contiki/ctk/ctk-term.c
index c83f64d..b66b268 100644
--- a/contiki/ctk/ctk-term.c
+++ b/contiki/ctk/ctk-term.c
@@ -694,7 +694,8 @@
 /*-----------------------------------------------------------------------------------*/
 void
 ctk_draw_window(struct ctk_window *window, unsigned char focus,
-		unsigned char clipy1, unsigned char clipy2)
+		unsigned char clipy1, unsigned char clipy2,
+		unsigned char draw_borders)
 {
   unsigned char x, y;
   unsigned char h;
@@ -708,54 +709,56 @@
     
   x = window->x;
   y = window->y + 1;
-
-  textcolor((unsigned char)(TERM_WINDOWCOLOR + focus));
-
   x1 = x + 1;
   y1 = y + 1;
   x2 = x1 + window->w;
   y2 = y1 + window->h;
 
-  /* Draw window frame. */  
-  if(y >= clipy1) {
-    cputcxy(x, y, CH_ULCORNER);
-    for(i = wherex() + window->titlelen + 2; i < x2; ++i) {
-      cputcxy(i, y, CH_TITLEBAR);
-    }
-    cputcxy(x2, y, CH_URCORNER);
-  }
+  if(draw_borders) {
 
-  h = window->h;
-  
-  if(clipy1 > y1) {
-    if(clipy1 - y1 < h) {
-      h = clipy1 - y1;
-      y1 = clipy1;
-    } else {
-      h = 0;
-    }
-  }
-  
-  if(clipy2 < y1 + h) {
-    if(y1 >= clipy2) {
-      h = 0;
-    } else {
-      h = clipy2 - y1;
-    }
-  }
-  
-  for(i = y1; i < y1 + h; ++i) {
-    cputcxy(x, i, CH_WINDOWLBORDER);
-    cputcxy(x2, i, CH_WINDOWRBORDER);
-  }
+    /* Draw window frame. */  
+    textcolor((unsigned char)(TERM_WINDOWCOLOR + focus));
 
-  if(y2 >= clipy1 &&
-     y2 < clipy2) {
-    cputcxy(x, y2, CH_LLCORNER);
-    for(i = x1; i < x2; ++i) {
-      cputcxy(i, y2, CH_WINDOWLOWERBORDER);
+    if(y >= clipy1) {
+      cputcxy(x, y, CH_ULCORNER);
+      for(i = wherex() + window->titlelen + 2; i < x2; ++i) {
+	cputcxy(i, y, CH_TITLEBAR);
+      }
+      cputcxy(x2, y, CH_URCORNER);
     }
-    cputcxy(x2, y2, CH_LRCORNER);
+
+    h = window->h;
+  
+    if(clipy1 > y1) {
+      if(clipy1 - y1 < h) {
+	h = clipy1 - y1;
+	y1 = clipy1;
+      } else {
+	h = 0;
+      }
+    }
+  
+    if(clipy2 < y1 + h) {
+      if(y1 >= clipy2) {
+	h = 0;
+      } else {
+	h = clipy2 - y1;
+      }
+    }
+  
+    for(i = y1; i < y1 + h; ++i) {
+      cputcxy(x, i, CH_WINDOWLBORDER);
+      cputcxy(x2, i, CH_WINDOWRBORDER);
+    }
+
+    if(y2 >= clipy1 &&
+       y2 < clipy2) {
+      cputcxy(x, y2, CH_LLCORNER);
+      for(i = x1; i < x2; ++i) {
+	cputcxy(i, y2, CH_WINDOWLOWERBORDER);
+      }
+      cputcxy(x2, y2, CH_LRCORNER);
+    }
   }
 
   draw_window_contents(window, focus, clipy1, clipy2,
diff --git a/contiki/ctk/ctk-vncserver.c b/contiki/ctk/ctk-vncserver.c
index 591136d..63a772a 100644
--- a/contiki/ctk/ctk-vncserver.c
+++ b/contiki/ctk/ctk-vncserver.c
@@ -41,7 +41,7 @@
  *
  * This file is part of the "ctk" console GUI toolkit for cc65
  *
- * $Id: ctk-vncserver.c,v 1.11 2004/12/27 22:03:04 oliverschmidt Exp $
+ * $Id: ctk-vncserver.c,v 1.12 2005/03/15 15:51:17 oliverschmidt Exp $
  *
  */
 
@@ -666,7 +666,8 @@
 /*-----------------------------------------------------------------------------------*/
 void
 ctk_draw_window(struct ctk_window *window, unsigned char focus,
-		unsigned char clipy1, unsigned char clipy2)
+		unsigned char clipy1, unsigned char clipy2,
+		unsigned char draw_borders)
 {
   unsigned char x, y;
   unsigned char h;
@@ -680,63 +681,65 @@
     
   x = window->x;
   y = window->y + 1;
-
-  textcolor(VNC_OUT_WINDOWCOLOR + focus);
-  /*  if(focus & CTK_FOCUS_WINDOW) {
-    textcolor(WINDOWCOLOR_FOCUS);
-  } else {
-    textcolor(WINDOWCOLOR);
-    }*/
-
   x1 = x + 1;
   y1 = y + 1;
   x2 = x1 + window->w;
   y2 = y1 + window->h;
 
-  /* Draw window frame. */  
-  if(y >= clipy1) {
-    cputcxy(x, y, CH_ULCORNER);
-    for(i = wherex() + window->titlelen + 2; i < x2; ++i) {
-      cputcxy(i, y, CH_TITLEBAR);
-    }
-    cputcxy(x2, y, CH_URCORNER);
-  }
+  if(draw_borders) {
 
-  h = window->h;
-  
-  if(clipy1 > y1) {
-    if(clipy1 - y1 < h) {
-      h = clipy1 - y1;
-            y1 = clipy1;
+    /* Draw window frame. */  
+    textcolor(VNC_OUT_WINDOWCOLOR + focus);
+    /*  if(focus & CTK_FOCUS_WINDOW) {
+      textcolor(WINDOWCOLOR_FOCUS);
     } else {
-      h = 0;
-    }
-  }
+      textcolor(WINDOWCOLOR);
+      }*/
 
-  if(clipy2 < y1 + h) {
-    if(y1 >= clipy2) {
-      h = 0;
-    } else {
-      h = clipy2 - y1;
+    if(y >= clipy1) {
+      cputcxy(x, y, CH_ULCORNER);
+      for(i = wherex() + window->titlelen + 2; i < x2; ++i) {
+	cputcxy(i, y, CH_TITLEBAR);
+      }
+      cputcxy(x2, y, CH_URCORNER);
     }
-  }
+
+    h = window->h;
   
-  for(i = y1; i < y1 + h; ++i) {
-    cputcxy(x, i, CH_WINDOWLBORDER);
-    cputcxy(x2, i, CH_WINDOWRBORDER);
-  }
-
-  /*  cvlinexy(x, y1, h);
-      cvlinexy(x2, y1, h);  */
-
-  if(y + window->h >= clipy1 &&
-     y + window->h < clipy2) {
-    cputcxy(x, y2, CH_LLCORNER);
-    for(i = x1; i < x2; ++i) {
-      cputcxy(i, y2, CH_WINDOWLOWERBORDER);
+    if(clipy1 > y1) {
+      if(clipy1 - y1 < h) {
+	h = clipy1 - y1;
+	      y1 = clipy1;
+      } else {
+	h = 0;
+      }
     }
-    /*    chlinexy(x1, y2, window->w);*/
-    cputcxy(x2, y2, CH_LRCORNER);
+
+    if(clipy2 < y1 + h) {
+      if(y1 >= clipy2) {
+	h = 0;
+      } else {
+	h = clipy2 - y1;
+      }
+    }
+  
+    for(i = y1; i < y1 + h; ++i) {
+      cputcxy(x, i, CH_WINDOWLBORDER);
+      cputcxy(x2, i, CH_WINDOWRBORDER);
+    }
+
+    /*  cvlinexy(x, y1, h);
+	cvlinexy(x2, y1, h);  */
+
+    if(y + window->h >= clipy1 &&
+       y + window->h < clipy2) {
+      cputcxy(x, y2, CH_LLCORNER);
+      for(i = x1; i < x2; ++i) {
+	cputcxy(i, y2, CH_WINDOWLOWERBORDER);
+      }
+      /*    chlinexy(x1, y2, window->w);*/
+      cputcxy(x2, y2, CH_LRCORNER);
+    }
   }
 
   draw_window_contents(window, focus, clipy1, clipy2,
diff --git a/contiki/ctk/ctk.c b/contiki/ctk/ctk.c
index 701035a..7901536 100644
--- a/contiki/ctk/ctk.c
+++ b/contiki/ctk/ctk.c
@@ -43,7 +43,7 @@
  *
  * This file is part of the Contiki operating system.
  *
- * $Id: ctk.c,v 1.44 2004/12/27 22:03:04 oliverschmidt Exp $
+ * $Id: ctk.c,v 1.45 2005/03/15 15:51:17 oliverschmidt Exp $
  *
  */
 
@@ -646,7 +646,7 @@
     /* Draw the windows from back to front. */
     for(; w != windows; w = w->prev) {
       ctk_draw_clear_window(w, 0, clipy1, clipy2);
-      ctk_draw_window(w, 0, clipy1, clipy2);
+      ctk_draw_window(w, 0, clipy1, clipy2, 1);
     }
 
     /* Draw focused window */
@@ -654,7 +654,7 @@
 	    CTK_FOCUS_WIDGET|CTK_FOCUS_WINDOW:
 	    CTK_FOCUS_WINDOW;
     ctk_draw_clear_window(windows, focus, clipy1, clipy2);
-    ctk_draw_window(windows, focus, clipy1, clipy2);
+    ctk_draw_window(windows, focus, clipy1, clipy2, 1);
   }
 
   /* Draw dialog (if any) */
@@ -716,7 +716,7 @@
 #endif /* CTK_CONF_MENUS */		    
 	    windows == w) {
     ctk_draw_window(w, CTK_FOCUS_WINDOW,
-		    0, height);
+		    0, height, 0);
   }  
 }
 /*-----------------------------------------------------------------------------------*/
diff --git a/contiki/doc/ctk.txt b/contiki/doc/ctk.txt
index 6748d3d..a2fa85c 100644
--- a/contiki/doc/ctk.txt
+++ b/contiki/doc/ctk.txt
@@ -3,7 +3,7 @@
 so-called ctk-draw and ctk-arch layers).
 
 Author: Adam Dunkels <adam@dunkels.com>
-Version: $Id: ctk.txt,v 1.2 2003/04/02 09:54:00 adamdunkels Exp $
+Version: $Id: ctk.txt,v 1.3 2005/03/15 15:53:51 oliverschmidt Exp $
 
 
 * Introduction *
@@ -83,7 +83,8 @@
    void ctk_draw_window(struct ctk_window *window,
                         unsigned char focus,
                         unsigned char clipy1,
-                        unsigned char clipy2);
+                        unsigned char clipy2,
+			unsigned char draw_borders);
    void ctk_draw_dialog(struct ctk_window *dialog);
    void ctk_draw_widget(struct ctk_widget *w,
                         unsigned char focus,
@@ -229,7 +230,8 @@
    void ctk_draw_window(struct ctk_window *window,
                         unsigned char focus,
                         unsigned char clipy1,
-                        unsigned char clipy2);
+                        unsigned char clipy2,
+			unsigned char draw_borders);
 
 The "clipy1" and "clipy2" parameters specify the first and last + 1
 lines on screen that actually should be drawn (if clipy1 = 2 and
@@ -242,6 +244,8 @@
 CTK_FOCUS_WINDOW. Windows with a focus of CTK_FOCUS_WINDOW is usually
 drawn in a brighter color than those with CTK_FOCUS_NONE.
 
+The draw_borders parameter specifies if the window frame should be drawn.
+
 Finally, the "window" parameter gives the actual window to be
 drawn. This is specified as a struct ctk_window, which is defined in
 the file ctk/ctk.h as:
@@ -290,8 +294,10 @@
 A pseudo-code implementation of a ctk_draw_window() function might
 look like this:
 
-   ctk_draw_window(window, focus, clipy1, clipy2) {
-      draw_window_borders(window, focus, clipy1, clipy2);
+   ctk_draw_window(window, focus, clipy1, clipy2, draw_borders) {
+      if(draw_borders) {
+         draw_window_borders(window, focus, clipy1, clipy2);
+      }
       foreach(widget, window->inactive) {
          draw_widget(widget, focus, clipy1, clipy2);
       }