From 21bb6bd22b42b063faf25cb515e4be776462d3f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20A=C3=9Fmus?= Date: Sat, 13 Sep 2008 19:20:18 +0000 Subject: [PATCH] * Update header indentation. * Added BScrollBar::SetOrientation(). * Improved _DrawArrowButton() to have a good visual result even when the scroll bar does not have the standard width or height. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27494 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/os/interface/ScrollBar.h | 168 ++++++++++++++++--------------- src/kits/interface/ScrollBar.cpp | 28 ++++-- 2 files changed, 108 insertions(+), 88 deletions(-) diff --git a/headers/os/interface/ScrollBar.h b/headers/os/interface/ScrollBar.h index c6034d9366..e73642cd0b 100644 --- a/headers/os/interface/ScrollBar.h +++ b/headers/os/interface/ScrollBar.h @@ -28,106 +28,112 @@ class BScrollBar : public BView { public: - BScrollBar(BRect frame, const char* name, - BView* target, float min, float max, - orientation direction); - BScrollBar(const char* name, BView* target, - float min, float max, orientation direction); - BScrollBar(BMessage* data); - virtual ~BScrollBar(); - static BArchivable *Instantiate(BMessage* data); - virtual status_t Archive(BMessage *data, bool deep = true) const; + BScrollBar(BRect frame, const char* name, + BView* target, float min, float max, + orientation direction); + BScrollBar(const char* name, BView* target, + float min, float max, orientation direction); + BScrollBar(BMessage* data); + virtual ~BScrollBar(); + static BArchivable* Instantiate(BMessage* data); + virtual status_t Archive(BMessage *data, bool deep = true) const; - virtual void AttachedToWindow(); - void SetValue(float value); - float Value() const; - void SetProportion(float); - float Proportion() const; - virtual void ValueChanged(float newValue); + virtual void AttachedToWindow(); + void SetValue(float value); + float Value() const; + void SetProportion(float); + float Proportion() const; + virtual void ValueChanged(float newValue); - void SetRange(float min, float max); - void GetRange(float *min, float *max) const; - void SetSteps(float smallStep, float largeStep); - void GetSteps(float *smallStep, float *largeStep) const; - void SetTarget(BView *target); - void SetTarget(const char *targetName); - BView *Target() const; - orientation Orientation() const; + void SetRange(float min, float max); + void GetRange(float* _min, float* _max) const; + void SetSteps(float smallStep, float largeStep); + void GetSteps(float* _smallStep, + float* _largeStep) const; + void SetTarget(BView *target); + void SetTarget(const char* targetName); + BView* Target() const; + void SetOrientation(enum orientation orientation); + orientation Orientation() const; - virtual void MessageReceived(BMessage *msg); - virtual void MouseDown(BPoint pt); - virtual void MouseUp(BPoint pt); - virtual void MouseMoved(BPoint pt, uint32 code, const BMessage *msg); - virtual void DetachedFromWindow(); - virtual void Draw(BRect updateRect); - virtual void FrameMoved(BPoint new_position); - virtual void FrameResized(float new_width, float new_height); + virtual void MessageReceived(BMessage* message); + virtual void MouseDown(BPoint pt); + virtual void MouseUp(BPoint pt); + virtual void MouseMoved(BPoint pt, uint32 code, + const BMessage* dragMessage); + virtual void DetachedFromWindow(); + virtual void Draw(BRect updateRect); + virtual void FrameMoved(BPoint new_position); + virtual void FrameResized(float newWidth, float newHeight); - virtual BHandler *ResolveSpecifier(BMessage *msg, int32 index, - BMessage *specifier, int32 form, - const char *property); + virtual BHandler* ResolveSpecifier(BMessage* message, + int32 index, BMessage* specifier, + int32 form, const char* property); - virtual void ResizeToPreferred(); - virtual void GetPreferredSize(float *width, float *height); - virtual void MakeFocus(bool state = true); - virtual void AllAttached(); - virtual void AllDetached(); - virtual status_t GetSupportedSuites(BMessage *data); + virtual void ResizeToPreferred(); + virtual void GetPreferredSize(float* _width, float* _height); + virtual void MakeFocus(bool state = true); + virtual void AllAttached(); + virtual void AllDetached(); + virtual status_t GetSupportedSuites(BMessage* data); - virtual BSize MinSize(); - virtual BSize MaxSize(); - virtual BSize PreferredSize(); + virtual BSize MinSize(); + virtual BSize MaxSize(); + virtual BSize PreferredSize(); - virtual status_t Perform(perform_code d, void *arg); + virtual status_t Perform(perform_code d, void* arg); #if DISABLES_ON_WINDOW_DEACTIVATION - virtual void WindowActivated(bool active); + virtual void WindowActivated(bool active); #endif - private: - class Private; - friend class Private; +private: + class Private; + friend class Private; - friend status_t control_scrollbar(scroll_bar_info *info, BScrollBar *bar); - // for use within the preflet + friend status_t control_scrollbar(scroll_bar_info* info, + BScrollBar *bar); + // for use within the preflet - virtual void _ReservedScrollBar1(); - virtual void _ReservedScrollBar2(); - virtual void _ReservedScrollBar3(); - virtual void _ReservedScrollBar4(); + virtual void _ReservedScrollBar1(); + virtual void _ReservedScrollBar2(); + virtual void _ReservedScrollBar3(); + virtual void _ReservedScrollBar4(); - BScrollBar &operator=(const BScrollBar &); + // disabled + BScrollBar& operator=(const BScrollBar& other); - bool _DoubleArrows() const; - void _UpdateThumbFrame(); - float _ValueFor(BPoint where) const; - int32 _ButtonFor(BPoint where) const; - BRect _ButtonRectFor(int32 button) const; - void _UpdateTargetValue(BPoint where); - void _UpdateArrowButtons(); - void _DrawDisabledBackground(BRect area, - const rgb_color& light, const rgb_color& dark, - const rgb_color& fill); - void _DrawArrowButton(int32 direction, - bool doubleArrows, BRect frame, - const BRect& updateRect, - bool enabled, bool down); + bool _DoubleArrows() const; + void _UpdateThumbFrame(); + float _ValueFor(BPoint where) const; + int32 _ButtonFor(BPoint where) const; + BRect _ButtonRectFor(int32 button) const; + void _UpdateTargetValue(BPoint where); + void _UpdateArrowButtons(); + void _DrawDisabledBackground(BRect area, + const rgb_color& light, + const rgb_color& dark, + const rgb_color& fill); + void _DrawArrowButton(int32 direction, + bool doubleArrows, BRect frame, + const BRect& updateRect, + bool enabled, bool down); - BSize _MinSize() const; + BSize _MinSize() const; - float fMin; - float fMax; - float fSmallStep; - float fLargeStep; - float fValue; - float fProportion; - BView* fTarget; - orientation fOrientation; - char* fTargetName; + float fMin; + float fMax; + float fSmallStep; + float fLargeStep; + float fValue; + float fProportion; + BView* fTarget; + orientation fOrientation; + char* fTargetName; - Private* fPrivateData; + Private* fPrivateData; - uint32 _reserved[3]; + uint32 _reserved[3]; }; #endif // _SCROLL_BAR_H diff --git a/src/kits/interface/ScrollBar.cpp b/src/kits/interface/ScrollBar.cpp index 9d290d0a95..33b18b5e52 100644 --- a/src/kits/interface/ScrollBar.cpp +++ b/src/kits/interface/ScrollBar.cpp @@ -563,6 +563,18 @@ BScrollBar::Target() const } +void +BScrollBar::SetOrientation(enum orientation orientation) +{ + if (fOrientation == orientation) + return; + + fOrientation = orientation; + InvalidateLayout(); + Invalidate(); +} + + orientation BScrollBar::Orientation() const { @@ -1610,27 +1622,29 @@ BScrollBar::_DrawArrowButton(int32 direction, bool doubleArrows, BRect r, } BPoint tri1, tri2, tri3; - r.InsetBy(4, 4); + float hInset = r.Width() / 3; + float vInset = r.Height() / 3; + r.InsetBy(hInset, vInset); switch (direction) { case ARROW_LEFT: tri1.Set(r.right, r.top); - tri2.Set(r.left + 1, (r.top + r.bottom + 1) /2 ); + tri2.Set(r.right - r.Width() / 1.33, (r.top + r.bottom + 1) /2 ); tri3.Set(r.right, r.bottom + 1); break; case ARROW_RIGHT: tri1.Set(r.left, r.bottom + 1); - tri2.Set(r.right - 1, (r.top + r.bottom + 1) / 2); + tri2.Set(r.left + r.Width() / 1.33, (r.top + r.bottom + 1) / 2); tri3.Set(r.left, r.top); break; case ARROW_UP: tri1.Set(r.left, r.bottom); - tri2.Set((r.left + r.right + 1) / 2, r.top + 1); + tri2.Set((r.left + r.right + 1) / 2, r.bottom - r.Height() / 1.33); tri3.Set(r.right + 1, r.bottom); break; default: tri1.Set(r.left, r.top); - tri2.Set((r.left + r.right + 1) / 2, r.bottom - 1); + tri2.Set((r.left + r.right + 1) / 2, r.top + r.Height() / 1.33); tri3.Set(r.right + 1, r.top); break; } @@ -1642,7 +1656,7 @@ BScrollBar::_DrawArrowButton(int32 direction, bool doubleArrows, BRect r, tri3 = tri3 + offset; } - r.InsetBy(-3, -3); + r.InsetBy(-(hInset - 1), -(vInset - 1)); SetHighColor(normal); FillRect(r); @@ -1652,7 +1666,7 @@ BScrollBar::_DrawArrowButton(int32 direction, bool doubleArrows, BRect r, arrowShape.LineTo(tri3); SetHighColor(arrow); - SetPenSize(2.0); + SetPenSize(ceilf(hInset / 2.0)); StrokeShape(&arrowShape); SetPenSize(1.0);