aboutsummaryrefslogtreecommitdiff
path: root/x.c
diff options
context:
space:
mode:
Diffstat (limited to 'x.c')
-rw-r--r--x.c79
1 files changed, 35 insertions, 44 deletions
diff --git a/x.c b/x.c
index c5826cf..96944ee 100644
--- a/x.c
+++ b/x.c
@@ -129,7 +129,6 @@ static int xmakeglyphfontspecs(XftGlyphFontSpec *, const Glyph *, int, int, int)
129static void xdrawglyphfontspecs(const XftGlyphFontSpec *, Glyph, int, int, int); 129static void xdrawglyphfontspecs(const XftGlyphFontSpec *, Glyph, int, int, int);
130static void xdrawglyph(Glyph, int, int); 130static void xdrawglyph(Glyph, int, int);
131static void xclear(int, int, int, int); 131static void xclear(int, int, int, int);
132static void xdrawcursor(void);
133static int xgeommasktogravity(int); 132static int xgeommasktogravity(int);
134static void xinit(void); 133static void xinit(void);
135static void cresize(int, int); 134static void cresize(int, int);
@@ -1512,59 +1511,51 @@ xsettitle(char *p)
1512 XFree(prop.value); 1511 XFree(prop.value);
1513} 1512}
1514 1513
1515void 1514int
1516draw(void) 1515xstartdraw(void)
1517{ 1516{
1518 drawregion(0, 0, term.col, term.row); 1517 return IS_SET(MODE_VISIBLE);
1519 XCopyArea(xw.dpy, xw.buf, xw.win, dc.gc, 0, 0, win.w,
1520 win.h, 0, 0);
1521 XSetForeground(xw.dpy, dc.gc,
1522 dc.col[IS_SET(MODE_REVERSE)?
1523 defaultfg : defaultbg].pixel);
1524} 1518}
1525 1519
1526void 1520void
1527drawregion(int x1, int y1, int x2, int y2) 1521xdrawline(Line line, int x1, int y1, int x2)
1528{ 1522{
1529 int i, x, y, ox, numspecs; 1523 int i, x, ox, numspecs;
1530 Glyph base, new; 1524 Glyph base, new;
1531 XftGlyphFontSpec *specs; 1525 XftGlyphFontSpec *specs = xw.specbuf;
1532 1526
1533 if (!(IS_SET(MODE_VISIBLE))) 1527 numspecs = xmakeglyphfontspecs(specs, &line[x1], x2 - x1, x1, y1);
1534 return; 1528 i = ox = 0;
1535 1529 for (x = x1; x < x2 && i < numspecs; x++) {
1536 for (y = y1; y < y2; y++) { 1530 new = line[x];
1537 if (!term.dirty[y]) 1531 if (new.mode == ATTR_WDUMMY)
1538 continue; 1532 continue;
1539 1533 if (selected(x, y1))
1540 term.dirty[y] = 0; 1534 new.mode ^= ATTR_REVERSE;
1541 1535 if (i > 0 && ATTRCMP(base, new)) {
1542 specs = xw.specbuf; 1536 xdrawglyphfontspecs(specs, base, i, ox, y1);
1543 numspecs = xmakeglyphfontspecs(specs, &term.line[y][x1], x2 - x1, x1, y); 1537 specs += i;
1544 1538 numspecs -= i;
1545 i = ox = 0; 1539 i = 0;
1546 for (x = x1; x < x2 && i < numspecs; x++) { 1540 }
1547 new = term.line[y][x]; 1541 if (i == 0) {
1548 if (new.mode == ATTR_WDUMMY) 1542 ox = x;
1549 continue; 1543 base = new;
1550 if (selected(x, y))
1551 new.mode ^= ATTR_REVERSE;
1552 if (i > 0 && ATTRCMP(base, new)) {
1553 xdrawglyphfontspecs(specs, base, i, ox, y);
1554 specs += i;
1555 numspecs -= i;
1556 i = 0;
1557 }
1558 if (i == 0) {
1559 ox = x;
1560 base = new;
1561 }
1562 i++;
1563 } 1544 }
1564 if (i > 0) 1545 i++;
1565 xdrawglyphfontspecs(specs, base, i, ox, y);
1566 } 1546 }
1567 xdrawcursor(); 1547 if (i > 0)
1548 xdrawglyphfontspecs(specs, base, i, ox, y1);
1549}
1550
1551void
1552xfinishdraw(void)
1553{
1554 XCopyArea(xw.dpy, xw.buf, xw.win, dc.gc, 0, 0, win.w,
1555 win.h, 0, 0);
1556 XSetForeground(xw.dpy, dc.gc,
1557 dc.col[IS_SET(MODE_REVERSE)?
1558 defaultfg : defaultbg].pixel);
1568} 1559}
1569 1560
1570void 1561void