haiku/headers/private/interface/HaikuControlLook.h
John Scipione ec1b18c58a BScrollBar: Add lines and dots knob styles to scroll bar
Fixes #9137

Move scroll bar drawing into HaikuControlLook

Added B_SCROLLABLE flag to BControlLook

Update FakeScrollBar in Appearance to also draw using HaikuControlLook.

Focus works on scroll bars again, used by FakeScrollBar... and probably
nowhere else.

Added private _ScrollingEnabled() convenience method to BScrollBar and
use it in a few places making.

Create ScrollBarPrivate.h header to share a couple of scroll bar related
enums with HaikuControlLook that come from BeOS Scroll Bar prefs.

Stuff arrow_direction enum into BScrollBar::Private as it has been
succeeded by a similar enum already present in BControlLook and is only
around now for BScrollBar::Private::DrawScrollBarButton.

Change-Id: Idc31ee41de091ba45ded2f0315a004af00143803
2018-07-16 16:11:46 +00:00

592 lines
20 KiB
C++

/*
* Copyright 2009-2017, Haiku, Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef _HAIKU_CONTROL_LOOK_H
#define _HAIKU_CONTROL_LOOK_H
#include <ControlLook.h>
class BBitmap;
class BControl;
class BGradientLinear;
class BView;
namespace BPrivate {
class HaikuControlLook : public BControlLook {
public:
HaikuControlLook();
virtual ~HaikuControlLook();
virtual BAlignment DefaultLabelAlignment() const;
virtual float DefaultLabelSpacing() const;
virtual float DefaultItemSpacing() const;
static float ComposeSpacing(float spacing);
virtual uint32 Flags(BControl* control) const;
virtual void DrawButtonFrame(BView* view, BRect& rect,
const BRect& updateRect,
const rgb_color& base,
const rgb_color& background,
uint32 flags = 0,
uint32 borders = B_ALL_BORDERS);
virtual void DrawButtonFrame(BView* view, BRect& rect,
const BRect& updateRect,
float radius,
const rgb_color& base,
const rgb_color& background,
uint32 flags = 0,
uint32 borders = B_ALL_BORDERS);
virtual void DrawButtonFrame(BView* view, BRect& rect,
const BRect& updateRect,
float leftTopRadius,
float rightTopRadius,
float leftBottomRadius,
float rightBottomRadius,
const rgb_color& base,
const rgb_color& background,
uint32 flags = 0,
uint32 borders = B_ALL_BORDERS);
virtual void DrawButtonBackground(BView* view, BRect& rect,
const BRect& updateRect,
const rgb_color& base,
uint32 flags = 0,
uint32 borders = B_ALL_BORDERS,
orientation orientation = B_HORIZONTAL);
virtual void DrawButtonBackground(BView* view, BRect& rect,
const BRect& updateRect,
float radius,
const rgb_color& base,
uint32 flags = 0,
uint32 borders = B_ALL_BORDERS,
orientation orientation = B_HORIZONTAL);
virtual void DrawButtonBackground(BView* view, BRect& rect,
const BRect& updateRect,
float leftTopRadius,
float rightTopRadius,
float leftBottomRadius,
float rightBottomRadius,
const rgb_color& base,
uint32 flags = 0,
uint32 borders = B_ALL_BORDERS,
orientation orientation = B_HORIZONTAL);
virtual void DrawMenuBarBackground(BView* view, BRect& rect,
const BRect& updateRect,
const rgb_color& base,
uint32 flags = 0,
uint32 borders = B_ALL_BORDERS);
virtual void DrawMenuFieldFrame(BView* view, BRect& rect,
const BRect& updateRect,
const rgb_color& base,
const rgb_color& background,
uint32 flags = 0,
uint32 borders = B_ALL_BORDERS);
virtual void DrawMenuFieldFrame(BView* view, BRect& rect,
const BRect& updateRect,
float radius,
const rgb_color& base,
const rgb_color& background,
uint32 flags = 0,
uint32 borders = B_ALL_BORDERS);
virtual void DrawMenuFieldFrame(BView* view, BRect& rect,
const BRect& updateRect,
float leftTopRadius,
float rightTopRadius,
float leftBottomRadius,
float rightBottomRadius,
const rgb_color& base,
const rgb_color& background,
uint32 flags = 0,
uint32 borders = B_ALL_BORDERS);
virtual void DrawMenuFieldBackground(BView* view,
BRect& rect, const BRect& updateRect,
const rgb_color& base, bool popupIndicator,
uint32 flags = 0);
virtual void DrawMenuFieldBackground(BView* view,
BRect& rect, const BRect& updateRect,
float radius, const rgb_color& base,
bool popupIndicator, uint32 flags = 0);
virtual void DrawMenuFieldBackground(BView* view,
BRect& rect, const BRect& updateRect,
float leftTopRadius,
float rightTopRadius,
float leftBottomRadius,
float rightBottomRadius,
const rgb_color& base,
bool popupIndicator, uint32 flags = 0);
virtual void DrawMenuFieldBackground(BView* view,
BRect& rect, const BRect& updateRect,
const rgb_color& base, uint32 flags = 0,
uint32 borders = B_ALL_BORDERS);
virtual void DrawMenuBackground(BView* view,
BRect& rect, const BRect& updateRect,
const rgb_color& base, uint32 flags = 0,
uint32 borders = B_ALL_BORDERS);
virtual void DrawMenuItemBackground(BView* view,
BRect& rect, const BRect& updateRect,
const rgb_color& base, uint32 flags = 0,
uint32 borders = B_ALL_BORDERS);
virtual void DrawStatusBar(BView* view, BRect& rect,
const BRect& updateRect,
const rgb_color& base,
const rgb_color& barColor,
float progressPosition);
virtual void DrawCheckBox(BView* view, BRect& rect,
const BRect& updateRect,
const rgb_color& base,
uint32 flags = 0);
virtual void DrawRadioButton(BView* view, BRect& rect,
const BRect& updateRect,
const rgb_color& base,
uint32 flags = 0);
virtual void DrawScrollBar(BView* view, BRect& rect,
const BRect& updateRect,
const rgb_color& base, uint32 flags,
orientation orientation,
bool doubleArrows = false,
int32 buttonDown = -1);
virtual void DrawScrollBarThumb(BView* view, BRect& rect,
BRect& thumbRect, const BRect& updateRect,
const rgb_color& base, uint32 flags,
orientation orientation,
uint32 knobStyle = 0);
virtual void DrawScrollViewFrame(BView* view,
BRect& rect, const BRect& updateRect,
BRect verticalScrollBarFrame,
BRect horizontalScrollBarFrame,
const rgb_color& base,
border_style borderStyle,
uint32 flags = 0,
uint32 borders = B_ALL_BORDERS);
virtual void DrawArrowShape(BView* view,
BRect& rect, const BRect& updateRect,
const rgb_color& base, uint32 direction,
uint32 flags = 0,
float tint = B_DARKEN_MAX_TINT);
virtual rgb_color SliderBarColor(const rgb_color& base);
virtual void DrawSliderBar(BView* view, BRect rect,
const BRect& updateRect,
const rgb_color& base,
rgb_color leftFillColor,
rgb_color rightFillColor,
float sliderScale, uint32 flags,
orientation orientation);
virtual void DrawSliderBar(BView* view, BRect rect,
const BRect& updateRect,
const rgb_color& base, rgb_color fillColor,
uint32 flags, orientation orientation);
virtual void DrawSliderThumb(BView* view, BRect& rect,
const BRect& updateRect,
const rgb_color& base, uint32 flags,
orientation orientation);
virtual void DrawSliderTriangle(BView* view, BRect& rect,
const BRect& updateRect,
const rgb_color& base, uint32 flags,
orientation orientation);
virtual void DrawSliderTriangle(BView* view, BRect& rect,
const BRect& updateRect,
const rgb_color& base,
const rgb_color& fill, uint32 flags,
orientation orientation);
virtual void DrawSliderHashMarks(BView* view, BRect& rect,
const BRect& updateRect,
const rgb_color& base, int32 count,
hash_mark_location location,
uint32 flags, orientation orientation);
virtual void DrawActiveTab(BView* view, BRect& rect,
const BRect& updateRect,
const rgb_color& base, uint32 flags = 0,
uint32 borders = B_ALL_BORDERS,
uint32 side = B_TOP_BORDER);
virtual void DrawInactiveTab(BView* view, BRect& rect,
const BRect& updateRect,
const rgb_color& base, uint32 flags = 0,
uint32 borders = B_ALL_BORDERS,
uint32 side = B_TOP_BORDER);
virtual void DrawSplitter(BView* view, BRect& rect,
const BRect& updateRect,
const rgb_color& base,
orientation orientation,
uint32 flags = 0,
uint32 borders = B_ALL_BORDERS);
// various borders
virtual void DrawBorder(BView* view, BRect& rect,
const BRect& updateRect,
const rgb_color& base,
border_style borderStyle, uint32 flags = 0,
uint32 borders = B_ALL_BORDERS);
virtual void DrawRaisedBorder(BView* view, BRect& rect,
const BRect& updateRect,
const rgb_color& base, uint32 flags = 0,
uint32 borders = B_ALL_BORDERS);
virtual void DrawGroupFrame(BView* view, BRect& rect,
const BRect& updateRect,
const rgb_color& base,
uint32 borders = B_ALL_BORDERS);
virtual void DrawTextControlBorder(BView* view, BRect& rect,
const BRect& updateRect,
const rgb_color& base, uint32 flags = 0,
uint32 borders = B_ALL_BORDERS);
// aligned labels
virtual void DrawLabel(BView* view, const char* label,
BRect rect, const BRect& updateRect,
const rgb_color& base, uint32 flags,
const rgb_color* textColor = NULL);
virtual void DrawLabel(BView* view, const char* label,
BRect rect, const BRect& updateRect,
const rgb_color& base, uint32 flags,
const BAlignment& alignment,
const rgb_color* textColor = NULL);
// TODO: Would be nice to have a (non-virtual) version of this method
// which takes an array of labels and locations. That would save some
// setup with the view graphics state.
virtual void DrawLabel(BView* view, const char* label,
const rgb_color& base, uint32 flags,
const BPoint& where,
const rgb_color* textColor = NULL);
virtual void DrawLabel(BView* view, const char* label,
const BBitmap* icon, BRect rect,
const BRect& updateRect,
const rgb_color& base, uint32 flags,
const BAlignment& alignment,
const rgb_color* textColor = NULL);
virtual void GetFrameInsets(frame_type frameType,
uint32 flags, float& _left, float& _top,
float& _right, float& _bottom);
virtual void GetBackgroundInsets(
background_type backgroundType,
uint32 flags, float& _left, float& _top,
float& _right, float& _bottom);
virtual void DrawButtonWithPopUpBackground(BView* view,
BRect& rect, const BRect& updateRect,
const rgb_color& base,
uint32 flags = 0,
uint32 borders = B_ALL_BORDERS,
orientation orientation = B_HORIZONTAL);
virtual void DrawButtonWithPopUpBackground(BView* view,
BRect& rect, const BRect& updateRect,
float radius,
const rgb_color& base,
uint32 flags = 0,
uint32 borders = B_ALL_BORDERS,
orientation orientation = B_HORIZONTAL);
virtual void DrawButtonWithPopUpBackground(BView* view,
BRect& rect, const BRect& updateRect,
float leftTopRadius,
float rightTopRadius,
float leftBottomRadius,
float rightBottomRadius,
const rgb_color& base,
uint32 flags = 0,
uint32 borders = B_ALL_BORDERS,
orientation orientation = B_HORIZONTAL);
protected:
void _DrawButtonFrame(BView* view, BRect& rect,
const BRect& updateRect,
float leftTopRadius,
float rightTopRadius,
float leftBottomRadius,
float rightBottomRadius,
const rgb_color& base,
const rgb_color& background,
float contrast, float brightness = 1.0,
uint32 flags = 0,
uint32 borders = B_ALL_BORDERS);
void _DrawOuterResessedFrame(BView* view,
BRect& rect, const rgb_color& base,
float contrast = 1.0f,
float brightness = 1.0f,
uint32 flags = 0,
uint32 borders = B_ALL_BORDERS);
void _DrawFrame(BView* view, BRect& rect,
const rgb_color& left,
const rgb_color& top,
const rgb_color& right,
const rgb_color& bottom,
uint32 borders = B_ALL_BORDERS);
void _DrawFrame(BView* view, BRect& rect,
const rgb_color& left,
const rgb_color& top,
const rgb_color& right,
const rgb_color& bottom,
const rgb_color& rightTop,
const rgb_color& leftBottom,
uint32 borders = B_ALL_BORDERS);
void _DrawButtonBackground(BView* view, BRect& rect,
const BRect& updateRect,
float leftTopRadius,
float rightTopRadius,
float leftBottomRadius,
float rightBottomRadius,
const rgb_color& base,
bool popupIndicator = false,
uint32 flags = 0,
uint32 borders = B_ALL_BORDERS,
orientation orientation = B_HORIZONTAL);
void _DrawFlatButtonBackground(BView* view,
BRect& rect, const BRect& updateRect,
const rgb_color& base,
bool popupIndicator = false,
uint32 flags = 0,
uint32 borders = B_ALL_BORDERS,
orientation orientation = B_HORIZONTAL);
void _DrawNonFlatButtonBackground(BView* view,
BRect& rect, const BRect& updateRect,
BRegion& clipping,
float leftTopRadius,
float rightTopRadius,
float leftBottomRadius,
float rightBottomRadius,
const rgb_color& base,
bool popupIndicator = false,
uint32 flags = 0,
uint32 borders = B_ALL_BORDERS,
orientation orientation = B_HORIZONTAL);
void _DrawPopUpMarker(BView* view, const BRect& rect,
const rgb_color& base, uint32 flags);
void _DrawMenuFieldBackgroundOutside(BView* view,
BRect& rect, const BRect& updateRect,
float leftTopRadius,
float rightTopRadius,
float leftBottomRadius,
float rightBottomRadius,
const rgb_color& base,
bool popupIndicator = false,
uint32 flags = 0);
void _DrawMenuFieldBackgroundInside(BView* view,
BRect& rect, const BRect& updateRect,
float leftTopRadius,
float rightTopRadius,
float leftBottomRadius,
float rightBottomRadius,
const rgb_color& base, uint32 flags = 0,
uint32 borders = B_ALL_BORDERS);
// Rounded corner methods
void _DrawRoundCornerLeftTop(BView* view,
BRect& cornerRect, const BRect& updateRect,
const rgb_color& background,
const rgb_color& edgeColor,
const rgb_color& frameColor,
const rgb_color& bevelColor,
const BGradientLinear& fillGradient);
void _DrawRoundCornerFrameLeftTop(BView* view,
BRect& cornerRect, const BRect& updateRect,
const rgb_color& background,
const rgb_color& edgeColor,
const rgb_color& frameColor);
void _DrawRoundCornerBackgroundLeftTop(BView* view,
BRect& cornerRect, const BRect& updateRect,
const rgb_color& bevelColor,
const BGradientLinear& fillGradient);
void _DrawRoundCornerRightTop(BView* view,
BRect& cornerRect, const BRect& updateRect,
const rgb_color& background,
const rgb_color& edgeTopColor,
const rgb_color& edgeRightColor,
const rgb_color& frameTopColor,
const rgb_color& frameRightColor,
const rgb_color& bevelTopColor,
const rgb_color& bevelRightColor,
const BGradientLinear& fillGradient);
void _DrawRoundCornerFrameRightTop(BView* view,
BRect& cornerRect, const BRect& updateRect,
const rgb_color& background,
const rgb_color& edgeTopColor,
const rgb_color& edgeRightColor,
const rgb_color& frameTopColor,
const rgb_color& frameRightColor);
void _DrawRoundCornerBackgroundRightTop(BView* view,
BRect& cornerRect, const BRect& updateRect,
const rgb_color& bevelTopColor,
const rgb_color& bevelRightColor,
const BGradientLinear& fillGradient);
void _DrawRoundCornerLeftBottom(BView* view,
BRect& cornerRect, const BRect& updateRect,
const rgb_color& background,
const rgb_color& edgeLeftColor,
const rgb_color& edgeBottomColor,
const rgb_color& frameLeftColor,
const rgb_color& frameBottomColor,
const rgb_color& bevelLeftColor,
const rgb_color& bevelBottomColor,
const BGradientLinear& fillGradient);
void _DrawRoundCornerFrameLeftBottom(BView* view,
BRect& cornerRect, const BRect& updateRect,
const rgb_color& background,
const rgb_color& edgeLeftColor,
const rgb_color& edgeBottomColor,
const rgb_color& frameLeftColor,
const rgb_color& frameBottomColor);
void _DrawRoundCornerBackgroundLeftBottom(BView* view,
BRect& cornerRect, const BRect& updateRect,
const rgb_color& bevelLeftColor,
const rgb_color& bevelBottomColor,
const BGradientLinear& fillGradient);
void _DrawRoundCornerRightBottom(BView* view,
BRect& cornerRect, const BRect& updateRect,
const rgb_color& background,
const rgb_color& edgeColor,
const rgb_color& frameColor,
const rgb_color& bevelColor,
const BGradientLinear& fillGradient);
void _DrawRoundCornerFrameRightBottom(BView* view,
BRect& cornerRect, const BRect& updateRect,
const rgb_color& background,
const rgb_color& edgeColor,
const rgb_color& frameColor);
void _DrawRoundCornerBackgroundRightBottom(
BView* view,
BRect& cornerRect, const BRect& updateRect,
const rgb_color& bevelColor,
const BGradientLinear& fillGradient);
void _DrawRoundBarCorner(BView* view, BRect& rect,
const BRect& updateRect,
const rgb_color& edgeLightColor,
const rgb_color& edgeShadowColor,
const rgb_color& frameLightColor,
const rgb_color& frameShadowColor,
const rgb_color& fillLightColor,
const rgb_color& fillShadowColor,
float leftInset, float topInset,
float rightInset, float bottomInset,
orientation orientation);
// Border color methods
rgb_color _EdgeLightColor(const rgb_color& base,
float contrast, float brightness,
uint32 flags);
rgb_color _EdgeShadowColor(const rgb_color& base,
float contrast, float brightness,
uint32 flags);
rgb_color _FrameLightColor(const rgb_color& base,
uint32 flags);
rgb_color _FrameShadowColor(const rgb_color& base,
uint32 flags);
rgb_color _BevelLightColor(const rgb_color& base,
uint32 flags);
rgb_color _BevelShadowColor(const rgb_color& base,
uint32 flags);
// Background gradient methods
void _FillGradient(BView* view, const BRect& rect,
const rgb_color& base, float topTint,
float bottomTint,
orientation orientation = B_HORIZONTAL);
void _FillGlossyGradient(BView* view,
const BRect& rect, const rgb_color& base,
float topTint, float middle1Tint,
float middle2Tint, float bottomTint,
orientation orientation = B_HORIZONTAL);
void _MakeGradient(BGradientLinear& gradient,
const BRect& rect, const rgb_color& base,
float topTint, float bottomTint,
orientation orientation = B_HORIZONTAL) const;
void _MakeGlossyGradient(BGradientLinear& gradient,
const BRect& rect, const rgb_color& base,
float topTint, float middle1Tint,
float middle2Tint, float bottomTint,
orientation orientation = B_HORIZONTAL) const;
void _MakeButtonGradient(BGradientLinear& gradient,
BRect& rect, const rgb_color& base,
uint32 flags, orientation orientation = B_HORIZONTAL) const;
bool _RadioButtonAndCheckBoxMarkColor(
const rgb_color& base, rgb_color& color,
uint32 flags) const;
void _DrawScrollBarBackground(BView* view,
BRect& rect1, BRect& rect2,
const BRect& updateRect,
const rgb_color& base, uint32 flags,
orientation orientation);
void _DrawScrollBarBackground(BView* view,
BRect& rect, const BRect& updateRect,
const rgb_color& base, uint32 flags,
orientation orientation);
void _DrawDisabledScrollBarBackground(BView* view,
BRect rect, orientation orientation,
const rgb_color& light,
const rgb_color& dark,
const rgb_color& fill);
void _DrawScrollBarArrowButton(BView* view,
BRect rect, const BRect& updateRect,
const rgb_color& base, uint32 flags,
int32 direction, orientation orientation,
bool doubleArrows, bool down);
private:
bool fCachedOutline;
};
} // namespace BPrivate
#endif // _HAIKU_CONTROL_LOOK_H