ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/screen.C
(Generate patch)

Comparing rxvt-unicode/src/screen.C (file contents):
Revision 1.432 by sf-exg, Sun Jan 13 22:30:47 2013 UTC vs.
Revision 1.433 by sf-exg, Thu Jan 31 08:07:14 2013 UTC

150 l.r[col] = rend; 150 l.r[col] = rend;
151 col++; 151 col++;
152 } while (col < ncol && l.t[col] == NOCHAR); 152 } while (col < ncol && l.t[col] == NOCHAR);
153} 153}
154 154
155// set the rendition of a single wide character beginning at the given column
156void
157rxvt_term::scr_set_char_rend (line_t &l, int col, rend_t rend)
158{
159 do {
160 l.r[col] = rend;
161 col++;
162 } while (col < ncol && l.t[col] == NOCHAR);
163}
164
155/* ------------------------------------------------------------------------- * 165/* ------------------------------------------------------------------------- *
156 * SCREEN INITIALISATION * 166 * SCREEN INITIALISATION *
157 * ------------------------------------------------------------------------- */ 167 * ------------------------------------------------------------------------- */
158 168
159void 169void
2032rxvt_term::scr_refresh () NOTHROW 2042rxvt_term::scr_refresh () NOTHROW
2033{ 2043{
2034 int16_t col, row, /* column/row we're processing */ 2044 int16_t col, row, /* column/row we're processing */
2035 ocrow; /* old cursor row */ 2045 ocrow; /* old cursor row */
2036 int i; /* tmp */ 2046 int i; /* tmp */
2037#ifndef NO_CURSORCOLOR
2038 rend_t cc1; /* store colours at cursor position (s) */
2039#endif
2040 rend_t *crp; // cursor rendition pointer
2041 rend_t ccol1, /* Cursor colour */ 2047 rend_t ccol1, /* Cursor colour */
2042 ccol2; /* Cursor colour2 */ 2048 ccol2; /* Cursor colour2 */
2049 rend_t cur_rend;
2050 int cur_col;
2043 2051
2044 want_refresh = 0; /* screen is current */ 2052 want_refresh = 0; /* screen is current */
2045 2053
2046 if (refresh_type == NO_REFRESH || !mapped) 2054 if (refresh_type == NO_REFRESH || !mapped)
2047 return; 2055 return;
2086 int col = screen.cur.col; 2094 int col = screen.cur.col;
2087 2095
2088 while (col && ROW(screen.cur.row).t[col] == NOCHAR) 2096 while (col && ROW(screen.cur.row).t[col] == NOCHAR)
2089 col--; 2097 col--;
2090 2098
2091 crp = &ROW(screen.cur.row).r[col]; 2099 cur_rend = ROW(screen.cur.row).r[col];
2100 cur_col = col;
2092 2101
2093#ifndef NO_CURSORCOLOR 2102#ifndef NO_CURSORCOLOR
2094 cc1 = *crp & (RS_fgMask | RS_bgMask);
2095 if (ISSET_PIXCOLOR (Color_cursor)) 2103 if (ISSET_PIXCOLOR (Color_cursor))
2096 ccol1 = Color_cursor; 2104 ccol1 = Color_cursor;
2097 else 2105 else
2098#endif 2106#endif
2099#ifdef CURSOR_COLOR_IS_RENDITION_COLOR 2107#ifdef CURSOR_COLOR_IS_RENDITION_COLOR
2113 ccol2 = Color_bg; 2121 ccol2 = Color_bg;
2114#endif 2122#endif
2115 2123
2116 if (focus) 2124 if (focus)
2117 { 2125 {
2126 rend_t rend = cur_rend;
2127
2118 if (option (Opt_cursorUnderline)) 2128 if (option (Opt_cursorUnderline))
2119 *crp ^= RS_Uline; 2129 rend ^= RS_Uline;
2120 else 2130 else
2121 { 2131 {
2122 *crp ^= RS_RVid; 2132 rend ^= RS_RVid;
2123 *crp = SET_FGCOLOR (*crp, ccol1); 2133 rend = SET_FGCOLOR (rend, ccol1);
2124 *crp = SET_BGCOLOR (*crp, ccol2); 2134 rend = SET_BGCOLOR (rend, ccol2);
2125 } 2135 }
2136
2137 scr_set_char_rend (ROW(screen.cur.row), cur_col, rend);
2126 } 2138 }
2127 } 2139 }
2128 2140
2129 /* make sure no outline cursor is left around */ 2141 /* make sure no outline cursor is left around */
2130 setoldcursor = 0; 2142 setoldcursor = 0;
2449 * G: cleanup cursor and display outline cursor if necessary 2461 * G: cleanup cursor and display outline cursor if necessary
2450 */ 2462 */
2451 if (showcursor) 2463 if (showcursor)
2452 { 2464 {
2453 if (focus) 2465 if (focus)
2454 { 2466 scr_set_char_rend (ROW(screen.cur.row), cur_col, cur_rend);
2455 if (option (Opt_cursorUnderline))
2456 *crp ^= RS_Uline;
2457 else
2458 {
2459 *crp ^= RS_RVid;
2460#ifndef NO_CURSORCOLOR
2461 *crp = (*crp & ~ (RS_fgMask | RS_bgMask)) | cc1;
2462#endif
2463 }
2464 }
2465 else if (oldcursor.row >= 0) 2467 else if (oldcursor.row >= 0)
2466 { 2468 {
2467 int cursorwidth = 1; 2469 int cursorwidth = 1;
2468 int col = oldcursor.col; 2470 int col = oldcursor.col;
2469 2471

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines