X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a78618b062fd6468a823ad1ed3d9034c493cd4a8..acd32ffcdb319f162633c20e0202db3f8542998a:/src/common/ctrlcmn.cpp diff --git a/src/common/ctrlcmn.cpp b/src/common/ctrlcmn.cpp index 3b32359f66..5e8b9ef8b3 100644 --- a/src/common/ctrlcmn.cpp +++ b/src/common/ctrlcmn.cpp @@ -254,6 +254,7 @@ wxString wxControlBase::DoEllipsizeSingleLine(const wxString& curLine, const wxD int excessPixels = totalWidth - maxFinalWidth + replacementWidth + marginWidth; // security margin (NEEDED!) + wxASSERT(excessPixels>0); // remove characters in excess size_t initialChar, // index of first char to erase @@ -261,83 +262,83 @@ wxString wxControlBase::DoEllipsizeSingleLine(const wxString& curLine, const wxD switch (mode) { - case wxELLIPSIZE_START: - initialChar = 0; - for (nChars=0; - nChars < len && charOffsets[nChars] < excessPixels; - nChars++) - ; - break; - - case wxELLIPSIZE_MIDDLE: - { - // the start & end of the removed span of chars - initialChar = len/2; - size_t endChar = len/2; + case wxELLIPSIZE_START: + initialChar = 0; + for ( nChars=0; + nChars < len && charOffsets[nChars] < excessPixels; + nChars++ ) + ; + break; - int removed = 0; - for ( ; removed < excessPixels; ) + case wxELLIPSIZE_MIDDLE: { - if (initialChar > 0) - { - // width of the initialChar-th character - int width = charOffsets[initialChar] - - charOffsets[initialChar-1]; - - // remove the initialChar-th character - removed += width; - initialChar--; - } + // the start & end of the removed span of chars + initialChar = len/2; + size_t endChar = len/2; - if (endChar < len - 1 && - removed < excessPixels) + int removed = 0; + for ( ; removed < excessPixels; ) { - // width of the (endChar+1)-th character - int width = charOffsets[endChar+1] - - charOffsets[endChar]; - - // remove the endChar-th character - removed += width; - endChar++; + if (initialChar > 0) + { + // width of the initialChar-th character + int width = charOffsets[initialChar] - + charOffsets[initialChar-1]; + + // remove the initialChar-th character + removed += width; + initialChar--; + } + + if (endChar < len - 1 && + removed < excessPixels) + { + // width of the (endChar+1)-th character + int width = charOffsets[endChar+1] - + charOffsets[endChar]; + + // remove the endChar-th character + removed += width; + endChar++; + } + + if (initialChar == 0 && endChar == len-1) + { + nChars = len+1; + break; + } } - if (initialChar == 0 && endChar == len-1) - { - nChars = len+1; - break; - } + initialChar++; + nChars = endChar - initialChar + 1; } + break; - initialChar++; - nChars = endChar - initialChar + 1; - } - break; - - case wxELLIPSIZE_END: - { - wxASSERT(len > 0); + case wxELLIPSIZE_END: + { + wxASSERT(len > 0); - int maxWidth = totalWidth - excessPixels; - for (initialChar=0; - initialChar < len && - charOffsets[initialChar] < maxWidth; - initialChar++) - ; + int maxWidth = totalWidth - excessPixels; + for ( initialChar = 0; + initialChar < len && charOffsets[initialChar] < maxWidth; + initialChar++ ) + ; - if (initialChar == 0) - { - nChars = len; - } - else - { - //initialChar--; // go back one character - nChars = len - initialChar; + if (initialChar == 0) + { + nChars = len; + } + else + { + //initialChar--; // go back one character + nChars = len - initialChar; + } } - } - break; + break; - default: - wxFAIL_MSG("invalid ellipsize mode"); + default: + wxFAIL_MSG("invalid ellipsize mode"); + return curLine; } wxString ret(curLine); @@ -353,7 +354,7 @@ wxString wxControlBase::DoEllipsizeSingleLine(const wxString& curLine, const wxD // if there is space for the replacement dots, add them if (maxFinalWidth > replacementWidth) - ret.append(wxELLIPSE_REPLACEMENT);//.insert(initialChar, wxELLIPSE_REPLACEMENT); + ret.insert(initialChar, wxELLIPSE_REPLACEMENT); } // if everything was ok, we should have shortened this line