no real changes, just rename the variables to make the code more readable and to prepare everything for the next commit:

- add postfix "Px" to all variables containing numbers of pixels
- add postfix "ToRemove" to initialChar and nChars vars to make it clear what they are for

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63659 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Francesco Montorsi
2010-03-10 11:07:57 +00:00
parent 5d7792236f
commit 8ab11e46c0

View File

@@ -233,14 +233,14 @@ wxControlBase::GetCompositeControlsDefaultAttributes(wxWindowVariant WXUNUSED(va
// wxControlBase - ellipsization code // wxControlBase - ellipsization code
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
#define wxELLIPSE_REPLACEMENT wxT("...") #define wxELLIPSE_REPLACEMENT wxS("...")
/* static and protected */ /* static and protected */
wxString wxControlBase::DoEllipsizeSingleLine(const wxString& curLine, const wxDC& dc, wxString wxControlBase::DoEllipsizeSingleLine(const wxString& curLine, const wxDC& dc,
wxEllipsizeMode mode, int maxFinalWidth, wxEllipsizeMode mode, int maxFinalWidthPx,
int replacementWidth, int marginWidth) int replacementWidthPx, int marginWidthPx)
{ {
wxASSERT_MSG(replacementWidth > 0 && marginWidth > 0, wxASSERT_MSG(replacementWidthPx > 0 && marginWidthPx > 0,
"Invalid parameters"); "Invalid parameters");
wxASSERT_MSG(!curLine.Contains('\n'), wxASSERT_MSG(!curLine.Contains('\n'),
"Use Ellipsize() instead!"); "Use Ellipsize() instead!");
@@ -250,81 +250,81 @@ wxString wxControlBase::DoEllipsizeSingleLine(const wxString& curLine, const wxD
// NOTE: this function assumes that any mnemonic/tab character has already // NOTE: this function assumes that any mnemonic/tab character has already
// been handled if it was necessary to handle them (see Ellipsize()) // been handled if it was necessary to handle them (see Ellipsize())
if (maxFinalWidth <= 0) if (maxFinalWidthPx <= 0)
return wxEmptyString; return wxEmptyString;
wxArrayInt charOffsets; wxArrayInt charOffsetsPx;
size_t len = curLine.length(); size_t len = curLine.length();
if (len == 0 || if (len == 0 ||
!dc.GetPartialTextExtents(curLine, charOffsets)) !dc.GetPartialTextExtents(curLine, charOffsetsPx))
return curLine; return curLine;
wxASSERT(charOffsets.GetCount() == len); wxASSERT(charOffsetsPx.GetCount() == len);
size_t totalWidth = charOffsets.Last(); size_t totalWidthPx = charOffsetsPx.Last();
if ( totalWidth <= (size_t)maxFinalWidth ) if ( totalWidthPx <= (size_t)maxFinalWidthPx )
return curLine; // we don't need to do any ellipsization! return curLine; // we don't need to do any ellipsization!
int excessPixels = totalWidth - maxFinalWidth + int excessPx = totalWidthPx - maxFinalWidthPx +
replacementWidth + replacementWidthPx +
marginWidth; // security margin (NEEDED!) marginWidthPx; // security margin (NEEDED!)
wxASSERT(excessPixels>0); wxASSERT(excessPx>0);
// remove characters in excess // remove characters in excess
size_t initialChar, // index of first char to erase size_t initialCharToRemove, // index of first char to erase
nChars; // how many chars do we need to erase? nCharsToRemove; // how many chars do we need to erase?
switch (mode) switch (mode)
{ {
case wxELLIPSIZE_START: case wxELLIPSIZE_START:
initialChar = 0; initialCharToRemove = 0;
for ( nChars=0; for ( nCharsToRemove=0;
nChars < len && charOffsets[nChars] < excessPixels; nCharsToRemove < len && charOffsetsPx[nCharsToRemove] < excessPx;
nChars++ ) nCharsToRemove++ )
; ;
break; break;
case wxELLIPSIZE_MIDDLE: case wxELLIPSIZE_MIDDLE:
{ {
// the start & end of the removed span of chars // the start & end of the removed span of chars
initialChar = len/2; initialCharToRemove = len/2;
size_t endChar = len/2; size_t endChar = len/2;
int removed = 0; int removedPx = 0;
for ( ; removed < excessPixels; ) for ( ; removedPx < excessPx; )
{ {
if (initialChar > 0) if (initialCharToRemove > 0)
{ {
// width of the initialChar-th character // widthPx of the initialCharToRemove-th character
int width = charOffsets[initialChar] - int widthPx = charOffsetsPx[initialCharToRemove] -
charOffsets[initialChar-1]; charOffsetsPx[initialCharToRemove-1];
// remove the initialChar-th character // remove the initialCharToRemove-th character
removed += width; removedPx += widthPx;
initialChar--; initialCharToRemove--;
} }
if (endChar < len - 1 && if (endChar < len - 1 &&
removed < excessPixels) removedPx < excessPx)
{ {
// width of the (endChar+1)-th character // widthPx of the (endChar+1)-th character
int width = charOffsets[endChar+1] - int widthPx = charOffsetsPx[endChar+1] -
charOffsets[endChar]; charOffsetsPx[endChar];
// remove the endChar-th character // remove the endChar-th character
removed += width; removedPx += widthPx;
endChar++; endChar++;
} }
if (initialChar == 0 && endChar == len-1) if (initialCharToRemove == 0 && endChar == len-1)
{ {
nChars = len+1; nCharsToRemove = len+1;
break; break;
} }
} }
initialChar++; initialCharToRemove++;
nChars = endChar - initialChar + 1; nCharsToRemove = endChar - initialCharToRemove + 1;
} }
break; break;
@@ -332,20 +332,20 @@ wxString wxControlBase::DoEllipsizeSingleLine(const wxString& curLine, const wxD
{ {
wxASSERT(len > 0); wxASSERT(len > 0);
int maxWidth = totalWidth - excessPixels; int maxWidthPx = totalWidthPx - excessPx;
for ( initialChar = 0; for ( initialCharToRemove = 0;
initialChar < len && charOffsets[initialChar] < maxWidth; initialCharToRemove < len && charOffsetsPx[initialCharToRemove] < maxWidthPx;
initialChar++ ) initialCharToRemove++ )
; ;
if (initialChar == 0) if (initialCharToRemove == 0)
{ {
nChars = len; nCharsToRemove = len;
} }
else else
{ {
//initialChar--; // go back one character //initialCharToRemove--; // go back one character
nChars = len - initialChar; nCharsToRemove = len - initialCharToRemove;
} }
} }
break; break;
@@ -357,24 +357,24 @@ wxString wxControlBase::DoEllipsizeSingleLine(const wxString& curLine, const wxD
} }
wxString ret(curLine); wxString ret(curLine);
if (nChars >= len) if (nCharsToRemove >= len)
{ {
// need to remove the entire row! // need to remove the entire row!
ret.clear(); ret.clear();
} }
else else
{ {
// erase nChars characters after initialChar (included): // erase nCharsToRemove characters after initialCharToRemove (included):
ret.erase(initialChar, nChars+1); ret.erase(initialCharToRemove, nCharsToRemove+1);
// if there is space for the replacement dots, add them // if there is space for the replacement dots, add them
if (maxFinalWidth > replacementWidth) if (maxFinalWidthPx > replacementWidthPx)
ret.insert(initialChar, wxELLIPSE_REPLACEMENT); ret.insert(initialCharToRemove, wxELLIPSE_REPLACEMENT);
} }
// if everything was ok, we should have shortened this line // if everything was ok, we should have shortened this line
// enough to make it fit in maxFinalWidth: // enough to make it fit in maxFinalWidthPx:
wxASSERT(dc.GetTextExtent(ret).GetWidth() < maxFinalWidth); wxASSERT(dc.GetTextExtent(ret).GetWidth() < maxFinalWidthPx);
return ret; return ret;
} }