… | |
… | |
572 | * Change the colour for following text |
572 | * Change the colour for following text |
573 | */ |
573 | */ |
574 | void |
574 | void |
575 | rxvt_term::scr_color (unsigned int color, int fgbg) |
575 | rxvt_term::scr_color (unsigned int color, int fgbg) |
576 | { |
576 | { |
577 | if (color > maxTermCOLOR) |
577 | if (!IN_RANGE_INC (color, minTermCOLOR, maxTermCOLOR)) |
578 | color = fgbg; |
578 | color = fgbg; |
579 | |
579 | |
580 | if (fgbg == Color_fg) |
580 | if (fgbg == Color_fg) |
581 | rstyle = SET_FGCOLOR (rstyle, color); |
581 | rstyle = SET_FGCOLOR (rstyle, color); |
582 | else |
582 | else |
… | |
… | |
1863 | # endif |
1863 | # endif |
1864 | |
1864 | |
1865 | if (OPTION (Opt_visualBell)) |
1865 | if (OPTION (Opt_visualBell)) |
1866 | { |
1866 | { |
1867 | scr_rvideo_mode (!rvideo); /* refresh also done */ |
1867 | scr_rvideo_mode (!rvideo); /* refresh also done */ |
|
|
1868 | display->flush (); |
1868 | rxvt_usleep (VISUAL_BELL_DURATION); |
1869 | rxvt_usleep (VISUAL_BELL_DURATION); |
1869 | scr_rvideo_mode (!rvideo); /* refresh also done */ |
1870 | scr_rvideo_mode (!rvideo); /* refresh also done */ |
1870 | } |
1871 | } |
1871 | else |
1872 | else |
1872 | XBell (display->display, 0); |
1873 | XBell (display->display, 0); |
… | |
… | |
2380 | /* |
2381 | /* |
2381 | * H: cleanup selection |
2382 | * H: cleanup selection |
2382 | */ |
2383 | */ |
2383 | scr_reverse_selection (); |
2384 | scr_reverse_selection (); |
2384 | |
2385 | |
2385 | if (refresh_type & SMOOTH_REFRESH) |
|
|
2386 | XFlush (display->display); |
|
|
2387 | |
|
|
2388 | num_scr = 0; |
2386 | num_scr = 0; |
2389 | num_scr_allow = 1; |
2387 | num_scr_allow = 1; |
2390 | } |
2388 | } |
2391 | |
2389 | |
2392 | void |
2390 | void |
… | |
… | |
2456 | |
2454 | |
2457 | if (really) |
2455 | if (really) |
2458 | XClearWindow (display->display, vt); |
2456 | XClearWindow (display->display, vt); |
2459 | } |
2457 | } |
2460 | |
2458 | |
|
|
2459 | void |
|
|
2460 | rxvt_term::scr_xor_rect (int beg_row, int beg_col, int end_row, int end_col, rend_t rstyle1, rend_t rstyle2) |
|
|
2461 | { |
|
|
2462 | int view_end = -view_start + nrow; |
|
|
2463 | int row, col; |
|
|
2464 | |
|
|
2465 | for (row = max (beg_row, -view_start); row <= min (end_row, view_end); row++) |
|
|
2466 | { |
|
|
2467 | text_t *stp = ROW(row).t; |
|
|
2468 | rend_t *srp = ROW(row).r; |
|
|
2469 | |
|
|
2470 | for (col = beg_col; col < end_col; col++) |
|
|
2471 | srp[col] ^= rstyle1; |
|
|
2472 | |
|
|
2473 | while (col-- > beg_col && (stp[col] == NOCHAR || unicode::is_space (stp[col]))) |
|
|
2474 | srp[col] ^= rstyle2; |
|
|
2475 | |
|
|
2476 | if (++col < end_col) |
|
|
2477 | srp[col] ^= rstyle2; |
|
|
2478 | } |
|
|
2479 | } |
|
|
2480 | |
|
|
2481 | void |
|
|
2482 | rxvt_term::scr_xor_span (int beg_row, int beg_col, int end_row, int end_col, rend_t rstyle) |
|
|
2483 | { |
|
|
2484 | int view_end = -view_start + nrow; |
|
|
2485 | int row, col; |
|
|
2486 | |
|
|
2487 | if (beg_row >= -view_start) |
|
|
2488 | { |
|
|
2489 | col = beg_col; |
|
|
2490 | row = beg_row; |
|
|
2491 | } |
|
|
2492 | else |
|
|
2493 | { |
|
|
2494 | col = 0; |
|
|
2495 | row = -view_start; |
|
|
2496 | } |
|
|
2497 | |
|
|
2498 | for (; row < min (end_row, view_end); row++, col = 0) |
|
|
2499 | for (rend_t *srp = ROW(row).r; col < ncol; col++) |
|
|
2500 | srp[col] ^= rstyle; |
|
|
2501 | |
|
|
2502 | if (row == end_row) |
|
|
2503 | for (rend_t *srp = ROW(row).r; col < end_col; col++) |
|
|
2504 | srp[col] ^= rstyle; |
|
|
2505 | } |
|
|
2506 | |
2461 | /* ------------------------------------------------------------------------- */ |
2507 | /* ------------------------------------------------------------------------- */ |
2462 | void |
2508 | void |
2463 | rxvt_term::scr_reverse_selection () |
2509 | rxvt_term::scr_reverse_selection () |
2464 | { |
2510 | { |
2465 | if (selection.op |
2511 | if (selection.op |
2466 | && current_screen == selection.screen |
2512 | && current_screen == selection.screen |
2467 | && selection.end.row >= -view_start) |
2513 | && selection.end.row >= -view_start) |
2468 | { |
2514 | { |
2469 | int view_end = -view_start + nrow; |
|
|
2470 | int row, col; |
|
|
2471 | |
|
|
2472 | #if ENABLE_FRILLS |
2515 | #if ENABLE_FRILLS |
2473 | if (selection.rect) |
2516 | if (selection.rect) |
2474 | { |
2517 | scr_xor_rect (selection.beg.row, selection.beg.col, |
2475 | for (row = max (selection.beg.row, -view_start); row <= min (selection.end.row, view_end); row++) |
2518 | selection.end.row, selection.end.col, |
2476 | { |
2519 | RS_RVid, RS_RVid | RS_Uline); |
2477 | text_t *stp = ROW(row).t; |
|
|
2478 | rend_t *srp = ROW(row).r; |
|
|
2479 | |
|
|
2480 | for (col = selection.beg.col; col < selection.end.col; col++) |
|
|
2481 | srp[col] ^= RS_RVid; |
|
|
2482 | |
|
|
2483 | while (col-- > selection.beg.col && (stp[col] == NOCHAR || unicode::is_space (stp[col]))) |
|
|
2484 | srp[col] ^= RS_RVid | RS_Uline; |
|
|
2485 | |
|
|
2486 | if (++col < selection.end.col) |
|
|
2487 | srp[col] ^= RS_RVid | RS_Uline; |
|
|
2488 | } |
|
|
2489 | } |
|
|
2490 | else |
2520 | else |
2491 | #endif |
2521 | #endif |
2492 | { |
2522 | scr_xor_span (selection.beg.row, selection.beg.col, |
2493 | if (selection.beg.row >= -view_start) |
2523 | selection.end.row, selection.end.col, |
2494 | { |
2524 | RS_RVid); |
2495 | col = selection.beg.col; |
|
|
2496 | row = selection.beg.row; |
|
|
2497 | } |
|
|
2498 | else |
|
|
2499 | { |
|
|
2500 | col = 0; |
|
|
2501 | row = -view_start; |
|
|
2502 | } |
|
|
2503 | |
|
|
2504 | for (; row < min (selection.end.row, view_end); row++, col = 0) |
|
|
2505 | for (rend_t *srp = ROW(row).r; col < ncol; col++) |
|
|
2506 | srp[col] ^= RS_RVid; |
|
|
2507 | |
|
|
2508 | if (row == selection.end.row) |
|
|
2509 | for (rend_t *srp = ROW(row).r; col < selection.end.col; col++) |
|
|
2510 | srp[col] ^= RS_RVid; |
|
|
2511 | } |
|
|
2512 | } |
2525 | } |
2513 | } |
2526 | } |
2514 | |
2527 | |
2515 | /* ------------------------------------------------------------------------- */ |
2528 | /* ------------------------------------------------------------------------- */ |
2516 | /* |
2529 | /* |