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.217 by root, Mon Jan 9 19:01:56 2006 UTC vs.
Revision 1.226 by root, Thu Jan 12 09:55:44 2006 UTC

572 * Change the colour for following text 572 * Change the colour for following text
573 */ 573 */
574void 574void
575rxvt_term::scr_color (unsigned int color, int fgbg) 575rxvt_term::scr_color (unsigned int color, int fgbg)
576{ 576{
577 if (color > maxTermCOLOR) 577 if (!IN_RANGE_INC (color, minCOLOR, 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
2392void 2390void
2456 2454
2457 if (really) 2455 if (really)
2458 XClearWindow (display->display, vt); 2456 XClearWindow (display->display, vt);
2459} 2457}
2460 2458
2459void
2460rxvt_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
2481void
2482rxvt_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/* ------------------------------------------------------------------------- */
2462void 2508void
2463rxvt_term::scr_reverse_selection () 2509rxvt_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/*
3008 { 3021 {
3009 display->set_selection_owner (this); 3022 display->set_selection_owner (this);
3010 return true; 3023 return true;
3011 } 3024 }
3012 else 3025 else
3026 {
3027 selection_clear ();
3013 return false; 3028 return false;
3029 }
3014 3030
3015#if 0 3031#if 0
3016 XTextProperty ct; 3032 XTextProperty ct;
3017 3033
3018 if (XwcTextListToTextProperty (display->display, &selection.text, 1, XStringStyle, &ct) >= 0) 3034 if (XwcTextListToTextProperty (display->display, &selection.text, 1, XStringStyle, &ct) >= 0)
3031void 3047void
3032rxvt_term::selection_click (int clicks, int x, int y) 3048rxvt_term::selection_click (int clicks, int x, int y)
3033{ 3049{
3034 clicks = ((clicks - 1) % 3) + 1; 3050 clicks = ((clicks - 1) % 3) + 1;
3035 selection.clicks = clicks; /* save clicks so extend will work */ 3051 selection.clicks = clicks; /* save clicks so extend will work */
3052
3053 if (clicks == 2 && !selection.rect
3054 && HOOK_INVOKE ((this, HOOK_SEL_EXTEND, DT_END)))
3055 {
3056 MEvent.clicks = 1; // what a mess
3057 selection.screen = current_screen;
3058 selection.op = SELECTION_CONT;
3059 return;
3060 }
3036 3061
3037 selection_start_colrow (Pixel2Col (x), Pixel2Row (y)); 3062 selection_start_colrow (Pixel2Col (x), Pixel2Row (y));
3038 3063
3039 if (clicks == 2 || clicks == 3) 3064 if (clicks == 2 || clicks == 3)
3040 selection_extend_colrow (selection.mark.col, 3065 selection_extend_colrow (selection.mark.col,
3336 else if (selection.clicks == 2) 3361 else if (selection.clicks == 2)
3337 { 3362 {
3338 if (ROWCOL_IS_AFTER (selection.end, selection.beg)) 3363 if (ROWCOL_IS_AFTER (selection.end, selection.beg))
3339 selection.end.col--; 3364 selection.end.col--;
3340 3365
3341 if (!HOOK_INVOKE ((this, HOOK_SEL_EXTEND, DT_END)))
3342 {
3343 selection_delimit_word (UP, &selection.beg, &selection.beg); 3366 selection_delimit_word (UP, &selection.beg, &selection.beg);
3344 selection_delimit_word (DN, &selection.end, &selection.end); 3367 selection_delimit_word (DN, &selection.end, &selection.end);
3345 }
3346 } 3368 }
3347 else if (selection.clicks == 3) 3369 else if (selection.clicks == 3)
3348 { 3370 {
3349#if ENABLE_FRILLS 3371#if ENABLE_FRILLS
3350 if (OPTION (Opt_tripleclickwords)) 3372 if (OPTION (Opt_tripleclickwords))

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines