diff --git a/src/preferences/appearance/FakeScrollBar.cpp b/src/preferences/appearance/FakeScrollBar.cpp new file mode 100644 index 0000000000..61a5c74215 --- /dev/null +++ b/src/preferences/appearance/FakeScrollBar.cpp @@ -0,0 +1,348 @@ +/* + * Copyright 2010-2012 Haiku, Inc. All rights reserved. + * Distributed under the terms of the MIT license. + * + * Authors: + * DarkWyrm + * John Scipione + */ + + +#include "FakeScrollBar.h" + +#include +#include +#include +#include +#include +#include +#include + + +typedef enum { + ARROW_LEFT = 0, + ARROW_RIGHT, + ARROW_UP, + ARROW_DOWN, + ARROW_NONE +} arrow_direction; + + +FakeScrollBar::FakeScrollBar(bool drawArrows, bool doubleArrows, + int32 knobStyle, BMessage* message) + : + BControl("FakeScrollBar", NULL, message, B_WILL_DRAW), + fDrawArrows(drawArrows), + fDoubleArrows(doubleArrows), + fKnobStyle(knobStyle) +{ + SetExplicitMinSize(BSize(160, 20)); + SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, 20)); +} + + +FakeScrollBar::~FakeScrollBar(void) +{ +} + + +void +FakeScrollBar::Draw(BRect updateRect) +{ + BRect bounds = Bounds(); + + rgb_color normal = ui_color(B_PANEL_BACKGROUND_COLOR); + + if (Value() == B_CONTROL_ON) + SetHighColor(ui_color(B_CONTROL_MARK_COLOR)); + else + SetHighColor(normal); + + // Draw the selected border (2px) + StrokeRect(bounds); + bounds.InsetBy(1.0, 1.0); + StrokeRect(bounds); + bounds.InsetBy(1.0, 1.0); + + // 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; + + if (fDrawArrows) { + // draw arrows + SetDrawingMode(B_OP_OVER); + + BRect buttonFrame(bounds.left, bounds.top, + bounds.left + bounds.Height(), bounds.bottom); + + _DrawArrowButton(ARROW_LEFT, fDoubleArrows, buttonFrame, updateRect); + + if (fDoubleArrows) { + buttonFrame.OffsetBy(bounds.Height() + 1, 0.0); + _DrawArrowButton(ARROW_RIGHT, fDoubleArrows, buttonFrame, + updateRect); + + buttonFrame.OffsetTo(bounds.right - ((bounds.Height() * 2) + 1), + bounds.top); + _DrawArrowButton(ARROW_LEFT, fDoubleArrows, 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, fDoubleArrows, 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); + + 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); + + if (fKnobStyle == KNOB_STYLE_NONE) + return; + + // draw the scrollbar thumb knobs + bool square = fKnobStyle == KNOB_STYLE_DOTS; + int32 hextent = 0; + int32 vextent = 0; + + if (square) { + hextent = 2; + vextent = 2; + } else { + hextent = 1; + vextent = 3; + } + + float hmiddle = bgRect.Width() / 2; + float vmiddle = bgRect.Height() / 2; + + BRect middleKnob = BRect(bgRect.left + hmiddle - hextent, + bgRect.top + vmiddle - vextent, + bgRect.left + hmiddle + hextent, + bgRect.top + vmiddle + vextent); + + BRect leftKnob = middleKnob.OffsetByCopy(hextent * -4, 0); + if (leftKnob.left > bgRect.left + hextent) { + be_control_look->DrawButtonBackground(this, leftKnob, updateRect, + normal, 0, BControlLook::B_ALL_BORDERS, B_HORIZONTAL); + } + + BRect rightKnob = middleKnob.OffsetByCopy(hextent * 4, 0); + if (rightKnob.right < bgRect.right - hextent) { + be_control_look->DrawButtonBackground(this, rightKnob, updateRect, + normal, 0, BControlLook::B_ALL_BORDERS, B_HORIZONTAL); + } + + // draw middle knob last because it modifies middleKnob + be_control_look->DrawButtonBackground(this, middleKnob, updateRect, + normal, 0, BControlLook::B_ALL_BORDERS, B_HORIZONTAL); +} + + +void +FakeScrollBar::MouseDown(BPoint point) +{ + BControl::MouseDown(point); +} + + +void +FakeScrollBar::MouseMoved(BPoint point, uint32 transit, + const BMessage* message) +{ + BControl::MouseMoved(point, transit, message); +} + + +void +FakeScrollBar::MouseUp(BPoint point) +{ + SetValue(B_CONTROL_ON); + Invoke(); + + Invalidate(); + + BControl::MouseUp(point); +} + + +void +FakeScrollBar::SetValue(int32 value) +{ + if (value != Value()) { + BControl::SetValueNoUpdate(value); + Invalidate(); + } + + if (!value) + return; + + BView* parent = Parent(); + BView* child = NULL; + + if (parent != NULL) { + // If the parent is a BBox, the group parent is the parent of the BBox + BBox* box = dynamic_cast(parent); + + if (box && box->LabelView() == this) + parent = box->Parent(); + + if (parent != NULL) { + BBox* box = dynamic_cast(parent); + + // If the parent is a BBox, skip the label if there is one + if (box && box->LabelView()) + child = parent->ChildAt(1); + else + child = parent->ChildAt(0); + } else + child = Window()->ChildAt(0); + } else if (Window()) + child = Window()->ChildAt(0); + + while (child) { + FakeScrollBar* scrollbar = dynamic_cast(child); + + if (scrollbar != NULL && (scrollbar != this)) + scrollbar->SetValue(B_CONTROL_OFF); + else { + // If the child is a BBox, check if the label is a scrollbarbutton + BBox* box = dynamic_cast(child); + + if (box && box->LabelView()) { + scrollbar = dynamic_cast(box->LabelView()); + + if (scrollbar != NULL && (scrollbar != this)) + scrollbar->SetValue(B_CONTROL_OFF); + } + } + + child = child->NextSibling(); + } + + //ASSERT(Value() == B_CONTROL_ON); +} + + +// #pragma mark - + + +void +FakeScrollBar::SetDoubleArrows(bool doublearrows) +{ + fDoubleArrows = doublearrows; + Invalidate(); +} + + +void +FakeScrollBar::SetKnobStyle(uint32 style) +{ + fKnobStyle = style; + Invalidate(); +} + + +void +FakeScrollBar::SetFromScrollBarInfo(const scroll_bar_info &info) +{ + fDoubleArrows = info.double_arrows; + fKnobStyle = info.knob; + Invalidate(); +} + + +// #pragma mark - + + +void +FakeScrollBar::_DrawArrowButton(int32 direction, bool doubleArrows, BRect r, + const BRect& updateRect) +{ + if (!updateRect.Intersects(r)) + return; + + rgb_color c = ui_color(B_PANEL_BACKGROUND_COLOR); + rgb_color light = tint_color(c, B_LIGHTEN_MAX_TINT); + rgb_color dark = tint_color(c, B_DARKEN_1_TINT); + rgb_color darker = tint_color(c, B_DARKEN_2_TINT); + rgb_color normal = c; + rgb_color arrow = tint_color(c, + (B_DARKEN_MAX_TINT + B_DARKEN_4_TINT) / 2.0); + + BPoint tri1, tri2, tri3; + 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.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.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.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.top + r.Height() / 1.33); + tri3.Set(r.right + 1, r.top); + break; + } + + r.InsetBy(-(hInset - 1), -(vInset - 1)); + BRect temp(r.InsetByCopy(-1, -1)); + be_control_look->DrawButtonBackground(this, temp, updateRect, + normal, 0, BControlLook::B_ALL_BORDERS, B_HORIZONTAL); + + BShape arrowShape; + arrowShape.MoveTo(tri1); + arrowShape.LineTo(tri2); + arrowShape.LineTo(tri3); + + SetHighColor(arrow); + SetPenSize(ceilf(hInset / 2.0)); + StrokeShape(&arrowShape); + SetPenSize(1.0); +} diff --git a/src/preferences/appearance/FakeScrollBar.h b/src/preferences/appearance/FakeScrollBar.h new file mode 100644 index 0000000000..383b3bcbfd --- /dev/null +++ b/src/preferences/appearance/FakeScrollBar.h @@ -0,0 +1,46 @@ +/* + * Copyright 2010-2012 Haiku, Inc. All rights reserved. + * Distributed under the terms of the MIT license. + * + * Authors: + * DarkWyrm + * John Scipione + */ +#ifndef FAKE_SCROLL_BAR_H +#define FAKE_SCROLL_BAR_H + + +#include + + +class FakeScrollBar : public BControl { +public: + FakeScrollBar(bool drawArrows, bool doubleArrows, + int32 knobStyle, BMessage* message); + ~FakeScrollBar(void); + + virtual void MouseDown(BPoint point); + virtual void MouseMoved(BPoint point, uint32 transit, + const BMessage *message); + virtual void MouseUp(BPoint point); + + virtual void Draw(BRect updateRect); + + virtual void SetValue(int32 value); + + void SetDoubleArrows(bool doublearrows); + void SetKnobStyle(uint32 style); + + void SetFromScrollBarInfo(const scroll_bar_info &info); + +private: + void _DrawArrowButton(int32 direction, + bool doubleArrows, BRect r, + const BRect& updateRect); + + bool fDrawArrows; + bool fDoubleArrows; + int32 fKnobStyle; +}; + +#endif // FAKE_SCROLL_BAR_H diff --git a/src/preferences/appearance/Jamfile b/src/preferences/appearance/Jamfile index 45904f7a26..1c287a91ac 100644 --- a/src/preferences/appearance/Jamfile +++ b/src/preferences/appearance/Jamfile @@ -10,6 +10,7 @@ Preference Appearance : APRMain.cpp AntialiasingSettingsView.cpp LookAndFeelSettingsView.cpp + FakeScrollBar.cpp FontSelectionView.cpp FontView.cpp APRView.cpp diff --git a/src/preferences/appearance/LookAndFeelSettingsView.cpp b/src/preferences/appearance/LookAndFeelSettingsView.cpp index 5720764d89..577e83da3f 100644 --- a/src/preferences/appearance/LookAndFeelSettingsView.cpp +++ b/src/preferences/appearance/LookAndFeelSettingsView.cpp @@ -3,8 +3,9 @@ * Distributed under the terms of the MIT license. * * Authors: - * Alexander von Gluck, kallisti5@unixzen.com * Stephan Aßmus + * Alexander von Gluck + * John Scipione * Ryan Leavengood */ @@ -22,15 +23,22 @@ #include #include #include +#include #include #include #include #include +#include +#include +#include +#include #include #include +#include #include #include "APRWindow.h" +#include "FakeScrollBar.h" #undef B_TRANSLATION_CONTEXT @@ -40,9 +48,17 @@ static const int32 kMsgSetDecor = 'deco'; static const int32 kMsgDecorInfo = 'idec'; -static const int32 kMsgDoubleScrollbarArrows = 'dsba'; -static const bool kDefaultDoubleScrollbarArrowsSetting = false; +static const int32 kMsgDoubleScrollBarArrows = 'dsba'; + +static const int32 kMsgArrowStyleSingle = 'mass'; +static const int32 kMsgArrowStyleDouble = 'masd'; + +static const int32 kMsgKnobStyleNone = 'mksn'; +static const int32 kMsgKnobStyleDots = 'mksd'; +static const int32 kMsgKnobStyleLines = 'mksl'; + +static const bool kDefaultDoubleScrollBarArrowsSetting = false; // #pragma mark - @@ -53,8 +69,7 @@ LookAndFeelSettingsView::LookAndFeelSettingsView(const char* name) BView(name, 0), fDecorInfoButton(NULL), fDecorMenuField(NULL), - fDecorMenu(NULL), - fDoubleScrollbarArrowsCheckBox(NULL) + fDecorMenu(NULL) { // Decorator menu _BuildDecorMenu(); @@ -64,24 +79,78 @@ LookAndFeelSettingsView::LookAndFeelSettingsView(const char* name) fDecorInfoButton = new BButton(B_TRANSLATE("About"), new BMessage(kMsgDecorInfo)); - fDoubleScrollbarArrowsCheckBox = new BCheckBox("doubleScrollbarArrows", - B_TRANSLATE("Use double scrollbar arrows"), - new BMessage(kMsgDoubleScrollbarArrows)); + // scrollbar arrow style + BBox* arrowStyleBox = new BBox("arrow style"); + arrowStyleBox->SetLabel(B_TRANSLATE("Arrow style")); - fSavedDoubleArrowsValue = _GetDoubleScrollbarArrowsSetting(); - fDoubleScrollbarArrowsCheckBox->SetValue(fSavedDoubleArrowsValue); + fSavedDoubleArrowsValue = _DoubleScrollBarArrows(); + + fArrowStyleSingle = new FakeScrollBar(true, false, KNOB_STYLE_LINES, + new BMessage(kMsgArrowStyleSingle)); + fArrowStyleDouble = new FakeScrollBar(true, true, KNOB_STYLE_LINES, + new BMessage(kMsgArrowStyleDouble)); + + BView* arrowStyleView; + arrowStyleView = BLayoutBuilder::Group<>() + .AddGroup(B_VERTICAL, 0) + .Add(new BStringView("single", B_TRANSLATE("Single:"))) + .Add(fArrowStyleSingle) + .Add(new BStringView("spacer", "")) + .Add(new BStringView("double", B_TRANSLATE("Double:"))) + .Add(fArrowStyleDouble) + .SetInsets(B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING, + B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING) + .End() + .View(); + arrowStyleBox->AddChild(arrowStyleView); + + // scrollbar knob style + fSavedKnobStyleValue = _ScrollBarKnobStyle(); + + BBox* knobStyleBox = new BBox("knob style"); + knobStyleBox->SetLabel(B_TRANSLATE("Knob style")); + + fKnobStyleNone = new FakeScrollBar(false, false, KNOB_STYLE_NONE, + new BMessage(kMsgKnobStyleNone)); + fKnobStyleDots = new FakeScrollBar(false, false, KNOB_STYLE_DOTS, + new BMessage(kMsgKnobStyleDots)); + fKnobStyleLines = new FakeScrollBar(false, false, KNOB_STYLE_LINES, + new BMessage(kMsgKnobStyleLines)); + + BView* knobStyleView; + knobStyleView = BLayoutBuilder::Group<>() + .AddGroup(B_VERTICAL, 0) + .Add(fKnobStyleNone) + .Add(new BStringView("spacer", "")) + .Add(fKnobStyleDots) + .Add(new BStringView("spacer", "")) + .Add(fKnobStyleLines) + .SetInsets(B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING, + B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING) + .End() + .View(); + knobStyleBox->AddChild(knobStyleView); SetLayout(new BGroupLayout(B_VERTICAL)); // control layout - AddChild(BGridLayoutBuilder(10, 10) - .Add(fDecorMenuField->CreateLabelLayoutItem(), 0, 0) - .Add(fDecorMenuField->CreateMenuBarLayoutItem(), 1, 0) - .Add(fDecorInfoButton, 2, 0) - - .Add(fDoubleScrollbarArrowsCheckBox, 0, 3, 2) - .Add(BSpaceLayoutItem::CreateGlue(), 0, 4, 2) - .SetInsets(10, 10, 10, 10) + AddChild(BGroupLayoutBuilder(B_VERTICAL, B_USE_DEFAULT_SPACING) + .AddGroup(B_VERTICAL, B_USE_DEFAULT_SPACING) + .Add(BGridLayoutBuilder(B_USE_DEFAULT_SPACING, + B_USE_DEFAULT_SPACING) + .Add(fDecorMenuField->CreateLabelLayoutItem(), 0, 0) + .Add(fDecorMenuField->CreateMenuBarLayoutItem(), 1, 0) + .Add(fDecorInfoButton, 2, 0) + ) + .Add(new BStringView("label", B_TRANSLATE("Scrollbars:"))) + .AddGroup(B_HORIZONTAL, B_USE_DEFAULT_SPACING) + .Add(arrowStyleBox) + .Add(knobStyleBox) + .End() + .AddGlue() + .End() + .SetInsets(B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING, + B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING) ); // TODO : Decorator Preview Image? } @@ -102,7 +171,30 @@ LookAndFeelSettingsView::AttachedToWindow() fDecorMenu->SetTargetForItems(this); fDecorInfoButton->SetTarget(this); - fDoubleScrollbarArrowsCheckBox->SetTarget(this); + fArrowStyleSingle->SetTarget(this); + fArrowStyleDouble->SetTarget(this); + fKnobStyleNone->SetTarget(this); + fKnobStyleDots->SetTarget(this); + fKnobStyleLines->SetTarget(this); + + if (fSavedDoubleArrowsValue) + fArrowStyleDouble->SetValue(B_CONTROL_ON); + else + fArrowStyleSingle->SetValue(B_CONTROL_ON); + + switch (fSavedKnobStyleValue) { + case KNOB_STYLE_NONE: + fKnobStyleNone->SetValue(B_CONTROL_ON); + break; + + case KNOB_STYLE_DOTS: + fKnobStyleDots->SetValue(B_CONTROL_ON); + break; + + case KNOB_STYLE_LINES: + fKnobStyleLines->SetValue(B_CONTROL_ON); + break; + } } @@ -117,6 +209,7 @@ LookAndFeelSettingsView::MessageReceived(BMessage *msg) _SetDecor(newDecor); break; } + case kMsgDecorInfo: { DecorInfo* decor = fDecorUtility.FindDecorator(fCurrentDecor); @@ -145,8 +238,25 @@ LookAndFeelSettingsView::MessageReceived(BMessage *msg) break; } - case kMsgDoubleScrollbarArrows: - _SetDoubleScrollbarArrowsSetting(fDoubleScrollbarArrowsCheckBox->Value()); + + case kMsgArrowStyleSingle: + _SetDoubleScrollBarArrows(false); + break; + + case kMsgArrowStyleDouble: + _SetDoubleScrollBarArrows(true); + break; + + case kMsgKnobStyleNone: + _SetScrollBarKnobStyle(KNOB_STYLE_NONE); + break; + + case kMsgKnobStyleDots: + _SetScrollBarKnobStyle(KNOB_STYLE_DOTS); + break; + + case kMsgKnobStyleLines: + _SetScrollBarKnobStyle(KNOB_STYLE_LINES); break; default: @@ -221,7 +331,7 @@ LookAndFeelSettingsView::_AdoptInterfaceToCurrentDecor() bool -LookAndFeelSettingsView::_GetDoubleScrollbarArrowsSetting() +LookAndFeelSettingsView::_DoubleScrollBarArrows() { scroll_bar_info info; get_scroll_bar_info(&info); @@ -231,42 +341,84 @@ LookAndFeelSettingsView::_GetDoubleScrollbarArrowsSetting() void -LookAndFeelSettingsView::_SetDoubleScrollbarArrowsSetting(bool value) +LookAndFeelSettingsView::_SetDoubleScrollBarArrows(bool on) { scroll_bar_info info; get_scroll_bar_info(&info); - info.double_arrows = value; + info.double_arrows = on; set_scroll_bar_info(&info); + if (on) + fArrowStyleDouble->SetValue(B_CONTROL_ON); + else + fArrowStyleSingle->SetValue(B_CONTROL_ON); + Window()->PostMessage(kMsgUpdate); } +int32 +LookAndFeelSettingsView::_ScrollBarKnobStyle() +{ + scroll_bar_info info; + get_scroll_bar_info(&info); + + return info.knob; +} + + +void +LookAndFeelSettingsView::_SetScrollBarKnobStyle(int32 knobStyle) +{ + scroll_bar_info info; + get_scroll_bar_info(&info); + + info.knob = knobStyle; + set_scroll_bar_info(&info); + + switch (knobStyle) { + case KNOB_STYLE_NONE: + fKnobStyleNone->SetValue(B_CONTROL_ON); + break; + + case KNOB_STYLE_DOTS: + fKnobStyleDots->SetValue(B_CONTROL_ON); + break; + + case KNOB_STYLE_LINES: + fKnobStyleLines->SetValue(B_CONTROL_ON); + break; + } + + Window()->PostMessage(kMsgUpdate); +} + + +bool +LookAndFeelSettingsView::IsDefaultable() +{ + return fCurrentDecor != fDecorUtility.DefaultDecorator()->Name() + || _DoubleScrollBarArrows() != false + || _ScrollBarKnobStyle() != KNOB_STYLE_DOTS; +} + + void LookAndFeelSettingsView::SetDefaults() { _SetDecor(fDecorUtility.DefaultDecorator()); - _SetDoubleScrollbarArrowsSetting(kDefaultDoubleScrollbarArrowsSetting); - fDoubleScrollbarArrowsCheckBox->SetValue( - kDefaultDoubleScrollbarArrowsSetting); -} - - -bool -LookAndFeelSettingsView::IsDefaultable() -{ - return fCurrentDecor != fDecorUtility.DefaultDecorator()->Name() || - fDoubleScrollbarArrowsCheckBox->Value() != - kDefaultDoubleScrollbarArrowsSetting; + _SetDoubleScrollBarArrows(false); + _SetScrollBarKnobStyle(KNOB_STYLE_DOTS); } bool LookAndFeelSettingsView::IsRevertable() { - return fCurrentDecor != fSavedDecor || - fDoubleScrollbarArrowsCheckBox->Value() != fSavedDoubleArrowsValue; + return fCurrentDecor != fSavedDecor + || _DoubleScrollBarArrows() != fSavedDoubleArrowsValue + || _ScrollBarKnobStyle() != fSavedKnobStyleValue; } @@ -274,6 +426,6 @@ void LookAndFeelSettingsView::Revert() { _SetDecor(fSavedDecor); - _SetDoubleScrollbarArrowsSetting(fSavedDoubleArrowsValue); - fDoubleScrollbarArrowsCheckBox->SetValue(fSavedDoubleArrowsValue); + _SetScrollBarKnobStyle(fSavedKnobStyleValue); + _SetDoubleScrollBarArrows(fSavedDoubleArrowsValue); } diff --git a/src/preferences/appearance/LookAndFeelSettingsView.h b/src/preferences/appearance/LookAndFeelSettingsView.h index 3214be3924..db2b5bddea 100644 --- a/src/preferences/appearance/LookAndFeelSettingsView.h +++ b/src/preferences/appearance/LookAndFeelSettingsView.h @@ -2,9 +2,10 @@ * Copyright 2010-2012 Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT license. * - * Authors: - * Alexander von Gluck, kallisti5@unixzen.com + * Authors: * Stephan Aßmus + * Alexander von Gluck + * John Scipione * Ryan Leavengood */ #ifndef LOOK_AND_FEEL_SETTINGS_VIEW_H @@ -20,7 +21,7 @@ class BButton; class BCheckBox; class BMenuField; class BPopUpMenu; - +class FakeScrollBar; class LookAndFeelSettingsView : public BView { public: @@ -30,10 +31,11 @@ public: virtual void AttachedToWindow(); virtual void MessageReceived(BMessage* message); - void SetDefaults(); - void Revert(); bool IsDefaultable(); + void SetDefaults(); + bool IsRevertable(); + void Revert(); private: void _SetDecor(const BString& name); @@ -42,8 +44,12 @@ private: void _BuildDecorMenu(); void _AdoptToCurrentDecor(); void _AdoptInterfaceToCurrentDecor(); - bool _GetDoubleScrollbarArrowsSetting(); - void _SetDoubleScrollbarArrowsSetting(bool value); + + bool _DoubleScrollBarArrows(); + void _SetDoubleScrollBarArrows(bool on); + + int32 _ScrollBarKnobStyle(); + void _SetScrollBarKnobStyle(int32 knobStyle); private: DecorInfoUtility fDecorUtility; @@ -51,11 +57,19 @@ private: BButton* fDecorInfoButton; BMenuField* fDecorMenuField; BPopUpMenu* fDecorMenu; - BCheckBox* fDoubleScrollbarArrowsCheckBox; + + FakeScrollBar* fArrowStyleSingle; + FakeScrollBar* fArrowStyleDouble; + + FakeScrollBar* fKnobStyleNone; + FakeScrollBar* fKnobStyleDots; + FakeScrollBar* fKnobStyleLines; BString fSavedDecor; BString fCurrentDecor; + bool fSavedDoubleArrowsValue; + int32 fSavedKnobStyleValue; }; #endif // LOOK_AND_FEEL_SETTINGS_VIEW_H