diff options
author | Chris Sherlock <chris.sherlock79@gmail.com> | 2023-10-17 18:06:59 +1100 |
---|---|---|
committer | Tomaž Vajngerl <quikee@gmail.com> | 2023-11-06 07:21:23 +0100 |
commit | 183973ece62c0eefbd841dcf99f7fb8716f0fca1 (patch) | |
tree | 8527e2d99a1152d1eb1bc4176d41002754c98856 /vcl | |
parent | 5886a6faad298cb42fdb4ceb52120bfc569c6e14 (diff) |
vcl: flatten TextLayoutHelper::GetNewsEllipsisString()
Change-Id: Ie94ce7c75ab96b8f7186f9f0c455dfa3a9f1683f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158072
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/source/text/textlayout.cxx | 97 |
1 files changed, 42 insertions, 55 deletions
diff --git a/vcl/source/text/textlayout.cxx b/vcl/source/text/textlayout.cxx index db2226842d09..95e5d54a4b3c 100644 --- a/vcl/source/text/textlayout.cxx +++ b/vcl/source/text/textlayout.cxx @@ -144,76 +144,63 @@ namespace vcl OUString aTempLastStr1 = "..." + aLastStr; if (GetTextWidth(aTempLastStr1, 0, aTempLastStr1.getLength()) > nMaxWidth) + return GetEllipsisString(aStr, nMaxWidth, DrawTextFlags::EndEllipsis); + + sal_Int32 nFirstContent = 0; + while (nFirstContent < nLastContent) + { + nFirstContent++; + if (ImplIsCharIn(aStr[nFirstContent], pSepChars)) + break; + } + + while ((nFirstContent < nLastContent) && ImplIsCharIn(aStr[nFirstContent], pSepChars)) { - aStr = GetEllipsisString(aStr, nMaxWidth, DrawTextFlags::EndEllipsis); + nFirstContent++; } - else + + if (nFirstContent >= nLastContent) + return GetEllipsisString(aStr, nMaxWidth, nStyle | DrawTextFlags::EndEllipsis); + + if (nFirstContent > 4) + nFirstContent = 4; + + OUString aFirstStr = OUString::Concat(aStr.subView(0, nFirstContent)) + "..."; + OUString aTempStr = aFirstStr + aLastStr; + + if (GetTextWidth(aTempStr, 0, aTempStr.getLength() ) > nMaxWidth) + return GetEllipsisString(aStr, nMaxWidth, nStyle | DrawTextFlags::EndEllipsis); + + do { - sal_Int32 nFirstContent = 0; + aStr = aTempStr; + + if (nLastContent > aStr.getLength()) + nLastContent = aStr.getLength(); + while (nFirstContent < nLastContent) { - nFirstContent++; - if (ImplIsCharIn( aStr[nFirstContent], pSepChars)) + nLastContent--; + if (ImplIsCharIn(aStr[nLastContent], pSepChars)) break; - } - while ((nFirstContent < nLastContent) && ImplIsCharIn(aStr[nFirstContent], pSepChars)) - { - nFirstContent++; } - // MEM continue here - if (nFirstContent >= nLastContent) + while ((nFirstContent < nLastContent) && ImplIsCharIn(aStr[nLastContent-1], pSepChars)) { - aStr = GetEllipsisString(aStr, nMaxWidth, nStyle | DrawTextFlags::EndEllipsis); + nLastContent--; } - else - { - if (nFirstContent > 4) - nFirstContent = 4; - OUString aFirstStr = OUString::Concat(aStr.subView(0, nFirstContent)) + "..."; - OUString aTempStr = aFirstStr + aLastStr; + if (nFirstContent < nLastContent) + { + std::u16string_view aTempLastStr = aStr.subView(nLastContent); + aTempStr = aFirstStr + aTempLastStr; - if (GetTextWidth(aTempStr, 0, aTempStr.getLength() ) > nMaxWidth) - { - aStr = GetEllipsisString(aStr, nMaxWidth, nStyle | DrawTextFlags::EndEllipsis); - } - else - { - do - { - aStr = aTempStr; - - if (nLastContent > aStr.getLength()) - nLastContent = aStr.getLength(); - - while (nFirstContent < nLastContent) - { - nLastContent--; - if (ImplIsCharIn(aStr[nLastContent], pSepChars)) - break; - - } - - while ((nFirstContent < nLastContent) && ImplIsCharIn(aStr[nLastContent-1], pSepChars)) - { - nLastContent--; - } - - if (nFirstContent < nLastContent) - { - std::u16string_view aTempLastStr = aStr.subView(nLastContent); - aTempStr = aFirstStr + aTempLastStr; - - if (GetTextWidth(aTempStr, 0, aTempStr.getLength()) > nMaxWidth) - break; - } - } - while (nFirstContent < nLastContent); - } + if (GetTextWidth(aTempStr, 0, aTempStr.getLength()) > nMaxWidth) + break; } } + while (nFirstContent < nLastContent); return aStr; } |