diff options
Diffstat (limited to '')
| -rw-r--r-- | x.c | 61 |
1 files changed, 22 insertions, 39 deletions
| @@ -1387,41 +1387,26 @@ xdrawglyph(Glyph g, int x, int y) | |||
| 1387 | } | 1387 | } |
| 1388 | 1388 | ||
| 1389 | void | 1389 | void |
| 1390 | xdrawcursor(void) | 1390 | xdrawcursor(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 | ||
| 1492 | void | 1475 | void |
