aboutsummaryrefslogtreecommitdiff
path: root/x.c
diff options
context:
space:
mode:
Diffstat (limited to 'x.c')
-rw-r--r--x.c61
1 files changed, 22 insertions, 39 deletions
diff --git a/x.c b/x.c
index 96944ee..d205ca7 100644
--- a/x.c
+++ b/x.c
@@ -1387,41 +1387,26 @@ xdrawglyph(Glyph g, int x, int y)
1387} 1387}
1388 1388
1389void 1389void
1390xdrawcursor(void) 1390xdrawcursor(int cx, int cy, Glyph g, int ox, int oy, Glyph og)
1391{ 1391{
1392 static int oldx = 0, oldy = 0;
1393 int curx;
1394 Glyph g = {' ', ATTR_NULL, defaultbg, defaultcs}, og;
1395 Color drawcol; 1392 Color drawcol;
1396 1393
1397 LIMIT(oldx, 0, term.col-1);
1398 LIMIT(oldy, 0, term.row-1);
1399
1400 curx = term.c.x;
1401
1402 /* adjust position if in dummy */
1403 if (term.line[oldy][oldx].mode & ATTR_WDUMMY)
1404 oldx--;
1405 if (term.line[term.c.y][curx].mode & ATTR_WDUMMY)
1406 curx--;
1407
1408 /* remove the old cursor */ 1394 /* remove the old cursor */
1409 og = term.line[oldy][oldx]; 1395 if (selected(ox, oy))
1410 if (selected(oldx, oldy))
1411 og.mode ^= ATTR_REVERSE; 1396 og.mode ^= ATTR_REVERSE;
1412 xdrawglyph(og, oldx, oldy); 1397 xdrawglyph(og, ox, oy);
1413
1414 g.u = term.line[term.c.y][term.c.x].u;
1415 g.mode |= term.line[term.c.y][term.c.x].mode &
1416 (ATTR_BOLD | ATTR_ITALIC | ATTR_UNDERLINE | ATTR_STRUCK);
1417 1398
1418 /* 1399 /*
1419 * Select the right color for the right mode. 1400 * Select the right color for the right mode.
1420 */ 1401 */
1402 g.mode &= ATTR_BOLD|ATTR_ITALIC|ATTR_UNDERLINE|ATTR_STRUCK|ATTR_WIDE;
1403 g.fg = defaultbg;
1404 g.bg = defaultcs;
1405
1421 if (IS_SET(MODE_REVERSE)) { 1406 if (IS_SET(MODE_REVERSE)) {
1422 g.mode |= ATTR_REVERSE; 1407 g.mode |= ATTR_REVERSE;
1423 g.bg = defaultfg; 1408 g.bg = defaultfg;
1424 if (selected(term.c.x, term.c.y)) { 1409 if (selected(cx, cy)) {
1425 drawcol = dc.col[defaultcs]; 1410 drawcol = dc.col[defaultcs];
1426 g.fg = defaultrcs; 1411 g.fg = defaultrcs;
1427 } else { 1412 } else {
@@ -1429,7 +1414,7 @@ xdrawcursor(void)
1429 g.fg = defaultcs; 1414 g.fg = defaultcs;
1430 } 1415 }
1431 } else { 1416 } else {
1432 if (selected(term.c.x, term.c.y)) { 1417 if (selected(cx, cy)) {
1433 drawcol = dc.col[defaultrcs]; 1418 drawcol = dc.col[defaultrcs];
1434 g.fg = defaultfg; 1419 g.fg = defaultfg;
1435 g.bg = defaultrcs; 1420 g.bg = defaultrcs;
@@ -1449,44 +1434,42 @@ xdrawcursor(void)
1449 case 0: /* Blinking Block */ 1434 case 0: /* Blinking Block */
1450 case 1: /* Blinking Block (Default) */ 1435 case 1: /* Blinking Block (Default) */
1451 case 2: /* Steady Block */ 1436 case 2: /* Steady Block */
1452 g.mode |= term.line[term.c.y][curx].mode & ATTR_WIDE; 1437 xdrawglyph(g, cx, cy);
1453 xdrawglyph(g, term.c.x, term.c.y);
1454 break; 1438 break;
1455 case 3: /* Blinking Underline */ 1439 case 3: /* Blinking Underline */
1456 case 4: /* Steady Underline */ 1440 case 4: /* Steady Underline */
1457 XftDrawRect(xw.draw, &drawcol, 1441 XftDrawRect(xw.draw, &drawcol,
1458 borderpx + curx * win.cw, 1442 borderpx + cx * win.cw,
1459 borderpx + (term.c.y + 1) * win.ch - \ 1443 borderpx + (cy + 1) * win.ch - \
1460 cursorthickness, 1444 cursorthickness,
1461 win.cw, cursorthickness); 1445 win.cw, cursorthickness);
1462 break; 1446 break;
1463 case 5: /* Blinking bar */ 1447 case 5: /* Blinking bar */
1464 case 6: /* Steady bar */ 1448 case 6: /* Steady bar */
1465 XftDrawRect(xw.draw, &drawcol, 1449 XftDrawRect(xw.draw, &drawcol,
1466 borderpx + curx * win.cw, 1450 borderpx + cx * win.cw,
1467 borderpx + term.c.y * win.ch, 1451 borderpx + cy * win.ch,
1468 cursorthickness, win.ch); 1452 cursorthickness, win.ch);
1469 break; 1453 break;
1470 } 1454 }
1471 } else { 1455 } else {
1472 XftDrawRect(xw.draw, &drawcol, 1456 XftDrawRect(xw.draw, &drawcol,
1473 borderpx + curx * win.cw, 1457 borderpx + cx * win.cw,
1474 borderpx + term.c.y * win.ch, 1458 borderpx + cy * win.ch,
1475 win.cw - 1, 1); 1459 win.cw - 1, 1);
1476 XftDrawRect(xw.draw, &drawcol, 1460 XftDrawRect(xw.draw, &drawcol,
1477 borderpx + curx * win.cw, 1461 borderpx + cx * win.cw,
1478 borderpx + term.c.y * win.ch, 1462 borderpx + cy * win.ch,
1479 1, win.ch - 1); 1463 1, win.ch - 1);
1480 XftDrawRect(xw.draw, &drawcol, 1464 XftDrawRect(xw.draw, &drawcol,
1481 borderpx + (curx + 1) * win.cw - 1, 1465 borderpx + (cx + 1) * win.cw - 1,
1482 borderpx + term.c.y * win.ch, 1466 borderpx + cy * win.ch,
1483 1, win.ch - 1); 1467 1, win.ch - 1);
1484 XftDrawRect(xw.draw, &drawcol, 1468 XftDrawRect(xw.draw, &drawcol,
1485 borderpx + curx * win.cw, 1469 borderpx + cx * win.cw,
1486 borderpx + (term.c.y + 1) * win.ch - 1, 1470 borderpx + (cy + 1) * win.ch - 1,
1487 win.cw, 1); 1471 win.cw, 1);
1488 } 1472 }
1489 oldx = curx, oldy = term.c.y;
1490} 1473}
1491 1474
1492void 1475void