From 7989cd81bb72c794b7a707b604afdd711504037a Mon Sep 17 00:00:00 2001 From: David Capello Date: Thu, 17 Apr 2014 16:24:04 -0300 Subject: [PATCH] Avoid drawing text over widget borders in SkinTheme::drawTextString() --- src/app/ui/skin/skin_theme.cpp | 37 +++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/src/app/ui/skin/skin_theme.cpp b/src/app/ui/skin/skin_theme.cpp index 753f8b4cb..342a34cbb 100644 --- a/src/app/ui/skin/skin_theme.cpp +++ b/src/app/ui/skin/skin_theme.cpp @@ -2000,25 +2000,30 @@ void SkinTheme::drawTextString(Graphics* g, const char *t, ui::Color fg_color, u } // Text - if (!widget->isEnabled()) { - // TODO avoid this - if (fill_bg) // Only to draw the background - g->drawString(t, ColorNone, bg_color, fill_bg, textrc.getOrigin()); + Rect textWrap = textrc.createIntersect( + Rect(widget->getClientBounds()).shrink(widget->getBorder())); - // Draw white part - g->drawString(t, getColor(ThemeColor::Background), bg_color, fill_bg, - textrc.getOrigin() + Point(jguiscale(), jguiscale())); + if (IntersectClip clip = IntersectClip(g, textWrap)) { + if (!widget->isEnabled()) { + // TODO avoid this + if (fill_bg) // Only to draw the background + g->drawString(t, ColorNone, bg_color, fill_bg, textrc.getOrigin()); - if (fill_bg) - fill_bg = false; + // Draw white part + g->drawString(t, getColor(ThemeColor::Background), bg_color, fill_bg, + textrc.getOrigin() + Point(jguiscale(), jguiscale())); + + if (fill_bg) + fill_bg = false; + } + + g->drawString(t, + (!widget->isEnabled() ? + getColor(ThemeColor::Disabled): + (ui::geta(fg_color) > 0 ? fg_color : + getColor(ThemeColor::Text))), + bg_color, fill_bg, textrc.getOrigin()); } - - g->drawString(t, - (!widget->isEnabled() ? - getColor(ThemeColor::Disabled): - (ui::geta(fg_color) > 0 ? fg_color : - getColor(ThemeColor::Text))), - bg_color, fill_bg, textrc.getOrigin()); } }