From 7a25fcafdac9f01b3c82c9c5de8bcd267dd2519a Mon Sep 17 00:00:00 2001 From: Stefano Ceccherini Date: Sat, 4 Mar 2006 19:38:18 +0000 Subject: [PATCH] Constrain the clipping region before drawing the label. This fixes bug 232 git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16579 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/interface/TextControl.cpp | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/kits/interface/TextControl.cpp b/src/kits/interface/TextControl.cpp index e14b56a8d1..f40ccba5d1 100644 --- a/src/kits/interface/TextControl.cpp +++ b/src/kits/interface/TextControl.cpp @@ -271,7 +271,7 @@ BTextControl::Draw(BRect updateRect) } // area around text view - + SetHighColor(fText->ViewColor()); rect.InsetBy(1, 1); BRegion region(rect); @@ -281,6 +281,8 @@ BTextControl::Draw(BRect updateRect) region.Exclude(fText->Frame()); FillRegion(®ion); + // label + if (Label()) { font_height fontHeight; GetFontHeight(&fontHeight); @@ -288,13 +290,14 @@ BTextControl::Draw(BRect updateRect) float y = fontHeight.ascent + fText->Frame().top + 1; float x; + float labelWidth = StringWidth(Label()); switch (fLabelAlign) { case B_ALIGN_RIGHT: - x = fDivider - StringWidth(Label()) - 3.0f; + x = fDivider - labelWidth - 3.0f; break; case B_ALIGN_CENTER: - x = fDivider - StringWidth(Label()) / 2.0f; + x = fDivider - labelWidth / 2.0f; break; default: @@ -302,9 +305,17 @@ BTextControl::Draw(BRect updateRect) break; } - SetHighColor(IsEnabled() ? ui_color(B_CONTROL_TEXT_COLOR) - : tint_color(noTint, B_DISABLED_LABEL_TINT)); - DrawString(Label(), BPoint(x, y)); + BRect labelArea(x, fText->Frame().top, x + labelWidth, + ceilf(fontHeight.ascent + fontHeight.descent) + 1); + if (x < fDivider && updateRect.Intersects(labelArea)) { + labelArea.right = fDivider; + + BRegion clipRegion(labelArea); + ConstrainClippingRegion(&clipRegion); + SetHighColor(IsEnabled() ? ui_color(B_CONTROL_TEXT_COLOR) + : tint_color(noTint, B_DISABLED_LABEL_TINT)); + DrawString(Label(), BPoint(x, y)); + } } }