Xinqi Bao's Git
projects
/
st.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
Pull term references out of xdrawcursor
[st.git]
/
x.c
diff --git
a/x.c
b/x.c
index
96944ee
..
d205ca7
100644
(file)
--- a/
x.c
+++ b/
x.c
@@
-1387,41
+1387,26
@@
xdrawglyph(Glyph g, int x, int y)
}
void
}
void
-xdrawcursor(
void
)
+xdrawcursor(
int cx, int cy, Glyph g, int ox, int oy, Glyph og
)
{
{
- static int oldx = 0, oldy = 0;
- int curx;
- Glyph g = {' ', ATTR_NULL, defaultbg, defaultcs}, og;
Color drawcol;
Color drawcol;
- LIMIT(oldx, 0, term.col-1);
- LIMIT(oldy, 0, term.row-1);
-
- curx = term.c.x;
-
- /* adjust position if in dummy */
- if (term.line[oldy][oldx].mode & ATTR_WDUMMY)
- oldx--;
- if (term.line[term.c.y][curx].mode & ATTR_WDUMMY)
- curx--;
-
/* remove the old cursor */
/* remove the old cursor */
- og = term.line[oldy][oldx];
- if (selected(oldx, oldy))
+ if (selected(ox, oy))
og.mode ^= ATTR_REVERSE;
og.mode ^= ATTR_REVERSE;
- xdrawglyph(og, oldx, oldy);
-
- g.u = term.line[term.c.y][term.c.x].u;
- g.mode |= term.line[term.c.y][term.c.x].mode &
- (ATTR_BOLD | ATTR_ITALIC | ATTR_UNDERLINE | ATTR_STRUCK);
+ xdrawglyph(og, ox, oy);
/*
* Select the right color for the right mode.
*/
/*
* Select the right color for the right mode.
*/
+ g.mode &= ATTR_BOLD|ATTR_ITALIC|ATTR_UNDERLINE|ATTR_STRUCK|ATTR_WIDE;
+ g.fg = defaultbg;
+ g.bg = defaultcs;
+
if (IS_SET(MODE_REVERSE)) {
g.mode |= ATTR_REVERSE;
g.bg = defaultfg;
if (IS_SET(MODE_REVERSE)) {
g.mode |= ATTR_REVERSE;
g.bg = defaultfg;
- if (selected(
term.c.x, term.c.
y)) {
+ if (selected(
cx, c
y)) {
drawcol = dc.col[defaultcs];
g.fg = defaultrcs;
} else {
drawcol = dc.col[defaultcs];
g.fg = defaultrcs;
} else {
@@
-1429,7
+1414,7
@@
xdrawcursor(void)
g.fg = defaultcs;
}
} else {
g.fg = defaultcs;
}
} else {
- if (selected(
term.c.x, term.c.
y)) {
+ if (selected(
cx, c
y)) {
drawcol = dc.col[defaultrcs];
g.fg = defaultfg;
g.bg = defaultrcs;
drawcol = dc.col[defaultrcs];
g.fg = defaultfg;
g.bg = defaultrcs;
@@
-1449,44
+1434,42
@@
xdrawcursor(void)
case 0: /* Blinking Block */
case 1: /* Blinking Block (Default) */
case 2: /* Steady Block */
case 0: /* Blinking Block */
case 1: /* Blinking Block (Default) */
case 2: /* Steady Block */
- g.mode |= term.line[term.c.y][curx].mode & ATTR_WIDE;
- xdrawglyph(g, term.c.x, term.c.y);
+ xdrawglyph(g, cx, cy);
break;
case 3: /* Blinking Underline */
case 4: /* Steady Underline */
XftDrawRect(xw.draw, &drawcol,
break;
case 3: /* Blinking Underline */
case 4: /* Steady Underline */
XftDrawRect(xw.draw, &drawcol,
- borderpx + c
ur
x * win.cw,
- borderpx + (
term.c.
y + 1) * win.ch - \
+ borderpx + cx * win.cw,
+ borderpx + (
c
y + 1) * win.ch - \
cursorthickness,
win.cw, cursorthickness);
break;
case 5: /* Blinking bar */
case 6: /* Steady bar */
XftDrawRect(xw.draw, &drawcol,
cursorthickness,
win.cw, cursorthickness);
break;
case 5: /* Blinking bar */
case 6: /* Steady bar */
XftDrawRect(xw.draw, &drawcol,
- borderpx + c
ur
x * win.cw,
- borderpx +
term.c.
y * win.ch,
+ borderpx + cx * win.cw,
+ borderpx +
c
y * win.ch,
cursorthickness, win.ch);
break;
}
} else {
XftDrawRect(xw.draw, &drawcol,
cursorthickness, win.ch);
break;
}
} else {
XftDrawRect(xw.draw, &drawcol,
- borderpx + c
ur
x * win.cw,
- borderpx +
term.c.
y * win.ch,
+ borderpx + cx * win.cw,
+ borderpx +
c
y * win.ch,
win.cw - 1, 1);
XftDrawRect(xw.draw, &drawcol,
win.cw - 1, 1);
XftDrawRect(xw.draw, &drawcol,
- borderpx + c
ur
x * win.cw,
- borderpx +
term.c.
y * win.ch,
+ borderpx + cx * win.cw,
+ borderpx +
c
y * win.ch,
1, win.ch - 1);
XftDrawRect(xw.draw, &drawcol,
1, win.ch - 1);
XftDrawRect(xw.draw, &drawcol,
- borderpx + (c
ur
x + 1) * win.cw - 1,
- borderpx +
term.c.
y * win.ch,
+ borderpx + (cx + 1) * win.cw - 1,
+ borderpx +
c
y * win.ch,
1, win.ch - 1);
XftDrawRect(xw.draw, &drawcol,
1, win.ch - 1);
XftDrawRect(xw.draw, &drawcol,
- borderpx + c
ur
x * win.cw,
- borderpx + (
term.c.
y + 1) * win.ch - 1,
+ borderpx + cx * win.cw,
+ borderpx + (
c
y + 1) * win.ch - 1,
win.cw, 1);
}
win.cw, 1);
}
- oldx = curx, oldy = term.c.y;
}
void
}
void