From ffd3e2c79f22e04ddf5f6710e5f3606c6c58dd34 Mon Sep 17 00:00:00 2001 From: kamel5 Date: Wed, 8 Jan 2020 16:17:08 +0100 Subject: [PATCH] Refactor CutText in horizontal epgview --- epggrid.c | 7 +------ tools.c | 36 ++++++++++++++---------------------- view.c | 2 +- 3 files changed, 16 insertions(+), 29 deletions(-) diff --git a/epggrid.c b/epggrid.c index a67188c..897851f 100644 --- a/epggrid.c +++ b/epggrid.c @@ -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); 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; } /**************************************************************************************** diff --git a/view.c b/view.c index f66938a..31174bf 100644 --- a/view.c +++ b/view.c @@ -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);