diff options
author | kamel5 <vdr.kamel5 (at) gmx (dot) net> | 2020-01-08 16:17:08 +0100 |
---|---|---|
committer | kamel5 <vdr.kamel5 (at) gmx (dot) net> | 2020-01-09 14:29:30 +0100 |
commit | ffd3e2c79f22e04ddf5f6710e5f3606c6c58dd34 (patch) | |
tree | dfb621812e65c234cdaa786a9ff67b71683c8783 | |
parent | c77f74321fcfc88a81513184797c03850f105840 (diff) | |
download | vdr-plugin-tvguide-ffd3e2c79f22e04ddf5f6710e5f3606c6c58dd34.tar.gz vdr-plugin-tvguide-ffd3e2c79f22e04ddf5f6710e5f3606c6c58dd34.tar.bz2 |
Refactor CutText in horizontal epgview
-rw-r--r-- | epggrid.c | 7 | ||||
-rw-r--r-- | tools.c | 36 | ||||
-rw-r--r-- | view.c | 2 |
3 files changed, 16 insertions, 29 deletions
@@ -131,12 +131,7 @@ void cEpgGrid::drawText() { } } } else if (config.displayMode == eHorizontal) { - if (Width() / geoManager.minutePixel < 10) { - int titleY = (geoManager.rowHeight - fontManager.FontGridHorizontal->Height()) / 2; - pixmap->DrawText(cPoint(borderWidth - 2, titleY), "...", colorText, colorTextBack, fontManager.FontGridHorizontal); - return; - } - cString strTitle = CutText(event->Title(), viewportHeight, fontManager.FontGridHorizontal).c_str(); + cString strTitle = CutText(event->Title(), viewportHeight - borderWidth, fontManager.FontGridHorizontal).c_str(); int titleY = 0; if (config.showTimeInGrid) { // mit Zeitangabe im Grid pixmap->DrawText(cPoint(borderWidth, borderWidth), *timeString, colorText, colorTextBack, fontManager.FontGridHorizontalSmall); @@ -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; } /**************************************************************************************** @@ -116,7 +116,7 @@ void cView::DrawHeader(void) { int yDateTime = border / 2; int yTitle = (headerHeight - fontHeaderLarge->Height()) / 2; int ySubtitle = headerHeight - fontHeader->Height() - border / 3; - int textWidthMax = headerWidth - xText; + int textWidthMax = headerWidth - xText - border / 2; pixmapHeader->DrawText(cPoint(xText, yDateTime), CutText(dateTime, textWidthMax, fontHeader).c_str(), theme.Color(clrFont), theme.Color(clrStatusHeader), fontHeader); pixmapHeader->DrawText(cPoint(xText, yTitle), CutText(title, textWidthMax, fontHeaderLarge).c_str(), theme.Color(clrFont), theme.Color(clrStatusHeader), fontHeaderLarge); pixmapHeader->DrawText(cPoint(xText, ySubtitle), CutText(subTitle, textWidthMax, fontHeader).c_str(), theme.Color(clrFont), theme.Color(clrStatusHeader), fontHeader); |