Huw Davies : riched20: Remove InternalInsertTextFromCursor().

Alexandre Julliard julliard at winehq.org
Thu Oct 15 15:41:10 CDT 2020


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

Author: Huw Davies <huw at codeweavers.com>
Date:   Thu Oct 15 10:39:40 2020 +0100

riched20: Remove InternalInsertTextFromCursor().

Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/riched20/caret.c | 110 ++++++++++++++++++++++----------------------------
 1 file changed, 49 insertions(+), 61 deletions(-)

diff --git a/dlls/riched20/caret.c b/dlls/riched20/caret.c
index d66dd57383b..4764dec8f33 100644
--- a/dlls/riched20/caret.c
+++ b/dlls/riched20/caret.c
@@ -460,20 +460,6 @@ BOOL ME_DeleteTextAtCursor(ME_TextEditor *editor, int nCursor, int nChars)
                                nChars, FALSE);
 }
 
-static ME_DisplayItem *
-ME_InternalInsertTextFromCursor(ME_TextEditor *editor, int nCursor,
-                                const WCHAR *str, int len, ME_Style *style,
-                                int flags)
-{
-  ME_Cursor *p = &editor->pCursors[nCursor];
-
-  editor->bCaretAtEnd = FALSE;
-  
-  assert(p->pRun->type == diRun);
-  
-  return run_get_di( run_insert( editor, p, style, str, len, flags ) );
-}
-
 static struct re_object* create_re_object(const REOBJECT *reo)
 {
   struct re_object *reobj = heap_alloc(sizeof(*reobj));
@@ -489,96 +475,98 @@ static struct re_object* create_re_object(const REOBJECT *reo)
 
 void ME_InsertOLEFromCursor(ME_TextEditor *editor, const REOBJECT* reo, int nCursor)
 {
-  ME_Style              *pStyle = ME_GetInsertStyle(editor, nCursor);
-  ME_DisplayItem        *di;
-  WCHAR                 space = ' ';
-  ME_DisplayItem        *di_prev = NULL;
-  struct re_object      *reobj_prev = NULL;
-  
+  ME_Style *style = ME_GetInsertStyle( editor, nCursor );
+  ME_Run *run, *prev;
+  const WCHAR space = ' ';
+  struct re_object *reobj_prev = NULL;
+  ME_Cursor *cursor = editor->pCursors + nCursor;
+
   /* FIXME no no no */
   if (ME_IsSelection(editor))
     ME_DeleteSelection(editor);
 
-  di = ME_InternalInsertTextFromCursor(editor, nCursor, &space, 1, pStyle,
-                                       MERF_GRAPHICS);
-  di->member.run.reobj = create_re_object(reo);
+  run = run_insert( editor, cursor, style, &space, 1, MERF_GRAPHICS );
+  editor->bCaretAtEnd = FALSE;
+
+  run->reobj = create_re_object( reo );
 
-  di_prev = di;
-  while (ME_PrevRun(NULL, &di_prev, TRUE))
+  prev = run;
+  while ((prev = run_prev_all_paras( prev )))
   {
-    if (di_prev->member.run.reobj)
+    if (prev->reobj)
     {
-      reobj_prev = di_prev->member.run.reobj;
+      reobj_prev = prev->reobj;
       break;
     }
   }
   if (reobj_prev)
-    list_add_after(&reobj_prev->entry, &di->member.run.reobj->entry);
+    list_add_after(&reobj_prev->entry, &run->reobj->entry);
   else
-    list_add_head(&editor->reobj_list, &di->member.run.reobj->entry);
+    list_add_head(&editor->reobj_list, &run->reobj->entry);
 
-  ME_ReleaseStyle(pStyle);
+  ME_ReleaseStyle( style );
 }
 
 
 void ME_InsertEndRowFromCursor(ME_TextEditor *editor, int nCursor)
 {
-  ME_Style              *pStyle = ME_GetInsertStyle(editor, nCursor);
-  WCHAR                 space = ' ';
+  ME_Style *style = ME_GetInsertStyle( editor, nCursor );
+  const WCHAR space = ' ';
+  ME_Cursor *cursor = editor->pCursors + nCursor;
 
   /* FIXME no no no */
   if (ME_IsSelection(editor))
     ME_DeleteSelection(editor);
 
-  ME_InternalInsertTextFromCursor(editor, nCursor, &space, 1, pStyle,
-                                  MERF_ENDROW);
-  ME_ReleaseStyle(pStyle);
+  run_insert( editor, cursor, style, &space, 1, MERF_ENDROW );
+  editor->bCaretAtEnd = FALSE;
+
+  ME_ReleaseStyle( style );
 }
 
 
 void ME_InsertTextFromCursor(ME_TextEditor *editor, int nCursor, 
-  const WCHAR *str, int len, ME_Style *style)
+                             const WCHAR *str, int len, ME_Style *style)
 {
   const WCHAR *pos;
-  ME_Cursor *p = NULL;
+  ME_Cursor *cursor = editor->pCursors + nCursor;
   int oldLen;
 
   /* FIXME really HERE ? */
   if (ME_IsSelection(editor))
     ME_DeleteSelection(editor);
 
-  /* FIXME: is this too slow? */
-  /* Didn't affect performance for WM_SETTEXT (around 50sec/30K) */
   oldLen = ME_GetTextLength(editor);
 
   /* text operations set modified state */
   editor->nModifyStep = 1;
+  editor->bCaretAtEnd = FALSE;
 
   assert(style);
 
-  assert(nCursor>=0 && nCursor<editor->nCursors);
-  if (len == -1)
-    len = lstrlenW(str);
+  if (len == -1) len = lstrlenW( str );
 
   /* grow the text limit to fit our text */
-  if(editor->nTextLimit < oldLen +len)
-    editor->nTextLimit = oldLen + len;
+  if (editor->nTextLimit < oldLen + len) editor->nTextLimit = oldLen + len;
 
   pos = str;
 
   while (len)
   {
     /* FIXME this sucks - no respect for unicode (what else can be a line separator in unicode?) */
-    while(pos - str < len && *pos != '\r' && *pos != '\n' && *pos != '\t')
+    while (pos - str < len && *pos != '\r' && *pos != '\n' && *pos != '\t')
       pos++;
 
-    if (pos != str) { /* handle text */
-      ME_InternalInsertTextFromCursor(editor, nCursor, str, pos-str, style, 0);
-    } else if (*pos == '\t') { /* handle tabs */
-      WCHAR tab = '\t';
-      ME_InternalInsertTextFromCursor(editor, nCursor, &tab, 1, style, MERF_TAB);
+    if (pos != str) /* handle text */
+      run_insert( editor, cursor, style, str, pos - str, 0 );
+    else if (*pos == '\t') /* handle tabs */
+    {
+      const WCHAR tab = '\t';
+      run_insert( editor, cursor, style, &tab, 1, MERF_TAB );
       pos++;
-    } else { /* handle EOLs */
+    }
+    else /* handle EOLs */
+    {
       ME_Run *end_run, *run, *prev;
       ME_Paragraph *new_para;
       int eol_len = 0;
@@ -596,7 +584,9 @@ void ME_InsertTextFromCursor(ME_TextEditor *editor, int nCursor,
           eol_len = 3;
         else
           eol_len = 1;
-      } else {
+      }
+      else
+      {
         assert(*pos == '\n');
         eol_len = 1;
       }
@@ -605,8 +595,8 @@ void ME_InsertTextFromCursor(ME_TextEditor *editor, int nCursor,
       if (!editor->bEmulateVersion10 && eol_len == 3)
       {
         /* handle special \r\r\n sequence (richedit 2.x and higher only) */
-        WCHAR space = ' ';
-        ME_InternalInsertTextFromCursor(editor, nCursor, &space, 1, style, 0);
+        const WCHAR space = ' ';
+        run_insert( editor, cursor, style, &space, 1, 0 );
       }
       else
       {
@@ -618,17 +608,15 @@ void ME_InsertTextFromCursor(ME_TextEditor *editor, int nCursor,
           eol_len = 1;
         }
 
-        p = &editor->pCursors[nCursor];
-
-        if (p->nOffset == p->pRun->member.run.len)
+        if (cursor->nOffset == cursor->pRun->member.run.len)
         {
-           run = run_next( &p->pRun->member.run );
-           if (!run) run = &p->pRun->member.run;
+           run = run_next( &cursor->pRun->member.run );
+           if (!run) run = &cursor->pRun->member.run;
         }
         else
         {
-          if (p->nOffset) run_split( editor, p );
-          run = &p->pRun->member.run;
+          if (cursor->nOffset) run_split( editor, cursor );
+          run = &cursor->pRun->member.run;
         }
 
         new_para = &ME_SplitParagraph( editor, run_get_di( run ), style, eol_str, eol_len, 0 )->member.para;




More information about the wine-cvs mailing list