From John Scipione <jscipione@xxxxxxxxx>:
John Scipione has uploaded this change for review. (
https://review.haiku-os.org/c/haiku/+/2578 ;)
Change subject: Draw FakeScrollBar using BControlLook drawing methods.
......................................................................
Draw FakeScrollBar using BControlLook drawing methods.
---
M src/preferences/appearance/FakeScrollBar.cpp
1 file changed, 63 insertions(+), 81 deletions(-)
git pull ssh://git.haiku-os.org:22/haiku refs/changes/78/2578/1
diff --git a/src/preferences/appearance/FakeScrollBar.cpp
b/src/preferences/appearance/FakeScrollBar.cpp
index e8a7929..47b49f8 100644
--- a/src/preferences/appearance/FakeScrollBar.cpp
+++ b/src/preferences/appearance/FakeScrollBar.cpp
@@ -48,99 +48,81 @@
void
FakeScrollBar::Draw(BRect updateRect)
{
- BRect bounds = Bounds();
+ rgb_color base = ui_color(B_PANEL_BACKGROUND_COLOR);
- rgb_color normal = ui_color(B_PANEL_BACKGROUND_COLOR);
+ uint32 flags = 0;
- if (IsFocus()) {
- // draw the focus indicator
- SetHighColor(ui_color(B_NAVIGATION_BASE_COLOR));
- StrokeRect(bounds);
- bounds.InsetBy(1.0, 1.0);
+ if (Value() == B_CONTROL_ON)
+ SetHighColor(ui_color(B_CONTROL_MARK_COLOR));
+ else
+ SetHighColor(base);
- // Draw the selected border (1px)
- if (Value() == B_CONTROL_ON)
- SetHighColor(ui_color(B_CONTROL_MARK_COLOR));
- else
- SetHighColor(normal);
+ BRect rect(Bounds());
- StrokeRect(bounds);
- bounds.InsetBy(1.0, 1.0);
- } else {
- // Draw the selected border (2px)
- if (Value() == B_CONTROL_ON)
- SetHighColor(ui_color(B_CONTROL_MARK_COLOR));
- else
- SetHighColor(normal);
+ // draw the selected border (2px)
+ StrokeRect(rect);
+ rect.InsetBy(1, 1);
+ StrokeRect(rect);
+ rect.InsetBy(1, 1);
- StrokeRect(bounds);
- bounds.InsetBy(1.0, 1.0);
- StrokeRect(bounds);
- bounds.InsetBy(1.0, 1.0);
+ // draw a 1px gap
+ SetHighColor(base);
+ StrokeRect(rect);
+ rect.InsetBy(1, 1);
+
+ // draw a 1px border around the entire scroll bar
+ be_control_look->DrawScrollBarBorder(this, rect, updateRect, base,
flags,
+ B_HORIZONTAL);
+
+ // inset past border
+ rect.InsetBy(1, 1);
+
+ // draw arrow buttons
+ if (fDrawArrows) {
+ BRect buttonFrame(rect.left, rect.top, rect.left +
rect.Height(),
+ rect.bottom);
+ be_control_look->DrawScrollBarButton(this, buttonFrame,
updateRect,
+ base, flags, BControlLook::B_LEFT_ARROW, B_HORIZONTAL);
+ if (fDoubleArrows) {
+ buttonFrame.OffsetBy(rect.Height() + 1, 0.0f);
+ be_control_look->DrawScrollBarButton(this, buttonFrame,
+ updateRect, base, flags,
BControlLook::B_RIGHT_ARROW,
+ B_HORIZONTAL);
+ buttonFrame.OffsetTo(rect.right - ((rect.Height() * 2)
+ 1),
+ rect.top);
+ be_control_look->DrawScrollBarButton(this, buttonFrame,
+ updateRect, base, flags,
BControlLook::B_LEFT_ARROW,
+ B_HORIZONTAL);
+ }
+ buttonFrame.OffsetTo(rect.right - rect.Height(), rect.top);
+ be_control_look->DrawScrollBarButton(this, buttonFrame,
updateRect,
+ base, flags, BControlLook::B_RIGHT_ARROW, B_HORIZONTAL);
}
- // draw a gap (1px)
- SetHighColor(normal);
- StrokeRect(bounds);
- bounds.InsetBy(1.0, 1.0);
-
- // draw a border around control (1px)
- SetHighColor(tint_color(normal, B_DARKEN_1_TINT));
- StrokeRect(bounds);
- bounds.InsetBy(1.0, 1.0);
-
- BRect thumbBG = bounds;
- BRect bgRect = bounds;
-
+ // inset rect to make room for arrows
if (fDrawArrows) {
- // draw arrows
- SetDrawingMode(B_OP_OVER);
+ if (fDoubleArrows)
+ rect.InsetBy((rect.Height() + 1) * 2, 0.0f);
+ else
+ rect.InsetBy(rect.Height() + 1, 0.0f);
+ }
- BRect buttonFrame(bounds.left, bounds.top,
- bounds.left + bounds.Height(), bounds.bottom);
+ // set this flags after drawing arrow buttons
+ flags |= BControlLook::B_PARTIALLY_ACTIVATED;
- _DrawArrowButton(ARROW_LEFT, buttonFrame, updateRect);
-
- if (fDoubleArrows) {
- buttonFrame.OffsetBy(bounds.Height() + 1, 0.0);
- _DrawArrowButton(ARROW_RIGHT, buttonFrame,
- updateRect);
-
- buttonFrame.OffsetTo(bounds.right - ((bounds.Height() *
2) + 1),
- bounds.top);
- _DrawArrowButton(ARROW_LEFT, buttonFrame,
- updateRect);
-
- thumbBG.left += bounds.Height() * 2 + 2;
- thumbBG.right -= bounds.Height() * 2 + 2;
- } else {
- thumbBG.left += bounds.Height() + 1;
- thumbBG.right -= bounds.Height() + 1;
- }
-
- buttonFrame.OffsetTo(bounds.right - bounds.Height(),
bounds.top);
- _DrawArrowButton(ARROW_RIGHT, buttonFrame, updateRect);
-
- SetDrawingMode(B_OP_COPY);
-
- bgRect = bounds.InsetByCopy(48, 0);
- } else
- bgRect = bounds.InsetByCopy(16, 0);
-
- // fill background besides the thumb
- BRect leftOfThumb(thumbBG.left, thumbBG.top, bgRect.left - 1,
- thumbBG.bottom);
- BRect rightOfThumb(bgRect.right + 1, thumbBG.top, thumbBG.right,
- thumbBG.bottom);
+ // draw background and thumb
+ float less = floorf(rect.Width() / 3);
+ BRect thumbRect(rect.left + less, rect.top, rect.right - less,
+ rect.bottom);
+ BRect leftOfThumb(rect.left, thumbRect.top, thumbRect.left - 1,
+ thumbRect.bottom);
+ BRect rightOfThumb(thumbRect.right + 1, thumbRect.top, rect.right,
+ thumbRect.bottom);
be_control_look->DrawScrollBarBackground(this, leftOfThumb,
- rightOfThumb, updateRect, normal, 0, B_HORIZONTAL);
-
- // Draw scroll thumb
-
- // fill the clickable surface of the thumb
- be_control_look->DrawButtonBackground(this, bgRect, updateRect,
- normal, 0, BControlLook::B_ALL_BORDERS, B_HORIZONTAL);
+ rightOfThumb, updateRect, base, flags, B_HORIZONTAL);
+ be_control_look->DrawScrollBarThumb(this, thumbRect, updateRect,
+ ui_color(B_SCROLL_BAR_THUMB_COLOR), flags, B_HORIZONTAL,
fKnobStyle);
}
--
To view, visit https://review.haiku-os.org/c/haiku/+/2578
To unsubscribe, or for help writing mail filters, visit
https://review.haiku-os.org/settings
Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: I3f88f5a367142cbbd55e651793fff894d7c66508
Gerrit-Change-Number: 2578
Gerrit-PatchSet: 1
Gerrit-Owner: John Scipione <jscipione@xxxxxxxxx>
Gerrit-MessageType: newchange