commit - 05c66cb37d9ff278a3e0c45682c4b5e7945deb42
commit + 88d8293fb4ba150a5f19d58d133b5db93d9dcfa5
blob - 01791a57d25e05261d31878e566355260b3263a8
blob + 504239ea6ac121ec512a4e738e72b916a828015e
--- st.c
+++ st.c
static void tdeftran(char);
static void tstrsequence(uchar);
+static void drawregion(int, int, int, int);
+
static void selscroll(int, int);
static void selsnap(int *, int *, int);
}
void
+drawregion(int x1, int y1, int x2, int y2)
+{
+ int y;
+ for (y = y1; y < y2; y++) {
+ if (!term.dirty[y])
+ continue;
+
+ term.dirty[y] = 0;
+ xdrawline(term.line[y], x1, y, x2);
+ }
+}
+
+void
+draw(void)
+{
+ if (!xstartdraw())
+ return;
+ drawregion(0, 0, term.col, term.row);
+ xdrawcursor();
+ xfinishdraw();
+}
+
+void
redraw(void)
{
tfulldirt();
blob - 3382d61e95b9747ea205ca0c8a80c2a7e0b54970
blob + 7026de8685768530c7ffc0d719b4acfb4c5d1c23
--- st.h
+++ st.h
void die(const char *, ...);
void redraw(void);
+void draw(void);
void iso14755(const Arg *);
void printscreen(const Arg *);
blob - 1e08b160d7d3dd858d7e4b8ffbfeb3c17a34ace4
blob + 6e662af7b1c78ea7111eea879e291bf75a26cc77
--- win.h
+++ win.h
|MODE_MOUSEMANY,
};
-void draw(void);
-void drawregion(int, int, int, int);
-
void xbell(void);
void xclipcopy(void);
+void xdrawcursor(void);
+void xdrawline(Line, int, int, int);
void xhints(void);
+void xfinishdraw(void);
void xloadcols(void);
int xsetcolorname(int, const char *);
void xsettitle(char *);
void xsetmode(int, unsigned int);
void xsetpointermotion(int);
void xsetsel(char *);
+int xstartdraw(void);
blob - c5826cf813f33f2d061c737a3a40abfb0c0ddc8b
blob + 96944ee9963dda568dc9d391c1bb848648525578
--- x.c
+++ x.c
static void xdrawglyphfontspecs(const XftGlyphFontSpec *, Glyph, int, int, int);
static void xdrawglyph(Glyph, int, int);
static void xclear(int, int, int, int);
-static void xdrawcursor(void);
static int xgeommasktogravity(int);
static void xinit(void);
static void cresize(int, int);
XFree(prop.value);
}
+int
+xstartdraw(void)
+{
+ return IS_SET(MODE_VISIBLE);
+}
+
void
-draw(void)
+xdrawline(Line line, int x1, int y1, int x2)
{
- drawregion(0, 0, term.col, term.row);
+ int i, x, ox, numspecs;
+ Glyph base, new;
+ XftGlyphFontSpec *specs = xw.specbuf;
+
+ numspecs = xmakeglyphfontspecs(specs, &line[x1], x2 - x1, x1, y1);
+ i = ox = 0;
+ for (x = x1; x < x2 && i < numspecs; x++) {
+ new = line[x];
+ if (new.mode == ATTR_WDUMMY)
+ continue;
+ if (selected(x, y1))
+ new.mode ^= ATTR_REVERSE;
+ if (i > 0 && ATTRCMP(base, new)) {
+ xdrawglyphfontspecs(specs, base, i, ox, y1);
+ specs += i;
+ numspecs -= i;
+ i = 0;
+ }
+ if (i == 0) {
+ ox = x;
+ base = new;
+ }
+ i++;
+ }
+ if (i > 0)
+ xdrawglyphfontspecs(specs, base, i, ox, y1);
+}
+
+void
+xfinishdraw(void)
+{
XCopyArea(xw.dpy, xw.buf, xw.win, dc.gc, 0, 0, win.w,
win.h, 0, 0);
XSetForeground(xw.dpy, dc.gc,
}
void
-drawregion(int x1, int y1, int x2, int y2)
-{
- int i, x, y, ox, numspecs;
- Glyph base, new;
- XftGlyphFontSpec *specs;
-
- if (!(IS_SET(MODE_VISIBLE)))
- return;
-
- for (y = y1; y < y2; y++) {
- if (!term.dirty[y])
- continue;
-
- term.dirty[y] = 0;
-
- specs = xw.specbuf;
- numspecs = xmakeglyphfontspecs(specs, &term.line[y][x1], x2 - x1, x1, y);
-
- i = ox = 0;
- for (x = x1; x < x2 && i < numspecs; x++) {
- new = term.line[y][x];
- if (new.mode == ATTR_WDUMMY)
- continue;
- if (selected(x, y))
- new.mode ^= ATTR_REVERSE;
- if (i > 0 && ATTRCMP(base, new)) {
- xdrawglyphfontspecs(specs, base, i, ox, y);
- specs += i;
- numspecs -= i;
- i = 0;
- }
- if (i == 0) {
- ox = x;
- base = new;
- }
- i++;
- }
- if (i > 0)
- xdrawglyphfontspecs(specs, base, i, ox, y);
- }
- xdrawcursor();
-}
-
-void
expose(XEvent *ev)
{
redraw();