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