-- Leo's gemini proxy

-- Connecting to git.thebackupbox.net:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini

repo: rxvt-unicode-sixel
action: commit
revision:
path_from:
revision_from: 3211f326b90a1d4208153207a0c7259f821c6b93:
path_to:
revision_to:

git.thebackupbox.net

rxvt-unicode-sixel

git://git.thebackupbox.net/rxvt-unicode-sixel

commit 3211f326b90a1d4208153207a0c7259f821c6b93
Author: Emanuele Giaquinta <emanuele.giaquinta@gmail.com>
Date:   Tue Feb 19 13:01:33 2008 +0000

    Move scrollbar GCs and scrollbar_show_* from rxvt_term to scrollBar_t.

diff --git a/src/main.C b/src/main.C

index c6cf97387c6d8d0b2b5284f45fe08c7d8a0abc38..

index ..f57706dd296d12e78db027a2d1acb937d249c924 100644

--- a/src/main.C
+++ b/src/main.C
@@ -237,30 +237,7 @@ rxvt_term::~rxvt_term ()
 #ifdef USE_XIM
       im_destroy ();
 #endif
-#ifdef XTERM_SCROLLBAR
-      if (xscrollbarGC) XFreeGC (dpy, xscrollbarGC);
-      if (ShadowGC)     XFreeGC (dpy, ShadowGC);
-#endif
-#ifdef PLAIN_SCROLLBAR
-      if (pscrollbarGC) XFreeGC (dpy, pscrollbarGC);
-#endif
-#ifdef NEXT_SCROLLBAR
-      if (blackGC)      XFreeGC (dpy, blackGC);
-      if (whiteGC)      XFreeGC (dpy, whiteGC);
-      if (grayGC)       XFreeGC (dpy, grayGC);
-      if (darkGC)       XFreeGC (dpy, darkGC);
-      if (stippleGC)    XFreeGC (dpy, stippleGC);
-      if (dimple)       XFreePixmap (dpy, dimple);
-      if (upArrow)      XFreePixmap (dpy, upArrow);
-      if (downArrow)    XFreePixmap (dpy, downArrow);
-      if (upArrowHi)    XFreePixmap (dpy, upArrowHi);
-      if (downArrowHi)  XFreePixmap (dpy, downArrowHi);
-#endif
-#ifdef RXVT_SCROLLBAR
-      if (topShadowGC)  XFreeGC (dpy, topShadowGC);
-      if (botShadowGC)  XFreeGC (dpy, botShadowGC);
-      if (scrollbarGC)  XFreeGC (dpy, scrollbarGC);
-#endif
+      scrollBar.destroy ();
       if (gc)   XFreeGC (dpy, gc);

       delete drawable;
diff --git a/src/rxvt.h b/src/rxvt.h

index db8ae85bdeb09f0d0324d84bbcb1d1fc717d4239..

index ..69618eab1335f0ee92bd2dad9de548ea5055ae2b 100644

--- a/src/rxvt.h
+++ b/src/rxvt.h
@@ -1008,31 +1008,6 @@ struct rxvt_term : zero_initialized, rxvt_vars, rxvt_screen {
                   SavedModes;
 /* ---------- */
   Atom            *xa;
-/* ---------- */
-#ifdef RXVT_SCROLLBAR
-  GC              scrollbarGC,
-                  topShadowGC,
-                  botShadowGC;
-#endif
-#ifdef XTERM_SCROLLBAR
-  GC              xscrollbarGC,
-                  ShadowGC;
-#endif
-#ifdef PLAIN_SCROLLBAR
-  GC              pscrollbarGC;
-#endif
-#ifdef NEXT_SCROLLBAR
-  GC              blackGC,
-                  whiteGC,
-                  grayGC,
-                  darkGC,
-                  stippleGC;
-  Pixmap          dimple,
-                  upArrow,
-                  downArrow,
-                  upArrowHi,
-                  downArrowHi;
-#endif
 /* ---------- */
   Time            selection_time,
                   selection_request_time;
@@ -1443,29 +1418,6 @@ struct rxvt_term : zero_initialized, rxvt_vars, rxvt_screen {
   void selection_extend (int x, int y, int flag) NOTHROW;
   void selection_rotate (int x, int y) NOTHROW;

-#if defined(NEXT_SCROLLBAR)
-  // scrollbar-next.C
-  Pixmap renderPixmap (const char *const *data, int width, int height);
-  void init_scrollbar_stuff ();
-  void drawBevel (Drawable d, int x1, int y1, int w, int h);
-  int scrollbar_show_next (int update, int last_top, int last_bot, int scrollbar_len);
-#endif
-
-#if defined(RXVT_SCROLLBAR)
-  // scrollbar-rxvt.C
-  int scrollbar_show_rxvt (int update, int last_top, int last_bot, int scrollbar_len);
-#endif
-
-#if defined(XTERM_SCROLLBAR)
-  // scrollbar-xterm.C
-  int scrollbar_show_xterm (int update, int last_top, int last_bot, int scrollbar_len);
-#endif
-
-#if defined(PLAIN_SCROLLBAR)
-  // scrollbar-plain.C
-  int scrollbar_show_plain (int update, int last_top, int last_bot, int scrollbar_len);
-#endif
-
   // xdefaults.C
   void get_options (int argc, const char *const *argv);
   int parse_keysym (const char *str, const char *arg);
diff --git a/src/scrollbar-next.C b/src/scrollbar-next.C

index ea1fb0720dfac1cc3cc3ac4b4463768e72287ddf..

index ..2d2d60ba285a156559b2fa106399e8d7736f37eb 100644

--- a/src/scrollbar-next.C
+++ b/src/scrollbar-next.C
@@ -115,37 +115,37 @@ const char     *const HI_SCROLLER_ARROW_DOWN[] =
     "             "
   };

-Pixmap
-rxvt_term::renderPixmap (const char *const *data, int width, int height)
+static Pixmap
+renderPixmap (scrollBar_t *sb, const char *const *data, int width, int height)
 {
   char            a;
   int             x, y;
   Pixmap          d;
   GC              pointcolour;

-  d = XCreatePixmap (dpy, scrollBar.win, width, height, depth);
+  d = XCreatePixmap (sb->term->dpy, sb->win, width, height, sb->term->depth);

   for (y = 0; y < height; y++)
     {
       for (x = 0; x < width; x++)
         {
           if ((a = data[y][x]) == ' ' || a == 'w')
-            pointcolour = whiteGC;
+            pointcolour = sb->whiteGC;
           else if (a == '.' || a == 'l')
-            pointcolour = grayGC;
+            pointcolour = sb->grayGC;
           else if (a == '%' || a == 'd')
-            pointcolour = darkGC;
+            pointcolour = sb->darkGC;
           else		/* if (a == '#' || a == 'b' || a) */
-            pointcolour = blackGC;
+            pointcolour = sb->blackGC;

-          XDrawPoint (dpy, d, pointcolour, x, y);
+          XDrawPoint (sb->term->dpy, d, pointcolour, x, y);
         }
     }
   return d;
 }

 void
-rxvt_term::init_scrollbar_stuff ()
+scrollBar_t::init_next ()
 {
   XGCValues       gcvalue;
   XColor          xcol;
@@ -154,32 +154,32 @@ rxvt_term::init_scrollbar_stuff ()

   gcvalue.graphics_exposures = False;

-  gcvalue.foreground = pix_colors_focused[Color_Black];
-  blackGC = XCreateGC (dpy, scrollBar.win,
+  gcvalue.foreground = term->pix_colors_focused[Color_Black];
+  blackGC = XCreateGC (term->dpy, win,
                        GCForeground | GCGraphicsExposures, &gcvalue);

-  gcvalue.foreground = pix_colors_focused[Color_White];
-  whiteGC = XCreateGC (dpy, scrollBar.win,
+  gcvalue.foreground = term->pix_colors_focused[Color_White];
+  whiteGC = XCreateGC (term->dpy, win,
                        GCForeground | GCGraphicsExposures, &gcvalue);

   xcol.red = 0xaeba;
   xcol.green = 0xaaaa;
   xcol.blue = 0xaeba;
-  xcol.pixel = pix_colors_focused[Color_scroll];
+  xcol.pixel = term->pix_colors_focused[Color_scroll];
   light = gcvalue.foreground = xcol.pixel;
-  grayGC = XCreateGC (dpy, scrollBar.win,
+  grayGC = XCreateGC (term->dpy, win,
                       GCForeground | GCGraphicsExposures, &gcvalue);

   xcol.red = 0x51aa;
   xcol.green = 0x5555;
   xcol.blue = 0x5144;
   //if (!rXAllocColor (&xcol, "dark gray"))//TODO//D//
-  xcol.pixel = pix_colors_focused[Color_Grey25];
+  xcol.pixel = term->pix_colors_focused[Color_Grey25];
   dark = gcvalue.foreground = xcol.pixel;
-  darkGC = XCreateGC (dpy, scrollBar.win,
+  darkGC = XCreateGC (term->dpy, win,
                      GCForeground | GCGraphicsExposures, &gcvalue);

-  stipple = XCreateBitmapFromData (dpy, scrollBar.win,
+  stipple = XCreateBitmapFromData (term->dpy, win,
                                    (char *)n_stp_bits, n_stp_width,
                                    n_stp_height);

@@ -190,105 +190,107 @@ rxvt_term::init_scrollbar_stuff ()

   /*    XSetWindowBackground (dpy, scrollBar.win, pix_colors_focused[Color_Red]); */

-  stippleGC = XCreateGC (dpy, scrollBar.win,
+  stippleGC = XCreateGC (term->dpy, win,
                          GCForeground | GCBackground | GCStipple
                          | GCFillStyle | GCGraphicsExposures, &gcvalue);

-  dimple = renderPixmap (SCROLLER_DIMPLE, SCROLLER_DIMPLE_WIDTH,
+  dimple = renderPixmap (this, SCROLLER_DIMPLE, SCROLLER_DIMPLE_WIDTH,
                          SCROLLER_DIMPLE_HEIGHT);

-  upArrow = renderPixmap (SCROLLER_ARROW_UP, ARROW_WIDTH,
+  upArrow = renderPixmap (this, SCROLLER_ARROW_UP, ARROW_WIDTH,
                           ARROW_HEIGHT);
-  downArrow = renderPixmap (SCROLLER_ARROW_DOWN, ARROW_WIDTH,
+  downArrow = renderPixmap (this, SCROLLER_ARROW_DOWN, ARROW_WIDTH,
                             ARROW_HEIGHT);
-  upArrowHi = renderPixmap (HI_SCROLLER_ARROW_UP, ARROW_WIDTH,
+  upArrowHi = renderPixmap (this, HI_SCROLLER_ARROW_UP, ARROW_WIDTH,
                             ARROW_HEIGHT);
-  downArrowHi = renderPixmap (HI_SCROLLER_ARROW_DOWN,
+  downArrowHi = renderPixmap (this, HI_SCROLLER_ARROW_DOWN,
                               ARROW_WIDTH, ARROW_HEIGHT);
 }

 /* Draw bevel & arrows */
-void
-rxvt_term::drawBevel (Drawable d, int x1, int y1, int w, int h)
+static void
+drawBevel (scrollBar_t *sb, int x1, int y1, int w, int h)
 {
   int x2, y2;
+  Drawable d = sb->win;
+  Display *dpy = sb->term->dpy;

   x2 = x1 + w - 1;		/* right  point */
   y2 = y1 + h - 1;		/* bottom point */
   /* white top and left */
-  XDrawLine (dpy, d, whiteGC, x1, y1, x2, y1);
-  XDrawLine (dpy, d, whiteGC, x1, y1, x1, y2);
+  XDrawLine (dpy, d, sb->whiteGC, x1, y1, x2, y1);
+  XDrawLine (dpy, d, sb->whiteGC, x1, y1, x1, y2);
   /* black bottom and right */
-  XDrawLine (dpy, d, blackGC, x1, y2, x2, y2);
-  XDrawLine (dpy, d, blackGC, x2, y1, x2, y2);
+  XDrawLine (dpy, d, sb->blackGC, x1, y2, x2, y2);
+  XDrawLine (dpy, d, sb->blackGC, x2, y1, x2, y2);
   /* dark inside bottom and right */
   x1++, y1++, x2--, y2--;	/* move in one point */
-  XDrawLine (dpy, d, darkGC, x1, y2, x2, y2);
-  XDrawLine (dpy, d, darkGC, x2, y1, x2, y2);
+  XDrawLine (dpy, d, sb->darkGC, x1, y2, x2, y2);
+  XDrawLine (dpy, d, sb->darkGC, x2, y1, x2, y2);
 }

 int
-rxvt_term::scrollbar_show_next (int update, int last_top, int last_bot, int scrollbar_len)
+scrollBar_t::show_next (int update)
 {
-  int height = scrollBar.end + SB_BUTTON_TOTAL_HEIGHT + SB_PADDING;
+  int height = end + SB_BUTTON_TOTAL_HEIGHT + SB_PADDING;
   Drawable src;

-  if ((scrollBar.init & R_SB_NEXT) == 0)
+  if ((init & R_SB_NEXT) == 0)
     {
-      scrollBar.init |= R_SB_NEXT;
-      init_scrollbar_stuff ();
+      init |= R_SB_NEXT;
+      init_next ();
     }

-  if (top_row == 0 || !update)
+  if (term->top_row == 0 || !update)
     {
-      XFillRectangle (dpy, scrollBar.win, grayGC, 0, 0,
+      XFillRectangle (term->dpy, win, grayGC, 0, 0,
                       SB_WIDTH_NEXT + 1, height);
-      XDrawRectangle (dpy, scrollBar.win, blackGC, 0,
+      XDrawRectangle (term->dpy, win, blackGC, 0,
                       -SB_BORDER_WIDTH, SB_WIDTH_NEXT,
                       height + SB_BORDER_WIDTH);
-      XFillRectangle (dpy, scrollBar.win, stippleGC,
+      XFillRectangle (term->dpy, win, stippleGC,
                       SB_LEFT_PADDING, 0, SB_BUTTON_WIDTH, height);
     }

-  if (top_row)
+  if (term->top_row)
     {
-      if (last_top < scrollBar.top || !update)
-        XFillRectangle (dpy, scrollBar.win, stippleGC,
+      if (last_top < top || !update)
+        XFillRectangle (term->dpy, win, stippleGC,
                         SB_LEFT_PADDING, SB_PADDING + last_top,
-                        SB_BUTTON_WIDTH, scrollBar.top - last_top);
+                        SB_BUTTON_WIDTH, top - last_top);

-      if (scrollBar.bot < last_bot || !update)
-        XFillRectangle (dpy, scrollBar.win, stippleGC,
-                        SB_LEFT_PADDING, scrollBar.bot + SB_PADDING,
-                        SB_BUTTON_WIDTH, (last_bot - scrollBar.bot));
+      if (bot < last_bot || !update)
+        XFillRectangle (term->dpy, win, stippleGC,
+                        SB_LEFT_PADDING, bot + SB_PADDING,
+                        SB_BUTTON_WIDTH, (last_bot - bot));

-      XFillRectangle (dpy, scrollBar.win, grayGC,
-                      SB_LEFT_PADDING, scrollBar.top + SB_PADDING,
-                      SB_BUTTON_WIDTH, scrollbar_len);
+      XFillRectangle (term->dpy, win, grayGC,
+                      SB_LEFT_PADDING, top + SB_PADDING,
+                      SB_BUTTON_WIDTH, len);

-      XCopyArea (dpy, dimple, scrollBar.win, whiteGC, 0, 0,
+      XCopyArea (term->dpy, dimple, win, whiteGC, 0, 0,
                  SCROLLER_DIMPLE_WIDTH, SCROLLER_DIMPLE_HEIGHT,
                  (SB_WIDTH_NEXT - SCROLLER_DIMPLE_WIDTH) / 2,
-                 scrollBar.top + SB_BEVEL_WIDTH_UPPER_LEFT +
-                 (scrollbar_len - SCROLLER_DIMPLE_HEIGHT) / 2);
+                 top + SB_BEVEL_WIDTH_UPPER_LEFT +
+                 (len - SCROLLER_DIMPLE_HEIGHT) / 2);

-      drawBevel (scrollBar.win, SB_BUTTON_BEVEL_X,
-                 scrollBar.top + SB_PADDING, SB_BUTTON_WIDTH,
-                 scrollbar_len);
-      drawBevel (scrollBar.win, SB_BUTTON_BEVEL_X,
+      drawBevel (this, SB_BUTTON_BEVEL_X,
+                 top + SB_PADDING, SB_BUTTON_WIDTH,
+                 len);
+      drawBevel (this, SB_BUTTON_BEVEL_X,
                  height - SB_BUTTON_BOTH_HEIGHT, SB_BUTTON_WIDTH,
                  SB_BUTTON_HEIGHT);
-      drawBevel (scrollBar.win, SB_BUTTON_BEVEL_X,
+      drawBevel (this, SB_BUTTON_BEVEL_X,
                  height - SB_BUTTON_SINGLE_HEIGHT, SB_BUTTON_WIDTH,
                  SB_BUTTON_HEIGHT);

-      src = scrollBar.state == STATE_UP ? upArrowHi : upArrow;
-      XCopyArea (dpy, src, scrollBar.win, whiteGC, 0, 0,
+      src = state == STATE_UP ? upArrowHi : upArrow;
+      XCopyArea (term->dpy, src, win, whiteGC, 0, 0,
                  ARROW_WIDTH, ARROW_HEIGHT, SB_BUTTON_FACE_X,
                  height - SB_BUTTON_BOTH_HEIGHT + SB_BEVEL_WIDTH_UPPER_LEFT);

-      src = scrollBar.state == STATE_DOWN ? downArrowHi : downArrow;
-      XCopyArea (dpy, src, scrollBar.win, whiteGC, 0, 0,
+      src = state == STATE_DOWN ? downArrowHi : downArrow;
+      XCopyArea (term->dpy, src, win, whiteGC, 0, 0,
                  ARROW_WIDTH, ARROW_HEIGHT, SB_BUTTON_FACE_X,
                  height - SB_BUTTON_SINGLE_HEIGHT + SB_BEVEL_WIDTH_UPPER_LEFT);
     }
diff --git a/src/scrollbar-plain.C b/src/scrollbar-plain.C

index 2de214fee7403d44bae8e8e6f1b1055f9a55c2ad..

index ..f486dff2bb7788675744327a160932b24068f18b 100644

--- a/src/scrollbar-plain.C
+++ b/src/scrollbar-plain.C
@@ -28,41 +28,41 @@
 #if defined(PLAIN_SCROLLBAR)

 int
-rxvt_term::scrollbar_show_plain (int update, int last_top, int last_bot, int scrollbar_len)
+scrollBar_t::show_plain (int update)
 {
   int xsb = 0;
-  int sbwidth = scrollBar.width - 1;
+  int sbwidth = width - 1;

-  if ((scrollBar.init & R_SB_PLAIN) == 0)
+  if ((init & R_SB_PLAIN) == 0)
     {
       XGCValues gcvalue;

-      scrollBar.init |= R_SB_PLAIN;
-      gcvalue.foreground = pix_colors_focused[Color_scroll];
+      init |= R_SB_PLAIN;
+      gcvalue.foreground = term->pix_colors_focused[Color_scroll];

-      pscrollbarGC = XCreateGC (dpy, scrollBar.win, GCForeground, &gcvalue);
+      pscrollbarGC = XCreateGC (term->dpy, win, GCForeground, &gcvalue);
     }

-  xsb = option (Opt_scrollBar_right) ? 1 : 0;
+  xsb = term->option (Opt_scrollBar_right) ? 1 : 0;

   if (update)
     {
-      if (last_top < scrollBar.top)
-        XClearArea (dpy, scrollBar.win,
+      if (last_top < top)
+        XClearArea (term->dpy, win,
                     0, last_top,
-                    sbwidth + 1, scrollBar.top - last_top, False);
+                    sbwidth + 1, top - last_top, False);

-      if (scrollBar.bot < last_bot)
-        XClearArea (dpy, scrollBar.win,
-                    0, scrollBar.bot,
-                    sbwidth + 1, last_bot - scrollBar.bot, False);
+      if (bot < last_bot)
+        XClearArea (term->dpy, win,
+                    0, bot,
+                    sbwidth + 1, last_bot - bot, False);
     }
   else
-    XClearWindow (dpy, scrollBar.win);
+    XClearWindow (term->dpy, win);

   /* scrollbar slider */
-  XFillRectangle (dpy, scrollBar.win, pscrollbarGC,
-                  1 - xsb, scrollBar.top, sbwidth, scrollbar_len);
+  XFillRectangle (term->dpy, win, pscrollbarGC,
+                  1 - xsb, top, sbwidth, len);

   return 1;
 }
diff --git a/src/scrollbar-rxvt.C b/src/scrollbar-rxvt.C

index 066c9a12327ad6699adf927a2aa5894db5154e0d..

index ..0c038023d63ec5a00e11afa86e89b91611e584a8 100644

--- a/src/scrollbar-rxvt.C
+++ b/src/scrollbar-rxvt.C
@@ -28,9 +28,11 @@
 #if defined(RXVT_SCROLLBAR)

 static void
-draw_shadow (rxvt_term *term, int x, int y, int w, int h)
+draw_shadow (scrollBar_t *sb, int x, int y, int w, int h)
 {
   int shadow;
+  Drawable d = sb->win;
+  Display *dpy = sb->term->dpy;

   shadow = (w == 0 || h == 0) ? 1 : SHADOW_WIDTH;
   w += x - 1;
@@ -38,34 +40,36 @@ draw_shadow (rxvt_term *term, int x, int y, int w, int h)

   for (; shadow-- > 0; x++, y++, w--, h--)
     {
-      XDrawLine (term->dpy, term->scrollBar.win, term->topShadowGC, x, y, w    , y    );
-      XDrawLine (term->dpy, term->scrollBar.win, term->topShadowGC, x, y, x    , h    );
-      XDrawLine (term->dpy, term->scrollBar.win, term->botShadowGC, w, h, w    , y + 1);
-      XDrawLine (term->dpy, term->scrollBar.win, term->botShadowGC, w, h, x + 1, h    );
+      XDrawLine (dpy, d, sb->topShadowGC, x, y, w    , y    );
+      XDrawLine (dpy, d, sb->topShadowGC, x, y, x    , h    );
+      XDrawLine (dpy, d, sb->botShadowGC, w, h, w    , y + 1);
+      XDrawLine (dpy, d, sb->botShadowGC, w, h, x + 1, h    );
     }
 }

 /* draw triangular button with a shadow of 2 pixels */
 static void
-draw_button (rxvt_term *term, int x, int y, int dirn)
+draw_button (scrollBar_t *sb, int x, int y, int dirn)
 {
   unsigned int sz, sz2;
   XPoint pt[3];
   GC top, bot;
+  Drawable d = sb->win;
+  Display *dpy = sb->term->dpy;

-  sz = term->scrollBar.width;
+  sz = sb->width;
   sz2 = sz / 2;

-  if ((dirn == UP && term->scrollBar.state == STATE_UP)
-      || (dirn == DN && term->scrollBar.state == STATE_DOWN))
+  if ((dirn == UP && sb->state == STATE_UP)
+      || (dirn == DN && sb->state == STATE_DOWN))
     {
-      top = term->botShadowGC;
-      bot = term->topShadowGC;
+      top = sb->botShadowGC;
+      bot = sb->topShadowGC;
     }
   else
     {
-      top = term->topShadowGC;
-      bot = term->botShadowGC;
+      top = sb->topShadowGC;
+      bot = sb->botShadowGC;
     }

   /* fill triangle */
@@ -84,17 +88,17 @@ draw_button (rxvt_term *term, int x, int y, int dirn)
       pt[2].y = y + sz - 1;
     }

-  XFillPolygon (term->dpy, term->scrollBar.win, term->scrollbarGC,
+  XFillPolygon (dpy, d, sb->scrollbarGC,
                 pt, 3, Convex, CoordModeOrigin);

   /* draw base */
-  XDrawLine (term->dpy, term->scrollBar.win, (dirn == UP ? bot : top),
+  XDrawLine (dpy, d, (dirn == UP ? bot : top),
              pt[0].x, pt[0].y, pt[1].x, pt[1].y);

   /* draw shadow on left */
   pt[1].x = x + sz2 - 1;
   pt[1].y = y + (dirn == UP ? 0 : sz - 1);
-  XDrawLine (term->dpy, term->scrollBar.win, top,
+  XDrawLine (dpy, d, top,
              pt[0].x, pt[0].y, pt[1].x, pt[1].y);

 #if SHADOW_WIDTH > 1
@@ -112,7 +116,7 @@ draw_button (rxvt_term *term, int x, int y, int dirn)
       pt[1].y--;
     }

-  XDrawLine (term->dpy, term->scrollBar.win, top,
+  XDrawLine (dpy, d, top,
              pt[0].x, pt[0].y, pt[1].x, pt[1].y);
 #endif

@@ -121,7 +125,7 @@ draw_button (rxvt_term *term, int x, int y, int dirn)
   /*  pt[2].x = x + sz2; */
   pt[1].y = y + (dirn == UP ? sz - 1 : 0);
   pt[2].y = y + (dirn == UP ? 0 : sz - 1);
-  XDrawLine (term->dpy, term->scrollBar.win, bot,
+  XDrawLine (dpy, d, bot,
              pt[2].x, pt[2].y, pt[1].x, pt[1].y);

 #if SHADOW_WIDTH > 1
@@ -138,53 +142,53 @@ draw_button (rxvt_term *term, int x, int y, int dirn)
       pt[1].y++;
     }

-  XDrawLine (term->dpy, term->scrollBar.win, bot,
+  XDrawLine (dpy, d, bot,
              pt[2].x, pt[2].y, pt[1].x, pt[1].y);
 #endif
 }

 int
-rxvt_term::scrollbar_show_rxvt (int update, int last_top, int last_bot, int scrollbar_len)
+scrollBar_t::show_rxvt (int update)
 {
-  int sbshadow = scrollBar.shadow;
-  int sbwidth = (int)scrollBar.width;
+  int sbshadow = shadow;
+  int sbwidth = (int)width;

-  if ((scrollBar.init & R_SB_RXVT) == 0)
+  if ((init & R_SB_RXVT) == 0)
     {
       XGCValues gcvalue;

-      scrollBar.init |= R_SB_RXVT;
+      init |= R_SB_RXVT;

-      gcvalue.foreground = pix_colors[Color_topShadow];
-      topShadowGC = XCreateGC (dpy, vt, GCForeground, &gcvalue);
-      gcvalue.foreground = pix_colors[Color_bottomShadow];
-      botShadowGC = XCreateGC (dpy, vt, GCForeground, &gcvalue);
-      gcvalue.foreground = pix_colors[ (depth <= 2 ? Color_fg : Color_scroll)];
-      scrollbarGC = XCreateGC (dpy, vt, GCForeground, &gcvalue);
+      gcvalue.foreground = term->pix_colors[Color_topShadow];
+      topShadowGC = XCreateGC (term->dpy, term->vt, GCForeground, &gcvalue);
+      gcvalue.foreground = term->pix_colors[Color_bottomShadow];
+      botShadowGC = XCreateGC (term->dpy, term->vt, GCForeground, &gcvalue);
+      gcvalue.foreground = term->pix_colors[ (term->depth <= 2 ? Color_fg : Color_scroll)];
+      scrollbarGC = XCreateGC (term->dpy, term->vt, GCForeground, &gcvalue);
       if (sbshadow)
         {
-          XSetWindowBackground (dpy, scrollBar.win, pix_colors_focused[Color_trough]);
-          XClearWindow (dpy, scrollBar.win);
+          XSetWindowBackground (term->dpy, win, term->pix_colors_focused[Color_trough]);
+          XClearWindow (term->dpy, win);
         }
     }
   else
     {
       if (update)
         {
-          if (last_top < scrollBar.top)
-            XClearArea (dpy, scrollBar.win,
+          if (last_top < top)
+            XClearArea (term->dpy, win,
                         sbshadow, last_top,
-                        sbwidth, (scrollBar.top - last_top),
+                        sbwidth, (top - last_top),
                         False);

-          if (scrollBar.bot < last_bot)
-            XClearArea (dpy, scrollBar.win,
-                        sbshadow, scrollBar.bot,
-                        sbwidth, (last_bot - scrollBar.bot),
+          if (bot < last_bot)
+            XClearArea (term->dpy, win,
+                        sbshadow, bot,
+                        sbwidth, (last_bot - bot),
                         False);
         }
       else
-        XClearWindow (dpy, scrollBar.win);
+        XClearWindow (term->dpy, win);
     }

   /* scrollbar slider */
@@ -192,30 +196,30 @@ rxvt_term::scrollbar_show_rxvt (int update, int last_top, int last_bot, int scro
   {
     int xofs;

-    if (option (Opt_scrollBar_right))
+    if (term->option (Opt_scrollBar_right))
       xofs = 0;
     else
       xofs = sbshadow ? sbwidth : sbwidth - 1;

-    XDrawLine (dpy, scrollBar.win, botShadowGC,
-               xofs, 0, xofs, scrollBar.end + sbwidth);
+    XDrawLine (term->dpy, win, botShadowGC,
+               xofs, 0, xofs, end + sbwidth);
   }
 #endif

-  XFillRectangle (dpy, scrollBar.win, scrollbarGC,
-                  sbshadow, scrollBar.top, sbwidth,
-                  scrollbar_len);
+  XFillRectangle (term->dpy, win, scrollbarGC,
+                  sbshadow, top, sbwidth,
+                  len);

   if (sbshadow)
     /* trough shadow */
-    draw_shadow (this, 0, 0, sbwidth + 2 * sbshadow, scrollBar.end + (sbwidth + 1) + sbshadow);
+    draw_shadow (this, 0, 0, sbwidth + 2 * sbshadow, end + (sbwidth + 1) + sbshadow);

   /* shadow for scrollbar slider */
-  draw_shadow (this, sbshadow, scrollBar.top, sbwidth, scrollbar_len);
+  draw_shadow (this, sbshadow, top, sbwidth, len);

   /* Redraw scrollbar arrows */
-  draw_button (this, sbshadow, sbshadow,          UP);
-  draw_button (this, sbshadow, scrollBar.end + 1, DN);
+  draw_button (this, sbshadow, sbshadow, UP);
+  draw_button (this, sbshadow, end + 1,  DN);

   return 1;
 }
diff --git a/src/scrollbar-xterm.C b/src/scrollbar-xterm.C

index 69ae966d4a3317a83964cddd10005591323111a2..

index ..e6b4e087647943296901a7d129656c0cb2536559 100644

--- a/src/scrollbar-xterm.C
+++ b/src/scrollbar-xterm.C
@@ -32,57 +32,57 @@
 const unsigned char x_stp_bits[] = { 0xaa, 0x55 };

 int
-rxvt_term::scrollbar_show_xterm (int update, int last_top, int last_bot, int scrollbar_len)
+scrollBar_t::show_xterm (int update)
 {
   int xsb = 0;
-  int sbwidth = scrollBar.width - 1;
+  int sbwidth = width - 1;

-  if ((scrollBar.init & R_SB_XTERM) == 0)
+  if ((init & R_SB_XTERM) == 0)
     {
       XGCValues       gcvalue;

-      scrollBar.init |= R_SB_XTERM;
-      gcvalue.stipple = XCreateBitmapFromData (dpy, scrollBar.win,
+      init |= R_SB_XTERM;
+      gcvalue.stipple = XCreateBitmapFromData (term->dpy, win,
                                                (char *)x_stp_bits, x_stp_width,
                                                x_stp_height);
       if (!gcvalue.stipple)
         rxvt_fatal ("can't create bitmap\n");

       gcvalue.fill_style = FillOpaqueStippled;
-      gcvalue.foreground = pix_colors_focused[Color_scroll];
-      gcvalue.background = pix_colors_focused[Color_bg];
+      gcvalue.foreground = term->pix_colors_focused[Color_scroll];
+      gcvalue.background = term->pix_colors_focused[Color_bg];

-      xscrollbarGC = XCreateGC (dpy, scrollBar.win,
+      xscrollbarGC = XCreateGC (term->dpy, win,
                                 GCForeground | GCBackground
                                 | GCFillStyle | GCStipple, &gcvalue);
-      gcvalue.foreground = pix_colors_focused[Color_border];
-      ShadowGC = XCreateGC (dpy, scrollBar.win, GCForeground, &gcvalue);
+      gcvalue.foreground = term->pix_colors_focused[Color_border];
+      ShadowGC = XCreateGC (term->dpy, win, GCForeground, &gcvalue);
     }

-  xsb = option (Opt_scrollBar_right) ? 1 : 0;
+  xsb = term->option (Opt_scrollBar_right) ? 1 : 0;

   if (update)
     {
-      if (last_top < scrollBar.top)
-        XClearArea (dpy, scrollBar.win,
+      if (last_top < top)
+        XClearArea (term->dpy, win,
                     xsb, last_top,
-                    sbwidth, (scrollBar.top - last_top), False);
+                    sbwidth, (top - last_top), False);

-      if (scrollBar.bot < last_bot)
-        XClearArea (dpy, scrollBar.win,
-                    xsb, scrollBar.bot,
-                    sbwidth, (last_bot - scrollBar.bot), False);
+      if (bot < last_bot)
+        XClearArea (term->dpy, win,
+                    xsb, bot,
+                    sbwidth, (last_bot - bot), False);
     }
   else
-    XClearWindow (dpy, scrollBar.win);
+    XClearWindow (term->dpy, win);

   /* scrollbar slider */
-  XFillRectangle (dpy, scrollBar.win, xscrollbarGC,
-                  xsb + 1, scrollBar.top, sbwidth - 2, scrollbar_len);
+  XFillRectangle (term->dpy, win, xscrollbarGC,
+                  xsb + 1, top, sbwidth - 2, len);

-  XDrawLine (dpy, scrollBar.win, ShadowGC,
-             xsb ? 0 : sbwidth, scrollBar.beg,
-             xsb ? 0 : sbwidth, scrollBar.end);
+  XDrawLine (term->dpy, win, ShadowGC,
+             xsb ? 0 : sbwidth, beg,
+             xsb ? 0 : sbwidth, end);
   return 1;
 }
 #endif /* XTERM_SCROLLBAR */
diff --git a/src/scrollbar.C b/src/scrollbar.C

index 4506363b00fcad4be4088c58ec3b5d02bd8de4a9..

index ..92f0452e36a53c3274e830d5a3e69ab4664f8030 100644

--- a/src/scrollbar.C
+++ b/src/scrollbar.C
@@ -131,7 +131,7 @@ scrollBar_t::show (int refresh)
         return 0;
     }

-  ret = (term->*update) (refresh, last_top, last_bot, len);
+  ret = (this->*update) (refresh);

   last_top = top;
   last_bot = bot;
@@ -216,6 +216,35 @@ scrollBar_t::setup (rxvt_term *term)
   leftptr_cursor = XCreateFontCursor (term->dpy, XC_left_ptr);
 }

+void
+scrollBar_t::destroy ()
+{
+#ifdef XTERM_SCROLLBAR
+  if (xscrollbarGC) XFreeGC (term->dpy, xscrollbarGC);
+  if (ShadowGC)     XFreeGC (term->dpy, ShadowGC);
+#endif
+#ifdef PLAIN_SCROLLBAR
+  if (pscrollbarGC) XFreeGC (term->dpy, pscrollbarGC);
+#endif
+#ifdef NEXT_SCROLLBAR
+  if (blackGC)      XFreeGC (term->dpy, blackGC);
+  if (whiteGC)      XFreeGC (term->dpy, whiteGC);
+  if (grayGC)       XFreeGC (term->dpy, grayGC);
+  if (darkGC)       XFreeGC (term->dpy, darkGC);
+  if (stippleGC)    XFreeGC (term->dpy, stippleGC);
+  if (dimple)       XFreePixmap (term->dpy, dimple);
+  if (upArrow)      XFreePixmap (term->dpy, upArrow);
+  if (downArrow)    XFreePixmap (term->dpy, downArrow);
+  if (upArrowHi)    XFreePixmap (term->dpy, upArrowHi);
+  if (downArrowHi)  XFreePixmap (term->dpy, downArrowHi);
+#endif
+#ifdef RXVT_SCROLLBAR
+  if (topShadowGC)  XFreeGC (term->dpy, topShadowGC);
+  if (botShadowGC)  XFreeGC (term->dpy, botShadowGC);
+  if (scrollbarGC)  XFreeGC (term->dpy, scrollbarGC);
+#endif
+}
+
 void
 scrollBar_t::update_data ()
 {
@@ -224,7 +253,7 @@ scrollBar_t::update_data ()
     {
       beg = 0;
       end = term->szHint.height;
-      update = &rxvt_term::scrollbar_show_plain;
+      update = &scrollBar_t::show_plain;
     }
 #endif
 #if defined(XTERM_SCROLLBAR)
@@ -232,7 +261,7 @@ scrollBar_t::update_data ()
     {
       beg = 0;
       end = term->szHint.height;
-      update = &rxvt_term::scrollbar_show_xterm;
+      update = &scrollBar_t::show_xterm;
     }
 #endif
 #if defined(NEXT_SCROLLBAR)
@@ -240,7 +269,7 @@ scrollBar_t::update_data ()
     {
       beg = 0;
       end = term->szHint.height - (SB_BUTTON_TOTAL_HEIGHT + SB_PADDING);
-      update = &rxvt_term::scrollbar_show_next;
+      update = &scrollBar_t::show_next;
     }
 #endif
 #if defined(RXVT_SCROLLBAR)
@@ -248,7 +277,7 @@ scrollBar_t::update_data ()
     {
       beg = (width + 1) + shadow;
       end = term->szHint.height - beg - (2 * shadow);
-      update = &rxvt_term::scrollbar_show_rxvt;
+      update = &scrollBar_t::show_rxvt;
     }
 #endif
 }
diff --git a/src/scrollbar.h b/src/scrollbar.h

index f14cbe7656517a2854ff50414a6f95a73fca6d67..

index ..803f399ab92e48278395a8333ff6bc8f66bf9ddf 100644

--- a/src/scrollbar.h
+++ b/src/scrollbar.h
@@ -64,13 +64,14 @@ struct scrollBar_t {
   unsigned char   align;
   Window          win;
   Cursor          leftptr_cursor;
-  int             (rxvt_term::*update)(int, int, int, int);
+  int             (scrollBar_t::*update)(int);
   void setup (rxvt_term *);
   // update style dependent data
   void update_data ();
   void resize ();
   int map (int);
   int show (int);
+  void destroy ();

   bool upButton (int y)
   {
@@ -100,6 +101,46 @@ struct scrollBar_t {
   {
     return width + shadow * 2;
   }
+
+#if defined(NEXT_SCROLLBAR)
+  GC              blackGC,
+                  whiteGC,
+                  grayGC,
+                  darkGC,
+                  stippleGC;
+  Pixmap          dimple,
+                  upArrow,
+                  downArrow,
+                  upArrowHi,
+                  downArrowHi;
+#endif
+
+#if defined(RXVT_SCROLLBAR)
+  GC              scrollbarGC,
+                  topShadowGC,
+                  botShadowGC;
+#endif
+
+#if defined(XTERM_SCROLLBAR)
+  GC              xscrollbarGC,
+                  ShadowGC;
+#endif
+
+#if defined(PLAIN_SCROLLBAR)
+  GC              pscrollbarGC;
+#endif
+
+  // scrollbar-next.C
+  int show_next (int);
+  // scrollbar-rxvt.C
+  int show_rxvt (int);
+  // scrollbar-xterm.C
+  int show_xterm (int);
+  // scrollbar-plain.C
+  int show_plain (int);
+
+private:
+  void init_next ();
 };

 #define scrollbar_above_slider(y)       ((y) < scrollBar.top)

-----END OF PAGE-----

-- Response ended

-- Page fetched on Sun Jun 2 12:06:52 2024