summaryrefslogtreecommitdiff
path: root/libs/mTextControl/src/FormattedTextDraw.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/mTextControl/src/FormattedTextDraw.cpp')
-rw-r--r--libs/mTextControl/src/FormattedTextDraw.cpp76
1 files changed, 41 insertions, 35 deletions
diff --git a/libs/mTextControl/src/FormattedTextDraw.cpp b/libs/mTextControl/src/FormattedTextDraw.cpp
index e89ab6ad1d..e093048160 100644
--- a/libs/mTextControl/src/FormattedTextDraw.cpp
+++ b/libs/mTextControl/src/FormattedTextDraw.cpp
@@ -156,6 +156,8 @@ HRESULT CFormattedTextDraw::putRTFText(char *newVal)
if (!m_spTextServices)
return S_FALSE;
+ m_bNative = true;
+
STREAMDATATEXT streamData = {};
streamData.isUnicode = false;
streamData.ansi = newVal;
@@ -176,23 +178,25 @@ HRESULT CFormattedTextDraw::putRTFText(char *newVal)
HRESULT CFormattedTextDraw::Draw(HDC hdcDraw, RECT *prc)
{
- LOGFONT lf;
- GetObject(GetCurrentObject(hdcDraw, OBJ_FONT), sizeof(lf), &lf);
-
- LRESULT lResult;
- CHARFORMAT cf;
- cf.cbSize = sizeof(cf);
- cf.dwMask = CFM_FACE/*|CFM_COLOR*/ | CFM_CHARSET | CFM_SIZE |
- (lf.lfWeight >= FW_BOLD ? CFM_BOLD : 0) |
- (lf.lfItalic ? CFM_ITALIC : 0) |
- (lf.lfUnderline ? CFM_UNDERLINE : 0) |
- (lf.lfStrikeOut ? CFM_STRIKEOUT : 0);
- cf.dwEffects = CFE_BOLD | CFE_ITALIC | CFE_STRIKEOUT | CFE_UNDERLINE;
- cf.crTextColor = GetTextColor(hdcDraw);
- cf.bCharSet = lf.lfCharSet;
- cf.yHeight = 1440 * abs(lf.lfHeight) / GetDeviceCaps(hdcDraw, LOGPIXELSY);
- wcsncpy_s(cf.szFaceName, lf.lfFaceName, _TRUNCATE);
- m_spTextServices->TxSendMessage(EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&cf, &lResult);
+ if (!m_bNative) {
+ LOGFONT lf;
+ GetObject(GetCurrentObject(hdcDraw, OBJ_FONT), sizeof(lf), &lf);
+
+ LRESULT lResult;
+ CHARFORMAT cf;
+ cf.cbSize = sizeof(cf);
+ cf.dwMask = CFM_FACE/*|CFM_COLOR*/ | CFM_CHARSET | CFM_SIZE |
+ (lf.lfWeight >= FW_BOLD ? CFM_BOLD : 0) |
+ (lf.lfItalic ? CFM_ITALIC : 0) |
+ (lf.lfUnderline ? CFM_UNDERLINE : 0) |
+ (lf.lfStrikeOut ? CFM_STRIKEOUT : 0);
+ cf.dwEffects = CFE_BOLD | CFE_ITALIC | CFE_STRIKEOUT | CFE_UNDERLINE;
+ cf.crTextColor = GetTextColor(hdcDraw);
+ cf.bCharSet = lf.lfCharSet;
+ cf.yHeight = 1440 * abs(lf.lfHeight) / GetDeviceCaps(hdcDraw, LOGPIXELSY);
+ wcsncpy_s(cf.szFaceName, lf.lfFaceName, _TRUNCATE);
+ m_spTextServices->TxSendMessage(EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&cf, &lResult);
+ }
m_spTextServices->TxDraw(
DVASPECT_CONTENT, // Draw Aspect
@@ -220,27 +224,29 @@ HRESULT CFormattedTextDraw::get_NaturalSize(HDC hdcDraw, long *Width, long *Heig
if (iCaps == 0)
return S_FALSE;
- LOGFONT lf;
- GetObject(GetCurrentObject(hdcDraw, OBJ_FONT), sizeof(lf), &lf);
-
- LRESULT lResult;
- CHARFORMAT cf;
- cf.cbSize = sizeof(cf);
- cf.dwMask = CFM_FACE/*|CFM_COLOR*/ | CFM_CHARSET | CFM_SIZE |
- (lf.lfWeight >= FW_BOLD ? CFM_BOLD : 0) |
- (lf.lfItalic ? CFM_ITALIC : 0) |
- (lf.lfUnderline ? CFM_UNDERLINE : 0) |
- (lf.lfStrikeOut ? CFM_STRIKEOUT : 0);
- cf.dwEffects = CFE_BOLD | CFE_ITALIC | CFE_STRIKEOUT | CFE_UNDERLINE;
- cf.crTextColor = GetTextColor(hdcDraw);
- cf.bCharSet = lf.lfCharSet;
- cf.yHeight = 1440 * abs(lf.lfHeight) / iCaps;
- wcsncpy_s(cf.szFaceName, lf.lfFaceName, _TRUNCATE);
-
if (!m_spTextServices)
return S_FALSE;
- m_spTextServices->TxSendMessage(EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&cf, &lResult);
+ if (!m_bNative) {
+ LOGFONT lf;
+ GetObject(GetCurrentObject(hdcDraw, OBJ_FONT), sizeof(lf), &lf);
+
+ LRESULT lResult;
+ CHARFORMAT cf;
+ cf.cbSize = sizeof(cf);
+ cf.dwMask = CFM_FACE/*|CFM_COLOR*/ | CFM_CHARSET | CFM_SIZE |
+ (lf.lfWeight >= FW_BOLD ? CFM_BOLD : 0) |
+ (lf.lfItalic ? CFM_ITALIC : 0) |
+ (lf.lfUnderline ? CFM_UNDERLINE : 0) |
+ (lf.lfStrikeOut ? CFM_STRIKEOUT : 0);
+ cf.dwEffects = CFE_BOLD | CFE_ITALIC | CFE_STRIKEOUT | CFE_UNDERLINE;
+ cf.crTextColor = GetTextColor(hdcDraw);
+ cf.bCharSet = lf.lfCharSet;
+ cf.yHeight = 1440 * abs(lf.lfHeight) / iCaps;
+ wcsncpy_s(cf.szFaceName, lf.lfFaceName, _TRUNCATE);
+
+ m_spTextServices->TxSendMessage(EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&cf, &lResult);
+ }
*Height = 1;