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.219 by root, Mon Jan 9 23:00:07 2006 UTC vs.
Revision 1.227 by root, Sun Jan 15 05:14:12 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
613 want_refresh = 1; 613 want_refresh = 1;
614 num_scr += count; 614 num_scr += count;
615 615
616 if (count > 0 616 if (count > 0
617 && row1 == 0 617 && row1 == 0
618 && row2 == nrow - 1
619 && (current_screen == PRIMARY || OPTION (Opt_secondaryScroll))) 618 && (current_screen == PRIMARY || OPTION (Opt_secondaryScroll)))
620 { 619 {
621 nsaved = min (nsaved + count, saveLines); 620 nsaved = min (nsaved + count, saveLines);
622 621
623 HOOK_INVOKE ((this, HOOK_SCROLL_BACK, DT_INT, count, DT_INT, nsaved, DT_END)); 622 HOOK_INVOKE ((this, HOOK_SCROLL_BACK, DT_INT, count, DT_INT, nsaved, DT_END));
624 623
624 // scroll everything up 'count' lines
625 term_start = (term_start + count) % total_rows; 625 term_start = (term_start + count) % total_rows;
626 626
627 {
628 // severe bottommost scrolled line
629 line_t &l = ROW(row2 - count);
630 l.touch ();
631 l.is_longer (0);
632 }
633
634 // erase newly scorlled-in lines
635 for (int i = count; i; --i )
636 {
637 // basically this is a slightly optimized scr_blank_screen_mem
638 // it is worth the effort on slower machines
639 line_t &l = ROW(nrow - i);
640
641 scr_blank_line (l, 0, l.l, rstyle);
642
643 l.l = 0;
644 l.f = 0;
645 }
646
647 // now copy lines below the scroll region bottom to the
648 // bottom of the screen again, so they look as if they
649 // hadn't moved.
650 for (int i = nrow; --i > row2; )
651 {
652 line_t &l1 = ROW(i - count);
653 line_t &l2 = ROW(i);
654
655 ::swap (l1, l2);
656 l2.touch ();
657 }
658
659 // move and/or clear selection, if any
627 if (selection.op && current_screen == selection.screen) 660 if (selection.op && current_screen == selection.screen)
628 { 661 {
629 selection.beg.row -= count; 662 selection.beg.row -= count;
630 selection.end.row -= count; 663 selection.end.row -= count;
631 selection.mark.row -= count; 664 selection.mark.row -= count;
637 CLEAR_ALL_SELECTION (); 670 CLEAR_ALL_SELECTION ();
638 selection.op = SELECTION_CLEAR; 671 selection.op = SELECTION_CLEAR;
639 } 672 }
640 } 673 }
641 674
642 for (int i = count; i--; ) 675 // finally move the view window, if desired
643 {
644 // basically thi is a slightly optimized scr_blank_screen_mem
645 // it is worth the effort on slower machines
646 line_t &l = ROW(row2 - i);
647
648 scr_blank_line (l, 0, l.l, rstyle);
649
650 l.l = 0;
651 l.f = 0;
652 }
653
654 if (OPTION (Opt_scrollWithBuffer) 676 if (OPTION (Opt_scrollWithBuffer)
655 && view_start != 0 677 && view_start != 0
656 && view_start != saveLines) 678 && view_start != saveLines)
657 scr_page (UP, count); 679 scr_page (UP, count);
658 } 680 }
2381 /* 2403 /*
2382 * H: cleanup selection 2404 * H: cleanup selection
2383 */ 2405 */
2384 scr_reverse_selection (); 2406 scr_reverse_selection ();
2385 2407
2386 if (refresh_type & SMOOTH_REFRESH)
2387 XFlush (display->display);
2388
2389 num_scr = 0; 2408 num_scr = 0;
2390 num_scr_allow = 1; 2409 num_scr_allow = 1;
2391} 2410}
2392 2411
2393void 2412void
2498 row = -view_start; 2517 row = -view_start;
2499 } 2518 }
2500 2519
2501 for (; row < min (end_row, view_end); row++, col = 0) 2520 for (; row < min (end_row, view_end); row++, col = 0)
2502 for (rend_t *srp = ROW(row).r; col < ncol; col++) 2521 for (rend_t *srp = ROW(row).r; col < ncol; col++)
2503 srp[col] ^= RS_RVid; 2522 srp[col] ^= rstyle;
2504 2523
2505 if (row == end_row) 2524 if (row == end_row)
2506 for (rend_t *srp = ROW(row).r; col < end_col; col++) 2525 for (rend_t *srp = ROW(row).r; col < end_col; col++)
2507 srp[col] ^= RS_RVid; 2526 srp[col] ^= rstyle;
2508} 2527}
2509 2528
2510/* ------------------------------------------------------------------------- */ 2529/* ------------------------------------------------------------------------- */
2511void 2530void
2512rxvt_term::scr_reverse_selection () 2531rxvt_term::scr_reverse_selection ()
3024 { 3043 {
3025 display->set_selection_owner (this); 3044 display->set_selection_owner (this);
3026 return true; 3045 return true;
3027 } 3046 }
3028 else 3047 else
3048 {
3049 selection_clear ();
3029 return false; 3050 return false;
3051 }
3030 3052
3031#if 0 3053#if 0
3032 XTextProperty ct; 3054 XTextProperty ct;
3033 3055
3034 if (XwcTextListToTextProperty (display->display, &selection.text, 1, XStringStyle, &ct) >= 0) 3056 if (XwcTextListToTextProperty (display->display, &selection.text, 1, XStringStyle, &ct) >= 0)
3047void 3069void
3048rxvt_term::selection_click (int clicks, int x, int y) 3070rxvt_term::selection_click (int clicks, int x, int y)
3049{ 3071{
3050 clicks = ((clicks - 1) % 3) + 1; 3072 clicks = ((clicks - 1) % 3) + 1;
3051 selection.clicks = clicks; /* save clicks so extend will work */ 3073 selection.clicks = clicks; /* save clicks so extend will work */
3074
3075 if (clicks == 2 && !selection.rect
3076 && HOOK_INVOKE ((this, HOOK_SEL_EXTEND, DT_END)))
3077 {
3078 MEvent.clicks = 1; // what a mess
3079 selection.screen = current_screen;
3080 selection.op = SELECTION_CONT;
3081 return;
3082 }
3052 3083
3053 selection_start_colrow (Pixel2Col (x), Pixel2Row (y)); 3084 selection_start_colrow (Pixel2Col (x), Pixel2Row (y));
3054 3085
3055 if (clicks == 2 || clicks == 3) 3086 if (clicks == 2 || clicks == 3)
3056 selection_extend_colrow (selection.mark.col, 3087 selection_extend_colrow (selection.mark.col,
3352 else if (selection.clicks == 2) 3383 else if (selection.clicks == 2)
3353 { 3384 {
3354 if (ROWCOL_IS_AFTER (selection.end, selection.beg)) 3385 if (ROWCOL_IS_AFTER (selection.end, selection.beg))
3355 selection.end.col--; 3386 selection.end.col--;
3356 3387
3357 if (!HOOK_INVOKE ((this, HOOK_SEL_EXTEND, DT_END)))
3358 {
3359 selection_delimit_word (UP, &selection.beg, &selection.beg); 3388 selection_delimit_word (UP, &selection.beg, &selection.beg);
3360 selection_delimit_word (DN, &selection.end, &selection.end); 3389 selection_delimit_word (DN, &selection.end, &selection.end);
3361 }
3362 } 3390 }
3363 else if (selection.clicks == 3) 3391 else if (selection.clicks == 3)
3364 { 3392 {
3365#if ENABLE_FRILLS 3393#if ENABLE_FRILLS
3366 if (OPTION (Opt_tripleclickwords)) 3394 if (OPTION (Opt_tripleclickwords))

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines