From 4b52555d714a166af0b2f486cdf67e5f373f86d1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Wed, 9 Feb 2011 19:52:34 +0000 Subject: [PATCH] Don't eliminate text completely in Ellipsize(). If the shortened text is so short there's nothing left of the original, show one character and "...". This is standard behaviour on both Windows and OS X, in addition to making lot of sense. Fixes #11360. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66874 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/ctrlcmn.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/common/ctrlcmn.cpp b/src/common/ctrlcmn.cpp index ce76a88625..fc41159953 100755 --- a/src/common/ctrlcmn.cpp +++ b/src/common/ctrlcmn.cpp @@ -402,6 +402,11 @@ wxString wxControlBase::DoEllipsizeSingleLine(const wxString& curLine, const wxD calc.Init(0, 1); while ( !calc.IsShortEnough() ) calc.RemoveFromEnd(); + + // always show at least one character of the string: + if ( calc.m_nCharsToRemove == len ) + return wxString(wxELLIPSE_REPLACEMENT) + curLine[len-1]; + break; } @@ -444,6 +449,15 @@ wxString wxControlBase::DoEllipsizeSingleLine(const wxString& curLine, const wxD else calc.RemoveFromEnd(); } + + // Always show at least one character of the string. + // Additionally, if there's only one character left, prefer + // "a..." to "...a": + if ( calc.m_nCharsToRemove == len || + calc.m_nCharsToRemove == len - 1 ) + { + return curLine[0] + wxString(wxELLIPSE_REPLACEMENT); + } } break; @@ -452,6 +466,11 @@ wxString wxControlBase::DoEllipsizeSingleLine(const wxString& curLine, const wxD calc.Init(len - 1, 1); while ( !calc.IsShortEnough() ) calc.RemoveFromStart(); + + // always show at least one character of the string: + if ( calc.m_nCharsToRemove == len ) + return curLine[0] + wxString(wxELLIPSE_REPLACEMENT); + break; } -- 2.45.2