]> code.delx.au - gnu-emacs/commitdiff
(fringe_bmp): Change to pointer.
authorKim F. Storm <storm@cua.dk>
Wed, 29 Sep 2004 14:23:21 +0000 (14:23 +0000)
committerKim F. Storm <storm@cua.dk>
Wed, 29 Sep 2004 14:23:21 +0000 (14:23 +0000)
(max_fringe_bmp): New var.
(w32_define_fringe_bitmap): Expand fringe_bmp.
(w32_draw_fringe_bitmap): Check max_fringe_bmp.
(w32_destroy_fringe_bitmap): Likewise.

src/w32term.c

index f71736dffad73dea6687871ed3e2d266d9c91570..22d139d9252fde5969949a27a4b20ef019aa327e 100644 (file)
@@ -62,7 +62,8 @@ Boston, MA 02111-1307, USA.  */
 \f
 /* Fringe bitmaps.  */
 
-static HBITMAP fringe_bmp[MAX_FRINGE_BITMAPS];
+static int max_fringe_bmp = 0;
+static HBITMAP *fringe_bmp = 0;
 
 /* Non-nil means Emacs uses toolkit scroll bars.  */
 
@@ -704,7 +705,7 @@ w32_draw_fringe_bitmap (w, row, p)
                     p->bx, p->by, p->nx, p->ny);
     }
 
-  if (p->which)
+  if (p->which && p->which < max_fringe_bmp)
     {
       HBITMAP pixmap = fringe_bmp[p->which];
       HDC compat_hdc;
@@ -767,6 +768,15 @@ w32_define_fringe_bitmap (which, bits, h, wd)
      unsigned short *bits;
      int h, wd;
 {
+  if (which >= max_fringe_bmp)
+    {
+      int i = max_fringe_bmp;
+      max_fringe_bmp = which + 20;
+      fringe_bmp = (HBITMAP *) xrealloc (fringe_bmp, max_fringe_bmp * sizeof (HBITMAP));
+      while (i < max_fringe_bmp)
+       fringe_bmp[i++] = 0;
+    }
+
   fringe_bmp[which] = CreateBitmap (wd, h, 1, 1, bits);
 }
 
@@ -774,6 +784,9 @@ static void
 w32_destroy_fringe_bitmap (which)
      int which;
 {
+  if (which >= max_fringe_bmp)
+    return;
+
   if (fringe_bmp[which])
     DeleteObject (fringe_bmp[which]);
   fringe_bmp[which] = 0;