From 409d65c0d64212efc6882e81140647201c03c59d Mon Sep 17 00:00:00 2001 From: Pascal Abresch Date: Sat, 1 May 2021 22:38:33 +0200 Subject: [PATCH] Decorator: Introduce Scroll bar size call Change-Id: I07f08c2893d832e431c29ae753e0a93d6e619701 Reviewed-on: https://review.haiku-os.org/c/haiku/+/3892 Reviewed-by: Adrien Destugues Reviewed-by: X512 --- headers/os/interface/ControlLook.h | 3 ++- headers/private/interface/HaikuControlLook.h | 2 ++ src/kits/interface/ControlLook.cpp | 19 ++++++++++++++++++- src/kits/interface/HaikuControlLook.cpp | 10 ++++++++++ src/kits/interface/ScrollBar.cpp | 5 ++--- 5 files changed, 34 insertions(+), 5 deletions(-) diff --git a/headers/os/interface/ControlLook.h b/headers/os/interface/ControlLook.h index d14bf19d80..9ad9343d00 100644 --- a/headers/os/interface/ControlLook.h +++ b/headers/os/interface/ControlLook.h @@ -426,10 +426,11 @@ public: BRect rect, const BRect& updateRect, const rgb_color& base, uint32 flags, orientation orientation) = 0; + virtual float GetScrollBarWidth( + orientation orientation = B_VERTICAL); private: // FBC padding - virtual void _ReservedControlLook5(); virtual void _ReservedControlLook6(); virtual void _ReservedControlLook7(); virtual void _ReservedControlLook8(); diff --git a/headers/private/interface/HaikuControlLook.h b/headers/private/interface/HaikuControlLook.h index 54a3083bbb..63a1f44b26 100644 --- a/headers/private/interface/HaikuControlLook.h +++ b/headers/private/interface/HaikuControlLook.h @@ -339,6 +339,8 @@ public: uint32 flags = 0, uint32 borders = B_ALL_BORDERS, orientation orientation = B_HORIZONTAL); + virtual float GetScrollBarWidth( + orientation orientation = B_VERTICAL); protected: void _DrawButtonFrame(BView* view, BRect& rect, diff --git a/src/kits/interface/ControlLook.cpp b/src/kits/interface/ControlLook.cpp index 94fd4cc39d..d0a732e881 100644 --- a/src/kits/interface/ControlLook.cpp +++ b/src/kits/interface/ControlLook.cpp @@ -71,6 +71,15 @@ BControlLook::GetInsets(frame_type frameType, background_type backgroundType, } +float +BControlLook::GetScrollBarWidth(orientation orientation) +{ + // this matches HaikuControlLook.cpp currently + if (be_plain_font->Size() <= 12.0f) { return 14.0f; } + return be_plain_font->Size() / 12.0f * 14.0f; +} + + void BControlLook::SetBackgroundInfo(const BMessage& backgroundInfo) { @@ -127,7 +136,15 @@ B_IF_GCC_2(_ReservedControlLook4__Q28BPrivate12BControlLook, } -void BControlLook::_ReservedControlLook5() {} +extern "C" float +B_IF_GCC_2(_ReservedControlLook5__Q28BPrivate12BControlLook, + _ZN8BPrivate12BControlLook21_ReservedControlLook5Ev)( + BControlLook* controlLook, orientation orientation) +{ + return controlLook->GetScrollBarWidth(orientation); +} + + void BControlLook::_ReservedControlLook6() {} void BControlLook::_ReservedControlLook7() {} void BControlLook::_ReservedControlLook8() {} diff --git a/src/kits/interface/HaikuControlLook.cpp b/src/kits/interface/HaikuControlLook.cpp index 55ebae9dfb..4a4b3a1a45 100644 --- a/src/kits/interface/HaikuControlLook.cpp +++ b/src/kits/interface/HaikuControlLook.cpp @@ -3832,6 +3832,16 @@ HaikuControlLook::_FillGlossyGradient(BView* view, const BRect& rect, } +float +HaikuControlLook::GetScrollBarWidth(orientation orientation) +{ + // HaikuControlLook does not make a distinction between the + // width and height of the scrollbar, but other controllooks may + if (be_plain_font->Size() <= 12.0f) { return 14.0f; } + return be_plain_font->Size() / 12.0f * 14.0f; +} + + void HaikuControlLook::_MakeGradient(BGradientLinear& gradient, const BRect& rect, const rgb_color& base, float topTint, float bottomTint, diff --git a/src/kits/interface/ScrollBar.cpp b/src/kits/interface/ScrollBar.cpp index 7cf7a91c6f..e781e9996b 100644 --- a/src/kits/interface/ScrollBar.cpp +++ b/src/kits/interface/ScrollBar.cpp @@ -995,10 +995,9 @@ BScrollBar::SetBorderHighlighted(bool highlight) void BScrollBar::GetPreferredSize(float* _width, float* _height) { - const float scale = std::max(be_plain_font->Size() / 12.0f, 1.0f); if (fOrientation == B_VERTICAL) { if (_width) - *_width = B_V_SCROLL_BAR_WIDTH * scale; + *_width = be_control_look->GetScrollBarWidth(B_VERTICAL); if (_height) *_height = _MinSize().Height(); @@ -1007,7 +1006,7 @@ BScrollBar::GetPreferredSize(float* _width, float* _height) *_width = _MinSize().Width(); if (_height) - *_height = B_H_SCROLL_BAR_HEIGHT * scale; + *_height = be_control_look->GetScrollBarWidth(B_HORIZONTAL); } }