+
+ pos.x = xwa.x + Col2Pixel (screen.cur.col);
+ pos.y = xwa.y + Height2Pixel (screen.cur.row) + TermWin.fbase;
+}
+#endif
+
+#if ENABLE_OVERLAY
+void
+rxvt_term::scr_overlay_new (int x, int y, int w, int h)
+{
+ if (TermWin.nrow < 3 || TermWin.ncol < 3)
+ return;
+
+ want_refresh = 1;
+
+ scr_overlay_off ();
+
+ if (x < 0) x = TermWin.ncol - w;
+ if (y < 0) y = TermWin.nrow - h;
+
+ // make space for border
+ w += 2; MIN_IT (w, TermWin.ncol);
+ h += 2; MIN_IT (h, TermWin.nrow);
+
+ x -= 1; MAX_IT (x, 0);
+ y -= 1; MAX_IT (y, 0);
+
+ MIN_IT (x, TermWin.ncol - w);
+ MIN_IT (y, TermWin.nrow - h);
+
+ ov_x = x; ov_y = y;
+ ov_w = w; ov_h = h;
+
+ ov_text = new text_t *[h];
+ ov_rend = new rend_t *[h];
+
+ for (y = 0; y < h; y++)
+ {
+ text_t *tp = ov_text[y] = new text_t[w];
+ rend_t *rp = ov_rend[y] = new rend_t[w];
+
+ text_t t0, t1, t2;
+ rend_t r = SET_BGCOLOR (SET_FGCOLOR (RS_None, Color_bg), Color_fg);
+
+ if (y == 0)
+ t0 = 0x2554, t1 = 0x2550, t2 = 0x2557;
+ else if (y < h - 1)
+ t0 = 0x2551, t1 = 0x0020, t2 = 0x2551;
+ else
+ t0 = 0x255a, t1 = 0x2550, t2 = 0x255d;
+
+ *tp++ = t0;
+ *rp++ = r;
+
+ for (x = w - 2; x > 0; --x)
+ {
+ *tp++ = t1;
+ *rp++ = r;
+ }
+
+ *tp = t2;
+ *rp = r;
+ }
+}
+
+void
+rxvt_term::scr_overlay_off ()
+{
+ if (!ov_text)
+ return;
+
+ want_refresh = 1;
+
+ for (int y = 0; y < ov_h; y++)
+ {
+ delete [] ov_text[y];
+ delete [] ov_rend[y];
+ }
+
+ delete [] ov_text; ov_text = 0;
+ delete [] ov_rend; ov_rend = 0;
+}
+
+void
+rxvt_term::scr_overlay_set (int x, int y, text_t text, rend_t rend)
+{
+ if (!ov_text || x >= ov_w - 2 || y >= ov_h)
+ return;
+
+ x++, y++;
+
+ ov_text[y][x] = text;
+ ov_rend[y][x] = rend;
+}
+
+void
+rxvt_term::scr_overlay_set (int x, int y, const char *s)
+{
+ while (*s)
+ scr_overlay_set (x++, y, *s++);
+}
+
+void
+rxvt_term::scr_swap_overlay ()
+{
+ if (!ov_text)
+ return;
+
+ int row_offset = ov_y + TermWin.saveLines - TermWin.view_start;
+
+ // swap screen mem with overlay
+ for (int y = ov_h; y--; )
+ {
+ text_t *t1 = ov_text[y];
+ rend_t *r1 = ov_rend[y];
+
+ text_t *t2 = screen.text[y + row_offset] + ov_x;
+ rend_t *r2 = screen.rend[y + row_offset] + ov_x;
+
+ for (int x = ov_w; x--; )
+ {
+ text_t t = *t1; *t1++ = *t2; *t2++ = t;
+ rend_t r = *r1; *r1++ = *r2; *r2++ = SET_FONT (r, TermWin.fontset->find_font (t, false));
+ }
+ }