From db9e2202075cf96368060c4e3f990cc95e3dc6d9 Mon Sep 17 00:00:00 2001 From: Birunthan Mohanathas Date: Mon, 12 Aug 2013 18:50:48 +0300 Subject: [PATCH] Gfx: Minor tweaks --- Common/Gfx/TextFormatD2D.cpp | 19 +++++++++++-------- Common/Gfx/TextFormatD2D_Test.cpp | 14 ++++++++++++-- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/Common/Gfx/TextFormatD2D.cpp b/Common/Gfx/TextFormatD2D.cpp index 5a395bfa..d0b7c40e 100644 --- a/Common/Gfx/TextFormatD2D.cpp +++ b/Common/Gfx/TextFormatD2D.cpp @@ -84,18 +84,21 @@ void TextFormatD2D::CreateLayout( textLayout1->SetCharacterSpacing(emOffset, emOffset, 0.0f, range); } - // If only one line is visible, disable wrapping so that as much text as possible is shown - // after trimming. - // TODO: Fix this for when more than one line is visible. UINT32 lineCount = 0; DWRITE_LINE_METRICS lineMetrics[2]; HRESULT hr = m_TextLayout->GetLineMetrics(lineMetrics, _countof(lineMetrics), &lineCount); - if (SUCCEEDED(hr) && - lineMetrics[0].isTrimmed && - lineMetrics[1].isTrimmed && - lineMetrics[1].height == 0.0f) + if (SUCCEEDED(hr)) { - m_TextLayout->SetWordWrapping(DWRITE_WORD_WRAPPING_NO_WRAP); + // If only one line is visible, disable wrapping so that as much text as possible is shown + // after trimming. + // TODO: Fix this for when more than one line is visible. + if (lineCount >= 2 && + lineMetrics[0].isTrimmed && + lineMetrics[1].isTrimmed && + lineMetrics[1].height == 0.0f) + { + m_TextLayout->SetWordWrapping(DWRITE_WORD_WRAPPING_NO_WRAP); + } } } } diff --git a/Common/Gfx/TextFormatD2D_Test.cpp b/Common/Gfx/TextFormatD2D_Test.cpp index f36d6c96..78c21538 100644 --- a/Common/Gfx/TextFormatD2D_Test.cpp +++ b/Common/Gfx/TextFormatD2D_Test.cpp @@ -45,7 +45,9 @@ public: std::unique_ptr textFormat((TextFormatD2D*)m_D2D->CreateTextFormat()); textFormat->SetProperties(L"Arial", 10, false, false, nullptr); - DWRITE_TEXT_METRICS metrics = textFormat->GetMetrics(L"test", 4, true); + DWRITE_TEXT_METRICS metrics; + + metrics = textFormat->GetMetrics(L"test", 4, true); Assert::AreEqual(26, (int)metrics.width); Assert::AreEqual(16, (int)metrics.height); @@ -59,14 +61,22 @@ public: std::unique_ptr textFormat((TextFormatD2D*)m_D2D->CreateTextFormat()); textFormat->SetProperties(L"Arial", 10, false, false, nullptr); - DWRITE_TEXT_METRICS metrics = textFormat->GetMetrics(L"test\n", 5, false); + DWRITE_TEXT_METRICS metrics; + + metrics = textFormat->GetMetrics(L"test\n", 5, false); + Assert::AreEqual(15, (int)metrics.height); + metrics = textFormat->GetMetrics(L"test\r\n", 6, false); Assert::AreEqual(15, (int)metrics.height); metrics = textFormat->GetMetrics(L"test\n ", 6, false); Assert::AreEqual(30, (int)metrics.height); + metrics = textFormat->GetMetrics(L"test\r\n ", 7, false); + Assert::AreEqual(30, (int)metrics.height); metrics = textFormat->GetMetrics(L"test\n\n", 6, false); Assert::AreEqual(30, (int)metrics.height); + metrics = textFormat->GetMetrics(L"test\r\n\r\n", 8, false); + Assert::AreEqual(30, (int)metrics.height); } };