[vim] - patchlevel 781
Karsten Hopp
karsten at fedoraproject.org
Mon Jan 28 11:17:31 UTC 2013
commit c5bd7e029adc8f7872014c7bd512d8a3e82cae78
Author: Karsten Hopp <karsten at redhat.com>
Date: Mon Jan 28 12:11:46 2013 +0100
- patchlevel 781
7.3.781 | 185 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 185 insertions(+), 0 deletions(-)
---
diff --git a/7.3.781 b/7.3.781
new file mode 100644
index 0000000..516ee82
--- /dev/null
+++ b/7.3.781
@@ -0,0 +1,185 @@
+To: vim_dev at googlegroups.com
+Subject: Patch 7.3.781
+Fcc: outbox
+From: Bram Moolenaar <Bram at moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.781
+Problem: Drawing with 'guifontwide' can be slow.
+Solution: Draw multiple characters at a time. (Taro Muraoka)
+Files: src/gui.c
+
+
+*** ../vim-7.3.780/src/gui.c 2012-11-20 12:03:02.000000000 +0100
+--- src/gui.c 2013-01-23 17:28:48.000000000 +0100
+***************
+*** 2380,2386 ****
+ int cl; /* byte length of current char */
+ int comping; /* current char is composing */
+ int scol = col; /* screen column */
+! int dowide; /* use 'guifontwide' */
+
+ /* Break the string at a composing character, it has to be drawn on
+ * top of the previous character. */
+--- 2380,2388 ----
+ int cl; /* byte length of current char */
+ int comping; /* current char is composing */
+ int scol = col; /* screen column */
+! int curr_wide; /* use 'guifontwide' */
+! int prev_wide = FALSE;
+! int wide_changed;
+
+ /* Break the string at a composing character, it has to be drawn on
+ * top of the previous character. */
+***************
+*** 2395,2403 ****
+ && fontset == NOFONTSET
+ # endif
+ && gui.wide_font != NOFONT)
+! dowide = TRUE;
+ else
+! dowide = FALSE;
+ comping = utf_iscomposing(c);
+ if (!comping) /* count cells from non-composing chars */
+ cells += cn;
+--- 2397,2405 ----
+ && fontset == NOFONTSET
+ # endif
+ && gui.wide_font != NOFONT)
+! curr_wide = TRUE;
+ else
+! curr_wide = FALSE;
+ comping = utf_iscomposing(c);
+ if (!comping) /* count cells from non-composing chars */
+ cells += cn;
+***************
+*** 2405,2413 ****
+ if (cl == 0) /* hit end of string */
+ len = i + cl; /* len must be wrong "cannot happen" */
+
+! /* print the string so far if it's the last character or there is
+ * a composing character. */
+! if (i + cl >= len || (comping && i > start) || dowide
+ # if defined(FEAT_GUI_X11)
+ || (cn > 1
+ # ifdef FEAT_XFONTSET
+--- 2407,2417 ----
+ if (cl == 0) /* hit end of string */
+ len = i + cl; /* len must be wrong "cannot happen" */
+
+! wide_changed = curr_wide != prev_wide;
+!
+! /* Print the string so far if it's the last character or there is
+ * a composing character. */
+! if (i + cl >= len || (comping && i > start) || wide_changed
+ # if defined(FEAT_GUI_X11)
+ || (cn > 1
+ # ifdef FEAT_XFONTSET
+***************
+*** 2419,2443 ****
+ # endif
+ )
+ {
+! if (comping || dowide)
+ thislen = i - start;
+ else
+ thislen = i - start + cl;
+ if (thislen > 0)
+ {
+ gui_mch_draw_string(gui.row, scol, s + start, thislen,
+ draw_flags);
+ start += thislen;
+ }
+ scol += cells;
+ cells = 0;
+! if (dowide)
+ {
+! gui_mch_set_font(gui.wide_font);
+! gui_mch_draw_string(gui.row, scol - cn,
+! s + start, cl, draw_flags);
+! gui_mch_set_font(font);
+! start += cl;
+ }
+
+ # if defined(FEAT_GUI_X11)
+--- 2423,2450 ----
+ # endif
+ )
+ {
+! if (comping || wide_changed)
+ thislen = i - start;
+ else
+ thislen = i - start + cl;
+ if (thislen > 0)
+ {
++ if (prev_wide)
++ gui_mch_set_font(gui.wide_font);
+ gui_mch_draw_string(gui.row, scol, s + start, thislen,
+ draw_flags);
++ if (prev_wide)
++ gui_mch_set_font(font);
+ start += thislen;
+ }
+ scol += cells;
+ cells = 0;
+! /* Adjust to not draw a character which width is changed
+! * against with last one. */
+! if (wide_changed && !comping)
+ {
+! scol -= cn;
+! cl = 0;
+ }
+
+ # if defined(FEAT_GUI_X11)
+***************
+*** 2447,2453 ****
+ # ifdef FEAT_XFONTSET
+ && fontset == NOFONTSET
+ # endif
+! && !dowide)
+ gui_mch_draw_string(gui.row, scol - 1, (char_u *)" ",
+ 1, draw_flags);
+ # endif
+--- 2454,2460 ----
+ # ifdef FEAT_XFONTSET
+ && fontset == NOFONTSET
+ # endif
+! && !wide_changed)
+ gui_mch_draw_string(gui.row, scol - 1, (char_u *)" ",
+ 1, draw_flags);
+ # endif
+***************
+*** 2465,2470 ****
+--- 2472,2478 ----
+ # endif
+ start = i + cl;
+ }
++ prev_wide = curr_wide;
+ }
+ /* The stuff below assumes "len" is the length in screen columns. */
+ len = scol - col;
+*** ../vim-7.3.780/src/version.c 2013-01-23 17:15:25.000000000 +0100
+--- src/version.c 2013-01-23 17:28:17.000000000 +0100
+***************
+*** 727,728 ****
+--- 727,730 ----
+ { /* Add new patch number below this line */
++ /**/
++ 781,
+ /**/
+
+--
+GUARD #1: Where'd you get the coconut?
+ARTHUR: We found them.
+GUARD #1: Found them? In Mercea? The coconut's tropical!
+ARTHUR: What do you mean?
+GUARD #1: Well, this is a temperate zone.
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
More information about the scm-commits
mailing list