summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorChris Sherlock <chris.sherlock79@gmail.com>2023-10-17 18:06:59 +1100
committerTomaž Vajngerl <quikee@gmail.com>2023-11-06 07:21:23 +0100
commit183973ece62c0eefbd841dcf99f7fb8716f0fca1 (patch)
tree8527e2d99a1152d1eb1bc4176d41002754c98856 /vcl
parent5886a6faad298cb42fdb4ceb52120bfc569c6e14 (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.cxx97
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;
}