[PATCH 24/24] [RichEdit]: simplify first para style handling by creating a context

Eric Pouech eric.pouech at orange.fr
Tue Jan 1 15:05:46 CST 2008




A+
---

 dlls/riched20/editor.c |    7 ++-----
 dlls/riched20/editor.h |    2 +-
 dlls/riched20/para.c   |   16 ++++++++++++----
 3 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/dlls/riched20/editor.c b/dlls/riched20/editor.c
index 2ac6154..51d119a 100644
--- a/dlls/riched20/editor.c
+++ b/dlls/riched20/editor.c
@@ -1159,14 +1159,12 @@ static BOOL ME_ShowContextMenu(ME_TextEditor *editor, int x, int y)
 
 ME_TextEditor *ME_MakeEditor(HWND hWnd) {
   ME_TextEditor *ed = ALLOC_OBJ(ME_TextEditor);
-  HDC hDC;
   int i;
   ed->hWnd = hWnd;
   ed->bEmulateVersion10 = FALSE;
   ed->pBuffer = ME_MakeText();
-  hDC = GetDC(hWnd);
-  ME_MakeFirstParagraph(hDC, ed->pBuffer);
-  ReleaseDC(hWnd, hDC);
+  ed->nZoomNumerator = ed->nZoomDenominator = 0;
+  ME_MakeFirstParagraph(ed);
   ed->bCaretShown = FALSE;
   ed->nCursors = 4;
   ed->pCursors = ALLOC_N_OBJ(ME_Cursor, ed->nCursors);
@@ -1191,7 +1189,6 @@ ME_TextEditor *ME_MakeEditor(HWND hWnd) {
   ed->nParagraphs = 1;
   ed->nLastSelStart = ed->nLastSelEnd = 0;
   ed->pLastSelStartPara = ed->pLastSelEndPara = ME_FindItemFwd(ed->pBuffer->pFirst, diParagraph);
-  ed->nZoomNumerator = ed->nZoomDenominator = 0;
   ed->bRedraw = TRUE;
   ed->bHideSelection = FALSE;
   ed->nInvalidOfs = -1;
diff --git a/dlls/riched20/editor.h b/dlls/riched20/editor.h
index 8e99175..145dc91 100644
--- a/dlls/riched20/editor.h
+++ b/dlls/riched20/editor.h
@@ -219,7 +219,7 @@ int  ME_twips2pointsY(ME_Context *c, int y);
 /* para.c */
 ME_DisplayItem *ME_GetParagraph(ME_DisplayItem *run); 
 void ME_GetSelectionParas(ME_TextEditor *editor, ME_DisplayItem **para, ME_DisplayItem **para_end);
-void ME_MakeFirstParagraph(HDC hDC, ME_TextBuffer *editor);
+void ME_MakeFirstParagraph(ME_TextEditor *editor);
 ME_DisplayItem *ME_SplitParagraph(ME_TextEditor *editor, ME_DisplayItem *rp, ME_Style *style);
 ME_DisplayItem *ME_JoinParagraphs(ME_TextEditor *editor, ME_DisplayItem *tp);
 void ME_DumpParaStyle(ME_Paragraph *s);
diff --git a/dlls/riched20/para.c b/dlls/riched20/para.c
index 356a827..cd09b3d 100644
--- a/dlls/riched20/para.c
+++ b/dlls/riched20/para.c
@@ -25,16 +25,22 @@ WINE_DEFAULT_DEBUG_CHANNEL(richedit);
 
 static const WCHAR wszParagraphSign[] = {0xB6, 0};
 
-void ME_MakeFirstParagraph(HDC hDC, ME_TextBuffer *text)
+void ME_MakeFirstParagraph(ME_TextEditor *editor)
 {
+  ME_Context c;
+  HDC hDC;
   PARAFORMAT2 fmt;
   CHARFORMAT2W cf;
   LOGFONTW lf;
   HFONT hf;
+  ME_TextBuffer *text = editor->pBuffer;
   ME_DisplayItem *para = ME_MakeDI(diParagraph);
   ME_DisplayItem *run;
   ME_Style *style;
 
+  hDC = GetDC(editor->hWnd);
+
+  ME_InitContext(&c, editor, hDC);
   hf = (HFONT)GetStockObject(SYSTEM_FONT);
   assert(hf);
   GetObjectW(hf, sizeof(LOGFONTW), &lf);
@@ -48,9 +54,8 @@ void ME_MakeFirstParagraph(HDC hDC, ME_TextBuffer *text)
   
   cf.dwEffects = CFE_AUTOCOLOR | CFE_AUTOBACKCOLOR;
   lstrcpyW(cf.szFaceName, lf.lfFaceName);
-  cf.yHeight=lf.lfHeight*1440/GetDeviceCaps(hDC, LOGPIXELSY);
-  if (lf.lfWeight>=700) /* FIXME correct weight ? */
-    cf.dwEffects |= CFE_BOLD;
+  cf.yHeight = ME_twips2pointsY(&c, lf.lfHeight);
+  if (lf.lfWeight >= 700) cf.dwEffects |= CFE_BOLD;
   cf.wWeight = lf.lfWeight;
   if (lf.lfItalic) cf.dwEffects |= CFE_ITALIC;
   cf.bUnderlineType = (lf.lfUnderline) ? CFU_CF1UNDERLINE : CFU_UNDERLINENONE;
@@ -79,6 +84,9 @@ void ME_MakeFirstParagraph(HDC hDC, ME_TextBuffer *text)
   text->pLast->member.para.prev_para = para;
 
   text->pLast->member.para.nCharOfs = 1;
+
+  ME_DestroyContext(&c);
+  ReleaseDC(editor->hWnd, hDC);
 }
  
 void ME_MarkAllForWrapping(ME_TextEditor *editor)





More information about the wine-patches mailing list