]> git.saurik.com Git - wxWidgets.git/commitdiff
Remove "safety margin" from wxControl::Ellipsize().
authorVáclav Slavík <vslavik@fastmail.fm>
Wed, 9 Feb 2011 19:51:47 +0000 (19:51 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Wed, 9 Feb 2011 19:51:47 +0000 (19:51 +0000)
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
src/common/ctrlcmn.cpp

index 79d6d833fd080034ddad3a5ac43890d65c6130df..696cf8124be5edeeef8d978a37d328e8f63c386f 100644 (file)
@@ -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
index c1b4fa67a7e915c439adff0f1569738d53122ac5..da1a63db74ad7ee1cf4e15204b9379d433e158a4 100644 (file)
@@ -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;