@ -1387,41 +1387,26 @@ xdrawglyph(Glyph g, int x, int y)
}
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 ;
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 */
og = term . line [ oldy ] [ oldx ] ;
if ( selected ( oldx , oldy ) )
if ( selected ( ox , oy ) )
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 .
*/
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 ( selected ( term . c . x , term . c . y ) ) {
if ( selected ( cx , cy ) ) {
drawcol = dc . col [ defaultcs ] ;
g . fg = defaultrcs ;
} else {
@ -1429,7 +1414,7 @@ xdrawcursor(void)
g . fg = defaultcs ;
}
} else {
if ( selected ( term . c . x , term . c . y ) ) {
if ( selected ( cx , cy ) ) {
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 */
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 ,
borderpx + cur x * win . cw ,
borderpx + ( term . c . y + 1 ) * win . ch - \
borderpx + cx * win . cw ,
borderpx + ( cy + 1 ) * win . ch - \
cursorthickness ,
win . cw , cursorthickness ) ;
break ;
case 5 : /* Blinking bar */
case 6 : /* Steady bar */
XftDrawRect ( xw . draw , & drawcol ,
borderpx + cur x * win . cw ,
borderpx + term . c . y * win . ch ,
borderpx + cx * win . cw ,
borderpx + cy * win . ch ,
cursorthickness , win . ch ) ;
break ;
}
} else {
XftDrawRect ( xw . draw , & drawcol ,
borderpx + cur x * win . cw ,
borderpx + term . c . y * win . ch ,
borderpx + cx * win . cw ,
borderpx + cy * win . ch ,
win . cw - 1 , 1 ) ;
XftDrawRect ( xw . draw , & drawcol ,
borderpx + cur x * win . cw ,
borderpx + term . c . y * win . ch ,
borderpx + cx * win . cw ,
borderpx + cy * win . ch ,
1 , win . ch - 1 ) ;
XftDrawRect ( xw . draw , & drawcol ,
borderpx + ( cur x + 1 ) * win . cw - 1 ,
borderpx + term . c . y * win . ch ,
borderpx + ( cx + 1 ) * win . cw - 1 ,
borderpx + cy * win . ch ,
1 , win . ch - 1 ) ;
XftDrawRect ( xw . draw , & drawcol ,
borderpx + cur x * win . cw ,
borderpx + ( term . c . y + 1 ) * win . ch - 1 ,
borderpx + cx * win . cw ,
borderpx + ( cy + 1 ) * win . ch - 1 ,
win . cw , 1 ) ;
}
oldx = curx , oldy = term . c . y ;
}
void