From 0ee76eaf1223206dd9eba38492f807b0832ff115 Mon Sep 17 00:00:00 2001 From: Stefano Ceccherini Date: Sat, 2 Jul 2005 14:08:33 +0000 Subject: [PATCH] More work on scrollbars. Some refactoring. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13402 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/os/interface/ScrollBar.h | 4 +-- src/kits/interface/ScrollBar.cpp | 57 ++++++++++++++------------------ 2 files changed, 27 insertions(+), 34 deletions(-) diff --git a/headers/os/interface/ScrollBar.h b/headers/os/interface/ScrollBar.h index b297e4639a..7a6761aa37 100644 --- a/headers/os/interface/ScrollBar.h +++ b/headers/os/interface/ScrollBar.h @@ -117,9 +117,9 @@ virtual void _ReservedScrollBar4(); void InitObject(float min, float max, orientation o, BView *t); - void DrawButtons(); + void DrawButtons(BRect updateRect); void DrawArrow(BPoint pos, int32 which, bool pressed = false); - void DrawButton(BRect frame, bool pressed = false); + void DrawButton(BRect frame, int32 arrowType, bool pressed = false); bool DoubleArrows() const; diff --git a/src/kits/interface/ScrollBar.cpp b/src/kits/interface/ScrollBar.cpp index 34fbe68928..c0fcced306 100644 --- a/src/kits/interface/ScrollBar.cpp +++ b/src/kits/interface/ScrollBar.cpp @@ -834,7 +834,7 @@ BScrollBar::Draw(BRect updateRect) SetDrawingMode(B_OP_OVER); - DrawButtons(); + DrawButtons(updateRect); SetDrawingMode(B_OP_COPY); @@ -1137,7 +1137,7 @@ BScrollBar::DrawArrow(BPoint pos, int32 which, bool pressed) void -BScrollBar::DrawButtons() +BScrollBar::DrawButtons(BRect frame) { const int8 &buttonDown = fPrivateData->fButtonDown; @@ -1149,24 +1149,21 @@ BScrollBar::DrawButtons() if (fOrientation == B_HORIZONTAL) { DrawButton(BRect(1.0f, 1.0f, 14.0f, bounds.bottom - 1.0f), - buttonDown == ARROW1); + B_LEFT_ARROW, buttonDown == ARROW1); SetHighColor(darken2); StrokeLine(BPoint(15.0f, 1.0f), BPoint(15.0f, bounds.bottom - 1.0f)); - DrawArrow(BPoint(3.0f, 3.0f), B_LEFT_ARROW); - // Second left button if (DoubleArrows()) { DrawButton(BRect(16.0f, 1.0f, 29.0f, bounds.bottom - 1.0f), - buttonDown == ARROW2); + B_RIGHT_ARROW, buttonDown == ARROW2); SetHighColor(darken2); StrokeLine(BPoint(30.0f, 1.0f), BPoint(30.0f, bounds.bottom - 1.0f)); - DrawArrow(BPoint(18.0f, 3.0f), B_RIGHT_ARROW); } // Second right button @@ -1177,9 +1174,8 @@ BScrollBar::DrawButtons() DrawButton(BRect(bounds.right - 29.0f, 1.0f, bounds.right - 16.0f, bounds.bottom - 1.0f), - buttonDown == ARROW3); + B_LEFT_ARROW, buttonDown == ARROW3); - DrawArrow(BPoint(bounds.right - 27.0f, 3.0f), B_LEFT_ARROW); } // Right button @@ -1189,33 +1185,25 @@ BScrollBar::DrawButtons() DrawButton(BRect(bounds.right - 14.0f, 1.0f, bounds.right - 1.0f, bounds.bottom - 1.0f), - buttonDown == ARROW4); + B_RIGHT_ARROW, buttonDown == ARROW4); - DrawArrow(BPoint(bounds.right - 12.0f, 3.0f), B_RIGHT_ARROW); - } else if (fOrientation == B_VERTICAL) { // Top button DrawButton(BRect(1.0f, 1.0f, bounds.right - 1.0f, 14.0f), - buttonDown == ARROW1); + B_UP_ARROW, buttonDown == ARROW1); SetHighColor(darken2); StrokeLine(BPoint(1.0f, 15.0f), BPoint(bounds.right - 1.0f, 15.0f)); - DrawArrow(BPoint(3.0f, 3.0f), B_UP_ARROW, - buttonDown == ARROW1); - // Second top button if (DoubleArrows()) { DrawButton(BRect(1.0f, 16.0f, bounds.right - 1.0f, 29.0f), - buttonDown == ARROW2); + B_DOWN_ARROW, buttonDown == ARROW2); SetHighColor(darken2); StrokeLine(BPoint(1.0f, 30.0f), BPoint(bounds.right - 1.0f, 30.0f)); - - DrawArrow(BPoint(3.0f, 18.0f), B_DOWN_ARROW, - buttonDown == ARROW2); } // Second bottom button @@ -1226,10 +1214,8 @@ BScrollBar::DrawButtons() DrawButton(BRect(1.0f, bounds.bottom - 29.0f, bounds.right - 1.0f, bounds.bottom - 16.0f), - buttonDown == ARROW3); + B_UP_ARROW, buttonDown == ARROW3); - DrawArrow(BPoint(3.0f, bounds.bottom - 27.0f), B_UP_ARROW, - buttonDown == ARROW3); } // bottom button @@ -1239,16 +1225,13 @@ BScrollBar::DrawButtons() DrawButton(BRect(1.0f, bounds.bottom - 14.0f, bounds.right - 1.0f, bounds.bottom - 1.0f), - buttonDown == ARROW4); - - DrawArrow(BPoint(3.0f, bounds.bottom - 12.0f), B_DOWN_ARROW, - buttonDown == ARROW4); + B_DOWN_ARROW, buttonDown == ARROW4); } } void -BScrollBar::DrawButton(BRect frame, bool pressed) +BScrollBar::DrawButton(BRect frame, int32 arrowType, bool pressed) { rgb_color no_tint = ui_color(B_PANEL_BACKGROUND_COLOR), lighten2 = tint_color(no_tint, B_LIGHTEN_2_TINT), @@ -1257,10 +1240,8 @@ BScrollBar::DrawButton(BRect frame, bool pressed) darken2 = tint_color(no_tint, B_DARKEN_2_TINT); if (fMax > 0) { - if (pressed) { - SetHighColor(128, 128, 128); - FillRect(frame); - } + SetHighColor(no_tint); + FillRect(frame); SetHighColor(lighten2); StrokeLine(BPoint(frame.left, frame.bottom - 1.0f), @@ -1286,6 +1267,18 @@ BScrollBar::DrawButton(BRect frame, bool pressed) BPoint(frame.right, frame.bottom)); StrokeLine(BPoint(frame.left + 1.0f, frame.bottom)); } + + BPoint arrowPoint = frame.LeftTop() + BPoint(2, 3); + DrawArrow(arrowPoint, arrowType, pressed); + + if (pressed) { + // TODO: This isn't cheap, but it'll do for now... + drawing_mode mode = DrawingMode(); + SetDrawingMode(B_OP_ALPHA); + SetHighColor(128, 128, 128, 128); + FillRect(frame); + SetDrawingMode(mode); + } }