Aric Stewart : user32: Improvement for performance in soft linebreaking.

Alexandre Julliard julliard at winehq.org
Fri Oct 28 12:48:37 CDT 2011


Module: wine
Branch: master
Commit: c83841ca0e08902bad88d1d9c3e04db8b3097bcd
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c83841ca0e08902bad88d1d9c3e04db8b3097bcd

Author: Aric Stewart <aric at codeweavers.com>
Date:   Thu Oct 27 13:38:15 2011 -0500

user32: Improvement for performance in soft linebreaking.

---

 dlls/user32/edit.c |   10 ++++++++--
 1 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/dlls/user32/edit.c b/dlls/user32/edit.c
index 71df7e6..bfee8f5 100644
--- a/dlls/user32/edit.c
+++ b/dlls/user32/edit.c
@@ -602,15 +602,20 @@ static void EDIT_BuildLineDefs_ML(EDITSTATE *es, INT istart, INT iend, INT delta
 		if (!(es->style & ES_AUTOHSCROLL)) {
 		   if (current_line->width > fw) {
 
-			INT prev;
+			INT prev, next;
 			int w;
 			const SIZE *sz;
+			float d;
 
 			prev = current_line->net_length - 1;
 			w = current_line->net_length;
+			d = (float)current_line->width/(float)fw;
+			if (d > 1.2) d -= 0.2;
+			next = prev/d;
+			if (next >= prev) next = prev-1;
 			do {
 				prev = EDIT_CallWordBreakProc(es, current_position - es->text,
-						prev-1, current_line->net_length, WB_LEFT);
+						next, current_line->net_length, WB_LEFT);
 				current_line->net_length = prev;
 				EDIT_InvalidateUniscribeData_linedef(current_line);
 				EDIT_UpdateUniscribeData_linedef(es, NULL, current_line);
@@ -619,6 +624,7 @@ static void EDIT_BuildLineDefs_ML(EDITSTATE *es, INT istart, INT iend, INT delta
 					current_line->width = sz->cx;
 				else
 					prev = 0;
+				next = prev - 1;
 			} while (prev && current_line->width > fw);
 			current_line->net_length = w;
 




More information about the wine-cvs mailing list