From 1d065710d3cf39e519f05fd02760006b9a929c38 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Wed, 9 Feb 2011 19:51:47 +0000 Subject: [PATCH] Remove "safety margin" from wxControl::Ellipsize(). When ellipsizing kicks in, the text is much shorter than the available space -- there's a "safety margin" of one character's width that is always left unused. This appears to be some kludge that worked around algorithm defects, not something that should really be needed. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66870 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/control.h | 2 +- src/common/ctrlcmn.cpp | 15 ++++++--------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/include/wx/control.h b/include/wx/control.h index 79d6d833fd..696cf8124b 100644 --- a/include/wx/control.h +++ b/include/wx/control.h @@ -168,7 +168,7 @@ protected: // Ellipsize() helper: static wxString DoEllipsizeSingleLine(const wxString& label, const wxDC& dc, wxEllipsizeMode mode, int maxWidth, - int replacementWidth, int marginWidth); + int replacementWidth); // this field contains the label in wx format, i.e. with '&' mnemonics, // as it was passed to the last SetLabel() call diff --git a/src/common/ctrlcmn.cpp b/src/common/ctrlcmn.cpp index c1b4fa67a7..da1a63db74 100644 --- a/src/common/ctrlcmn.cpp +++ b/src/common/ctrlcmn.cpp @@ -239,10 +239,9 @@ wxControlBase::GetCompositeControlsDefaultAttributes(wxWindowVariant WXUNUSED(va /* static and protected */ wxString wxControlBase::DoEllipsizeSingleLine(const wxString& curLine, const wxDC& dc, wxEllipsizeMode mode, int maxFinalWidthPx, - int replacementWidthPx, int marginWidthPx) + int replacementWidthPx) { - wxASSERT_MSG(replacementWidthPx > 0 && marginWidthPx > 0, - "Invalid parameters"); + wxASSERT_MSG(replacementWidthPx > 0, "Invalid parameters"); wxASSERT_LEVEL_2_MSG(!curLine.Contains('\n'), "Use Ellipsize() instead!"); @@ -269,8 +268,7 @@ wxString wxControlBase::DoEllipsizeSingleLine(const wxString& curLine, const wxD return curLine; // we don't need to do any ellipsization! int excessPx = wxMin(totalWidthPx - maxFinalWidthPx + - replacementWidthPx + - marginWidthPx, // security margin + replacementWidthPx, totalWidthPx); wxASSERT(excessPx>0); // excessPx should be in the [1;totalWidthPx] range @@ -407,12 +405,12 @@ wxString wxControlBase::DoEllipsizeSingleLine(const wxString& curLine, const wxD wxASSERT(removedPx >= excessPx); // if there is space for the replacement dots, add them - if ((int)totalWidthPx-removedPx+replacementWidthPx < maxFinalWidthPx) + if ((int)totalWidthPx-removedPx+replacementWidthPx <= maxFinalWidthPx) ret.insert(initialCharToRemove, wxELLIPSE_REPLACEMENT); // if everything was ok, we should have shortened this line // enough to make it fit in maxFinalWidthPx: - wxASSERT_LEVEL_2(dc.GetTextExtent(ret).GetWidth() <= maxFinalWidthPx); + wxASSERT(dc.GetTextExtent(ret).GetWidth() <= maxFinalWidthPx); return ret; } @@ -428,7 +426,6 @@ wxString wxControlBase::Ellipsize(const wxString& label, const wxDC& dc, // change because of e.g. a font change; however we calculate them only once // when ellipsizing multiline labels: int replacementWidth = dc.GetTextExtent(wxELLIPSE_REPLACEMENT).GetWidth(); - int marginWidth = dc.GetCharWidth(); // NB: we must handle correctly labels with newlines: wxString curLine; @@ -437,7 +434,7 @@ wxString wxControlBase::Ellipsize(const wxString& label, const wxDC& dc, if ( pc == label.end() || *pc == wxS('\n') ) { curLine = DoEllipsizeSingleLine(curLine, dc, mode, maxFinalWidth, - replacementWidth, marginWidth); + replacementWidth); // add this (ellipsized) row to the rest of the label ret << curLine; -- 2.45.2