Huw Davies : riched20: Make it possible to perform point -> char conversion while holding a context.
Alexandre Julliard
julliard at winehq.org
Thu Feb 14 15:01:32 CST 2013
Module: wine
Branch: master
Commit: 42b0c6ea3376443e67ea1598764fe2f4200f0173
URL: http://source.winehq.org/git/wine.git/?a=commit;h=42b0c6ea3376443e67ea1598764fe2f4200f0173
Author: Huw Davies <huw at codeweavers.com>
Date: Thu Feb 14 14:16:20 2013 +0000
riched20: Make it possible to perform point -> char conversion while holding a context.
---
dlls/riched20/editor.h | 1 +
dlls/riched20/run.c | 33 +++++++++++++++++++++++----------
2 files changed, 24 insertions(+), 10 deletions(-)
diff --git a/dlls/riched20/editor.h b/dlls/riched20/editor.h
index 5383f82..de95448 100644
--- a/dlls/riched20/editor.h
+++ b/dlls/riched20/editor.h
@@ -142,6 +142,7 @@ void ME_CheckCharOffsets(ME_TextEditor *editor) DECLSPEC_HIDDEN;
void ME_PropagateCharOffset(ME_DisplayItem *p, int shift) DECLSPEC_HIDDEN;
/* this one accounts for 1/2 char tolerance */
int ME_CharFromPointCursor(ME_TextEditor *editor, int cx, ME_Run *run) DECLSPEC_HIDDEN;
+int ME_PointFromCharContext(ME_Context *c, ME_Run *pRun, int nOffset) DECLSPEC_HIDDEN;
int ME_PointFromChar(ME_TextEditor *editor, ME_Run *pRun, int nOffset) DECLSPEC_HIDDEN;
int ME_CanJoinRuns(const ME_Run *run1, const ME_Run *run2) DECLSPEC_HIDDEN;
void ME_JoinRuns(ME_TextEditor *editor, ME_DisplayItem *p) DECLSPEC_HIDDEN;
diff --git a/dlls/riched20/run.c b/dlls/riched20/run.c
index 37445a1..2808045 100644
--- a/dlls/riched20/run.c
+++ b/dlls/riched20/run.c
@@ -487,44 +487,57 @@ static void ME_GetTextExtent(ME_Context *c, LPCWSTR szText, int nChars, ME_Style
}
/******************************************************************************
- * ME_PointFromChar
+ * ME_PointFromCharContext
*
* Returns a run-relative pixel position given a run-relative character
* position (character offset)
*/
-int ME_PointFromChar(ME_TextEditor *editor, ME_Run *pRun, int nOffset)
+int ME_PointFromCharContext(ME_Context *c, ME_Run *pRun, int nOffset)
{
SIZE size;
- ME_Context c;
ME_String *mask_text = NULL;
WCHAR *str;
- ME_InitContext(&c, editor, ITextHost_TxGetDC(editor->texthost));
if (pRun->nFlags & MERF_GRAPHICS)
{
if (nOffset)
- ME_GetOLEObjectSize(&c, pRun, &size);
- ME_DestroyContext(&c);
+ ME_GetOLEObjectSize(c, pRun, &size);
return nOffset != 0;
} else if (pRun->nFlags & MERF_ENDPARA) {
nOffset = 0;
}
- if (editor->cPasswordMask)
+ if (c->editor->cPasswordMask)
{
- mask_text = ME_MakeStringR(editor->cPasswordMask, pRun->len);
+ mask_text = ME_MakeStringR(c->editor->cPasswordMask, pRun->len);
str = mask_text->szData;
}
else
str = get_text( pRun, 0 );
- ME_GetTextExtent(&c, str, nOffset, pRun->style, &size);
- ME_DestroyContext(&c);
+ ME_GetTextExtent(c, str, nOffset, pRun->style, &size);
ME_DestroyString( mask_text );
return size.cx;
}
/******************************************************************************
+ * ME_PointFromChar
+ *
+ * Calls ME_PointFromCharContext after first creating a context.
+ */
+int ME_PointFromChar(ME_TextEditor *editor, ME_Run *pRun, int nOffset)
+{
+ ME_Context c;
+ int ret;
+
+ ME_InitContext(&c, editor, ITextHost_TxGetDC(editor->texthost));
+ ret = ME_PointFromCharContext( &c, pRun, nOffset );
+ ME_DestroyContext(&c);
+
+ return ret;
+}
+
+/******************************************************************************
* ME_GetRunSizeCommon
*
* Finds width, height, ascent and descent of a run, up to given character
More information about the wine-cvs
mailing list