Eric Pouech : richedit: Fix the para computation when zoom is used.

Alexandre Julliard julliard at winehq.org
Wed Jan 2 07:34:53 CST 2008


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

Author: Eric Pouech <eric.pouech at orange.fr>
Date:   Tue Jan  1 22:04:40 2008 +0100

richedit: Fix the para computation when zoom is used.

---

 dlls/riched20/editor.h |    1 +
 dlls/riched20/paint.c  |   26 ++++++++++++--------------
 dlls/riched20/wrap.c   |    6 +++---
 3 files changed, 16 insertions(+), 17 deletions(-)

diff --git a/dlls/riched20/editor.h b/dlls/riched20/editor.h
index 5cb9b7e..93789d6 100644
--- a/dlls/riched20/editor.h
+++ b/dlls/riched20/editor.h
@@ -214,6 +214,7 @@ BOOL ME_UpdateSelection(ME_TextEditor *editor, const ME_Cursor *pTempCursor);
 BOOL ME_WrapMarkedParagraphs(ME_TextEditor *editor);
 void ME_InvalidateMarkedParagraphs(ME_TextEditor *editor);
 void ME_SendRequestResize(ME_TextEditor *editor, BOOL force);
+int  ME_twips2points(ME_Context *c, int x, int dpi);
 
 /* para.c */
 ME_DisplayItem *ME_GetParagraph(ME_DisplayItem *run); 
diff --git a/dlls/riched20/paint.c b/dlls/riched20/paint.c
index 1107105..8f71fa5 100644
--- a/dlls/riched20/paint.c
+++ b/dlls/riched20/paint.c
@@ -141,6 +141,13 @@ ME_RewrapRepaint(ME_TextEditor *editor)
   ME_Repaint(editor);
 }
 
+int ME_twips2points(ME_Context *c, int x, int dpi)
+{
+  if (c->editor->nZoomNumerator == 0)
+    return x * dpi / 1440;
+  else
+    return x * dpi * c->editor->nZoomNumerator / 1440 / c->editor->nZoomDenominator;
+}
 
 static void ME_DrawTextWithStyle(ME_Context *c, int x, int y, LPCWSTR szText, int nChars, 
   ME_Style *s, int *width, int nSelFrom, int nSelTo, int ymin, int cy) {
@@ -167,17 +174,8 @@ static void ME_DrawTextWithStyle(ME_Context *c, int x, int y, LPCWSTR szText, in
     if (s->fmt.dwEffects & CFE_SUBSCRIPT) yTwipsOffset = -s->fmt.yHeight/12;
   }
   if (yTwipsOffset)
-  {
-    int numerator = 1;
-    int denominator = 1;
-    
-    if (c->editor->nZoomNumerator)
-    {
-      numerator = c->editor->nZoomNumerator;
-      denominator = c->editor->nZoomDenominator;
-    }
-    yOffset = yTwipsOffset * GetDeviceCaps(hDC, LOGPIXELSY) * numerator / denominator / 1440;
-  }
+    yOffset = ME_twips2points(c, yTwipsOffset, GetDeviceCaps(hDC, LOGPIXELSY));
+
   ExtTextOutW(hDC, x, y-yOffset, 0, NULL, szText, nChars, NULL);
   GetTextExtentPoint32W(hDC, szText, nChars, &sz);
   if (width) *width = sz.cx;
@@ -329,11 +327,11 @@ void ME_DrawParagraph(ME_Context *c, ME_DisplayItem *paragraph) {
       case diParagraph:
         para = &p->member.para;
         assert(para);
-        nMargWidth = para->pFmt->dxStartIndent*dpi/1440;
+        nMargWidth = ME_twips2points(c, para->pFmt->dxStartIndent, dpi);
         if (pno != 0)
-          nMargWidth += para->pFmt->dxOffset*dpi/1440;
+          nMargWidth += ME_twips2points(c, para->pFmt->dxOffset, dpi);
         xs = c->rcView.left+nMargWidth;
-        xe = c->rcView.right-(para->pFmt->dxRightIndent*dpi/1440);
+        xe = c->rcView.right - ME_twips2points(c, para->pFmt->dxRightIndent, dpi);
         break;
       case diStartRow:
         y += height;
diff --git a/dlls/riched20/wrap.c b/dlls/riched20/wrap.c
index ae399fb..310aad7 100644
--- a/dlls/riched20/wrap.c
+++ b/dlls/riched20/wrap.c
@@ -352,9 +352,9 @@ static void ME_WrapTextParagraph(ME_Context *c, ME_DisplayItem *tp, DWORD begino
   wc.context = c;
 /*   wc.para_style = tp->member.para.style; */
   wc.style = NULL;
-  wc.nFirstMargin = tp->member.para.pFmt->dxStartIndent*dpi/1440 + beginofs;
-  wc.nLeftMargin = wc.nFirstMargin + tp->member.para.pFmt->dxOffset*dpi/1440 + beginofs;
-  wc.nRightMargin = tp->member.para.pFmt->dxRightIndent*dpi/1440;
+  wc.nFirstMargin = ME_twips2points(c, tp->member.para.pFmt->dxStartIndent, dpi) + beginofs
+  wc.nLeftMargin = wc.nFirstMargin + ME_twips2points(c, tp->member.para.pFmt->dxOffset, dpi) + beginofs
+  wc.nRightMargin = ME_twips2points(c, tp->member.para.pFmt->dxRightIndent, dpi);
   wc.nRow = 0;
   wc.pt.x = 0;
   wc.pt.y = 0;




More information about the wine-cvs mailing list