summaryrefslogtreecommitdiff
path: root/tools.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools.c')
-rw-r--r--tools.c36
1 files changed, 14 insertions, 22 deletions
diff --git a/tools.c b/tools.c
index 075c0ce..229bf9e 100644
--- a/tools.c
+++ b/tools.c
@@ -24,31 +24,23 @@ cPlugin *GetScraperPlugin(void) {
* CUTTEXT
****************************************************************************************/
std::string CutText(std::string text, int width, const cFont *font) {
- if (width <= font->Size())
+ int actWidth = font->Width(text.c_str());
+ if (actWidth <= width) {
return text.c_str();
- if (font->Width(text.c_str()) < width)
- return text.c_str();
- cTextWrapper twText;
- twText.Set(text.c_str(), font, width);
- std::string cuttedTextNative = twText.GetLine(0);
- std::stringstream sstrText;
- sstrText << cuttedTextNative << "...";
- std::string cuttedText = sstrText.str();
- int actWidth = font->Width(cuttedText.c_str());
- if (actWidth > width) {
- int overlap = actWidth - width;
- int charWidth = font->Width(".");
- if (charWidth == 0)
- charWidth = 1;
- int cutChars = overlap / charWidth;
- if (cutChars > 0) {
- cuttedTextNative = cuttedTextNative.substr(0, cuttedTextNative.length() - cutChars);
- std::stringstream sstrText2;
- sstrText2 << cuttedTextNative << "...";
- cuttedText = sstrText2.str();
+ } else {
+ int i = std::max((actWidth - width) / font->Size(), 1);
+ do {
+ text = text.substr(0, text.length() - i);
+ std::stringstream sstrText;
+ sstrText << text << "....";
+ actWidth = font->Width(sstrText.str().c_str());
+ i = 1;
}
+ while ((actWidth > width) && (text.length() > 0));
+ std::stringstream sstrText2;
+ sstrText2 << text << "...";
+ return sstrText2.str();
}
- return cuttedText;
}
/****************************************************************************************