Module: wine Branch: master Commit: 4ad945337fe396925f751d6de4c7b97035f055a1 URL: http://source.winehq.org/git/wine.git/?a=commit;h=4ad945337fe396925f751d6de4...
Author: Aric Stewart aric@codeweavers.com Date: Fri Mar 30 11:46:34 2012 -0500
user32: While calculating lines, discard uniscribe data for non-visible lines.
---
dlls/user32/edit.c | 20 +++++++++++++------- 1 files changed, 13 insertions(+), 7 deletions(-)
diff --git a/dlls/user32/edit.c b/dlls/user32/edit.c index ab87418..316df2a 100644 --- a/dlls/user32/edit.c +++ b/dlls/user32/edit.c @@ -476,6 +476,12 @@ static SCRIPT_STRING_ANALYSIS EDIT_UpdateUniscribeData(EDITSTATE *es, HDC dc, IN } }
+static inline INT get_vertical_line_count(EDITSTATE *es) +{ + INT vlc = (es->format_rect.bottom - es->format_rect.top) / es->line_height; + return max(1,vlc); +} + /********************************************************************* * * EDIT_BuildLineDefs_ML @@ -496,6 +502,7 @@ static void EDIT_BuildLineDefs_ML(EDITSTATE *es, INT istart, INT iend, INT delta INT line_count = es->line_count; INT orig_net_length; RECT rc; + INT vlc;
if (istart == iend && delta == 0) return; @@ -536,6 +543,7 @@ static void EDIT_BuildLineDefs_ML(EDITSTATE *es, INT istart, INT iend, INT delta
fw = es->format_rect.right - es->format_rect.left; current_position = es->text + current_line->index; + vlc = get_vertical_line_count(es); do { if (current_line != start_line) { @@ -726,6 +734,11 @@ static void EDIT_BuildLineDefs_ML(EDITSTATE *es, INT istart, INT iend, INT delta es->text_width = max(es->text_width, current_line->width); current_position += current_line->length; previous_line = current_line; + + /* Discard data for non-visible lines. It will be calculated as needed */ + if ((line_index < es->y_offset) || (line_index > es->y_offset + vlc)) + EDIT_InvalidateUniscribeData_linedef(current_line); + current_line = current_line->next; line_index++; } while (previous_line->ending != END_0); @@ -1460,13 +1473,6 @@ static void EDIT_SL_InvalidateText(EDITSTATE *es, INT start, INT end) EDIT_UpdateText(es, &rc, TRUE); }
- -static inline INT get_vertical_line_count(EDITSTATE *es) -{ - INT vlc = (es->format_rect.bottom - es->format_rect.top) / es->line_height; - return max(1,vlc); -} - /********************************************************************* * * EDIT_ML_InvalidateText