Gfx: Make D2D acknowledge trailing whitespace followed by a NBSP/MMSP

This hacky workaround makes D2D behavior consistent with GDI+.
This commit is contained in:
Birunthan Mohanathas 2013-08-11 12:08:19 +03:00
parent 180adbc759
commit 176a9414f5

View File

@ -387,6 +387,26 @@ bool MeterString::Update()
break; break;
} }
// Ugly hack to make D2D render trailing spaces followed by a non-breaking space correctly.
// By default, D2D ignores all trailing whitespace. Both GDI+ and D2D, however, acknowledge the
// presense of the zero-width space (and give it a width of 0px), so we append the zero-width
// space after each non-breaking space.
size_t pos = 0;
while (true)
{
const WCHAR spaceChars[] =
{
L'\u00A0', // No-Break Space
L'\u205F' // Medium Mathematical Space
};
pos = m_String.find_first_of(spaceChars, pos, _countof(spaceChars));
if (pos == std::wstring::npos) break;
m_String.insert(pos + 1, 1, L'\u200B');
pos += 2;
}
if (!m_WDefined || !m_HDefined) if (!m_WDefined || !m_HDefined)
{ {
// Calculate the text size // Calculate the text size