Karsten Hopp 4d1648
To: vim-dev@vim.org
Karsten Hopp 4d1648
Subject: Patch 7.0.122
Karsten Hopp 4d1648
Fcc: outbox
Karsten Hopp 4d1648
From: Bram Moolenaar <Bram@moolenaar.net>
Karsten Hopp 4d1648
Mime-Version: 1.0
Karsten Hopp 4d1648
Content-Type: text/plain; charset=ISO-8859-1
Karsten Hopp 4d1648
Content-Transfer-Encoding: 8bit
Karsten Hopp 4d1648
------------
Karsten Hopp 4d1648
Karsten Hopp 4d1648
Patch 7.0.122
Karsten Hopp 4d1648
Problem:    GUI: When clearing after a bold, double-wide character half a
Karsten Hopp 4d1648
	    character may be drawn.
Karsten Hopp 4d1648
Solution:   Check for double-wide character and redraw it. (Yukihiro Nakadaira)
Karsten Hopp 4d1648
Files:	    src/screen.c
Karsten Hopp 4d1648
Karsten Hopp 4d1648
Karsten Hopp 4d1648
*** ../vim-7.0.121/src/screen.c	Thu Sep 14 21:04:09 2006
Karsten Hopp 4d1648
--- src/screen.c	Sat Oct  7 15:13:43 2006
Karsten Hopp 4d1648
***************
Karsten Hopp 4d1648
*** 5079,5093 ****
Karsten Hopp 4d1648
  	     * character too.  If we didn't skip any blanks above, then we
Karsten Hopp 4d1648
  	     * only redraw if the character wasn't already redrawn anyway.
Karsten Hopp 4d1648
  	     */
Karsten Hopp 4d1648
! 	    if (gui.in_use && (col > startCol || !redraw_this)
Karsten Hopp 4d1648
! # ifdef FEAT_MBYTE
Karsten Hopp 4d1648
! 		    && enc_dbcs == 0
Karsten Hopp 4d1648
! # endif
Karsten Hopp 4d1648
! 	       )
Karsten Hopp 4d1648
  	    {
Karsten Hopp 4d1648
  		hl = ScreenAttrs[off_to];
Karsten Hopp 4d1648
  		if (hl > HL_ALL || (hl & HL_BOLD))
Karsten Hopp 4d1648
! 		    screen_char(off_to - 1, row, col + coloff - 1);
Karsten Hopp 4d1648
  	    }
Karsten Hopp 4d1648
  #endif
Karsten Hopp 4d1648
  	    screen_fill(row, row + 1, col + coloff, clear_width + coloff,
Karsten Hopp 4d1648
--- 5079,5116 ----
Karsten Hopp 4d1648
  	     * character too.  If we didn't skip any blanks above, then we
Karsten Hopp 4d1648
  	     * only redraw if the character wasn't already redrawn anyway.
Karsten Hopp 4d1648
  	     */
Karsten Hopp 4d1648
! 	    if (gui.in_use && (col > startCol || !redraw_this))
Karsten Hopp 4d1648
  	    {
Karsten Hopp 4d1648
  		hl = ScreenAttrs[off_to];
Karsten Hopp 4d1648
  		if (hl > HL_ALL || (hl & HL_BOLD))
Karsten Hopp 4d1648
! 		{
Karsten Hopp 4d1648
! 		    int prev_cells = 1;
Karsten Hopp 4d1648
! # ifdef FEAT_MBYTE
Karsten Hopp 4d1648
! 		    if (enc_utf8)
Karsten Hopp 4d1648
! 			/* for utf-8, ScreenLines[char_offset + 1] == 0 means
Karsten Hopp 4d1648
! 			 * that its width is 2. */
Karsten Hopp 4d1648
! 			prev_cells = ScreenLines[off_to - 1] == 0 ? 2 : 1;
Karsten Hopp 4d1648
! 		    else if (enc_dbcs != 0)
Karsten Hopp 4d1648
! 		    {
Karsten Hopp 4d1648
! 			/* find previous character by counting from first
Karsten Hopp 4d1648
! 			 * column and get its width. */
Karsten Hopp 4d1648
! 			unsigned off = LineOffset[row];
Karsten Hopp 4d1648
! 
Karsten Hopp 4d1648
! 			while (off < off_to)
Karsten Hopp 4d1648
! 			{
Karsten Hopp 4d1648
! 			    prev_cells = (*mb_off2cells)(off);
Karsten Hopp 4d1648
! 			    off += prev_cells;
Karsten Hopp 4d1648
! 			}
Karsten Hopp 4d1648
! 		    }
Karsten Hopp 4d1648
! 
Karsten Hopp 4d1648
! 		    if (enc_dbcs != 0 && prev_cells > 1)
Karsten Hopp 4d1648
! 			screen_char_2(off_to - prev_cells, row,
Karsten Hopp 4d1648
! 						   col + coloff - prev_cells);
Karsten Hopp 4d1648
! 		    else
Karsten Hopp 4d1648
! # endif
Karsten Hopp 4d1648
! 			screen_char(off_to - prev_cells, row,
Karsten Hopp 4d1648
! 						   col + coloff - prev_cells);
Karsten Hopp 4d1648
! 		}
Karsten Hopp 4d1648
  	    }
Karsten Hopp 4d1648
  #endif
Karsten Hopp 4d1648
  	    screen_fill(row, row + 1, col + coloff, clear_width + coloff,
Karsten Hopp 4d1648
*** ../vim-7.0.121/src/version.c	Sun Oct  8 13:56:53 2006
Karsten Hopp 4d1648
--- src/version.c	Mon Oct  9 22:10:17 2006
Karsten Hopp 4d1648
***************
Karsten Hopp 4d1648
*** 668,669 ****
Karsten Hopp 4d1648
--- 668,671 ----
Karsten Hopp 4d1648
  {   /* Add new patch number below this line */
Karsten Hopp 4d1648
+ /**/
Karsten Hopp 4d1648
+     122,
Karsten Hopp 4d1648
  /**/
Karsten Hopp 4d1648
Karsten Hopp 4d1648
-- 
Karsten Hopp 4d1648
How To Keep A Healthy Level Of Insanity:
Karsten Hopp 4d1648
7. Finish all your sentences with "in accordance with the prophecy".
Karsten Hopp 4d1648
Karsten Hopp 4d1648
 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
Karsten Hopp 4d1648
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
Karsten Hopp 4d1648
\\\        download, build and distribute -- http://www.A-A-P.org        ///
Karsten Hopp 4d1648
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///