From 3cfbf2cf23e220924ecb5d7bef810cd4cb4a1503 Mon Sep 17 00:00:00 2001 From: Marc Flerackers Date: Wed, 2 Oct 2002 11:27:33 +0000 Subject: [PATCH] Fixed default button functions and drawing git-svn-id: file:///srv/svn/repos/haiku/trunk/current@1340 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/interface/Button.cpp | 98 ++++++++++++++++++++++++++--------- 1 file changed, 74 insertions(+), 24 deletions(-) diff --git a/src/kits/interface/Button.cpp b/src/kits/interface/Button.cpp index 6ce2cfa420..778a15fb72 100644 --- a/src/kits/interface/Button.cpp +++ b/src/kits/interface/Button.cpp @@ -92,13 +92,11 @@ void BButton::Draw(BRect updateRect) darken2 = tint_color(no_tint, B_DARKEN_2_TINT), darken4 = tint_color(no_tint, B_DARKEN_4_TINT), darkenmax = tint_color(no_tint, B_DARKEN_MAX_TINT); - - if (!IsDefault()) - { - SetHighColor(no_tint); - StrokeRect(rect); + + if (IsDefault()) + rect = DrawDefault(rect, IsEnabled()); + else rect.InsetBy(1,1); - } if (IsEnabled()) { @@ -339,28 +337,27 @@ void BButton::MakeDefault(bool flag) { if (flag == IsDefault()) return; - - fDrawAsDefault = flag; - if (Window()) + fDrawAsDefault = flag; + BWindow *window = Window(); + + if (window) { - BButton *button = (BButton*)(Window()->DefaultButton()); + BButton *button = (BButton*)(window->DefaultButton()); - if (fDrawAsDefault) + if (flag) { - if(button) - button->MakeDefault(false); - - Window()->SetDefaultButton((BButton*)this); + ResizeBy(6.0f, 6.0f); + MoveBy(-3.0f, -3.0f); + window->SetDefaultButton((BButton*)this); } else { - if (button == this) - Window()->SetDefaultButton(NULL); + ResizeBy(-6.0f, -6.0f); + MoveBy(3.0f, 3.0f); + window->SetDefaultButton(NULL); } } - - Invalidate(); } //------------------------------------------------------------------------------ void BButton::SetLabel(const char *string) @@ -438,9 +435,7 @@ void BButton::GetPreferredSize (float *width, float *height) //------------------------------------------------------------------------------ void BButton::ResizeToPreferred() { - float width, height; - GetPreferredSize(&width, &height); - ResizeTo(width,height); + BControl::ResizeToPreferred(); } //------------------------------------------------------------------------------ status_t BButton::Invoke(BMessage *message) @@ -502,8 +497,63 @@ BButton &BButton::operator=(const BButton &) //------------------------------------------------------------------------------ BRect BButton::DrawDefault(BRect bounds, bool enabled) { - // TODO: - return BRect(); + rgb_color no_tint = ui_color(B_PANEL_BACKGROUND_COLOR), + lighten1 = tint_color(no_tint, B_LIGHTEN_1_TINT), + darken1 = tint_color(no_tint, B_DARKEN_1_TINT), + darken4 = tint_color(no_tint, B_DARKEN_4_TINT); + + if (enabled) + { + // Dark border + BeginLineArray(4); + AddLine(BPoint(bounds.left, bounds.bottom - 1.0f), + BPoint(bounds.left, bounds.top + 1.0f), darken4); + AddLine(BPoint(bounds.left + 1.0f, bounds.top), + BPoint(bounds.right - 1.0f, bounds.top), darken4); + AddLine(BPoint(bounds.right, bounds.top + 1.0f), + BPoint(bounds.right, bounds.bottom - 1.0f), darken4); + AddLine(BPoint(bounds.left + 1.0f, bounds.bottom), + BPoint(bounds.right - 1.0f, bounds.bottom), darken4); + EndLineArray(); + + bounds.InsetBy(1.0f, 1.0f); + + // Bevel + SetHighColor(darken1); + StrokeRect(bounds); + + bounds.InsetBy(1.0f, 1.0f); + + // Filling + SetHighColor(lighten1); + FillRect(bounds); + + bounds.InsetBy(2.0f, 2.0f); + } + else + { + // Dark border + BeginLineArray(4); + AddLine(BPoint(bounds.left, bounds.bottom - 1.0f), + BPoint(bounds.left, bounds.top + 1.0f), darken1); + AddLine(BPoint(bounds.left + 1.0f, bounds.top), + BPoint(bounds.right - 1.0f, bounds.top), darken1); + AddLine(BPoint(bounds.right, bounds.top + 1.0f), + BPoint(bounds.right, bounds.bottom - 1.0f), darken1); + AddLine(BPoint(bounds.left + 1.0f, bounds.bottom), + BPoint(bounds.right - 1.0f, bounds.bottom), darken1); + EndLineArray(); + + bounds.InsetBy(1.0f, 1.0f); + + // Filling + SetHighColor(lighten1); + FillRect(bounds); + + bounds.InsetBy(3.0f, 3.0f); + } + + return bounds; } //------------------------------------------------------------------------------ status_t Execute()