From cd5893d6e8b51b8ca133fc01e43664fe5839b2cc Mon Sep 17 00:00:00 2001 From: jules Date: Fri, 13 Jul 2012 13:36:55 +0100 Subject: [PATCH] Removed the Scrollbar's setButtonVisibility method, and instead added LookAndFeel::areScrollbarButtonsVisible() --- .../juce_gui_basics/layout/juce_ScrollBar.cpp | 40 +++++++++---------- .../juce_gui_basics/layout/juce_ScrollBar.h | 15 +++---- .../juce_gui_basics/layout/juce_Viewport.cpp | 6 --- .../juce_gui_basics/layout/juce_Viewport.h | 6 --- .../lookandfeel/juce_LookAndFeel.cpp | 5 +++ .../lookandfeel/juce_LookAndFeel.h | 2 + .../widgets/juce_TextEditor.cpp | 5 --- .../juce_gui_basics/widgets/juce_TextEditor.h | 6 --- 8 files changed, 33 insertions(+), 52 deletions(-) diff --git a/modules/juce_gui_basics/layout/juce_ScrollBar.cpp b/modules/juce_gui_basics/layout/juce_ScrollBar.cpp index 47a712db9b..4e87fb2bd8 100644 --- a/modules/juce_gui_basics/layout/juce_ScrollBar.cpp +++ b/modules/juce_gui_basics/layout/juce_ScrollBar.cpp @@ -59,8 +59,7 @@ private: //============================================================================== -ScrollBar::ScrollBar (const bool vertical_, - const bool buttonsAreVisible) +ScrollBar::ScrollBar (const bool vertical_) : totalRange (0.0, 1.0), visibleRange (0.0, 0.1), singleStepSize (0.1), @@ -75,8 +74,6 @@ ScrollBar::ScrollBar (const bool vertical_, isDraggingThumb (false), autohides (true) { - setButtonVisibility (buttonsAreVisible); - setRepaintsOnMouseActivity (true); setFocusContainer (true); } @@ -235,22 +232,6 @@ void ScrollBar::setOrientation (const bool shouldBeVertical) } } -void ScrollBar::setButtonVisibility (const bool buttonsAreVisible) -{ - upButton = nullptr; - downButton = nullptr; - - if (buttonsAreVisible) - { - addAndMakeVisible (upButton = new ScrollbarButton (vertical ? 0 : 3, *this)); - addAndMakeVisible (downButton = new ScrollbarButton (vertical ? 2 : 1, *this)); - - setButtonRepeatSpeed (initialDelayInMillisecs, repeatDelayInMillisecs, minimumDelayInMillisecs); - } - - updateThumbPosition(); -} - void ScrollBar::setAutoHide (const bool shouldHideWhenFullRange) { autohides = shouldHideWhenFullRange; @@ -296,12 +277,31 @@ void ScrollBar::paint (Graphics& g) void ScrollBar::lookAndFeelChanged() { setComponentEffect (getLookAndFeel().getScrollbarEffect()); + resized(); } void ScrollBar::resized() { const int length = vertical ? getHeight() : getWidth(); + const bool buttonsVisible = getLookAndFeel().areScrollbarButtonsVisible(); + + if (buttonsVisible) + { + if (upButton == nullptr) + { + addAndMakeVisible (upButton = new ScrollbarButton (vertical ? 0 : 3, *this)); + addAndMakeVisible (downButton = new ScrollbarButton (vertical ? 2 : 1, *this)); + + setButtonRepeatSpeed (initialDelayInMillisecs, repeatDelayInMillisecs, minimumDelayInMillisecs); + } + } + else + { + upButton = nullptr; + downButton = nullptr; + } + const int buttonSize = upButton != nullptr ? jmin (getLookAndFeel().getScrollbarButtonSize (*this), length / 2) : 0; diff --git a/modules/juce_gui_basics/layout/juce_ScrollBar.h b/modules/juce_gui_basics/layout/juce_ScrollBar.h index d931833ee6..5a78236b18 100644 --- a/modules/juce_gui_basics/layout/juce_ScrollBar.h +++ b/modules/juce_gui_basics/layout/juce_ScrollBar.h @@ -27,7 +27,7 @@ #define __JUCE_SCROLLBAR_JUCEHEADER__ #include "../buttons/juce_Button.h" - +class Viewport; //============================================================================== /** @@ -50,7 +50,7 @@ @see ScrollBar::Listener */ class JUCE_API ScrollBar : public Component, - public AsyncUpdater, + private AsyncUpdater, private Timer { public: @@ -60,8 +60,7 @@ public: @param isVertical whether it should be a vertical or horizontal bar @param buttonsAreVisible whether to show the up/down or left/right buttons */ - ScrollBar (bool isVertical, - bool buttonsAreVisible = true); + ScrollBar (bool isVertical); /** Destructor. */ ~ScrollBar(); @@ -79,9 +78,6 @@ public: */ void setOrientation (bool shouldBeVertical); - /** Shows or hides the scrollbar's buttons. */ - void setButtonVisibility (bool buttonsAreVisible); - /** Tells the scrollbar whether to make itself invisible when not needed. The default behaviour is for a scrollbar to become invisible when the thumb @@ -295,8 +291,6 @@ public: /** @internal */ void lookAndFeelChanged(); /** @internal */ - void handleAsyncUpdate(); - /** @internal */ void mouseDown (const MouseEvent&); /** @internal */ void mouseDrag (const MouseEvent&); @@ -320,9 +314,12 @@ private: ScopedPointer upButton, downButton; ListenerList listeners; + void handleAsyncUpdate(); void updateThumbPosition(); void timerCallback(); + friend class Viewport; + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ScrollBar); }; diff --git a/modules/juce_gui_basics/layout/juce_Viewport.cpp b/modules/juce_gui_basics/layout/juce_Viewport.cpp index 5a774920b6..c914ed8054 100644 --- a/modules/juce_gui_basics/layout/juce_Viewport.cpp +++ b/modules/juce_gui_basics/layout/juce_Viewport.cpp @@ -328,12 +328,6 @@ int Viewport::getScrollBarThickness() const : getLookAndFeel().getDefaultScrollbarWidth(); } -void Viewport::setScrollBarButtonVisibility (const bool buttonsVisible) -{ - verticalScrollBar.setButtonVisibility (buttonsVisible); - horizontalScrollBar.setButtonVisibility (buttonsVisible); -} - void Viewport::scrollBarMoved (ScrollBar* scrollBarThatHasMoved, double newRangeStart) { const int newRangeStartInt = roundToInt (newRangeStart); diff --git a/modules/juce_gui_basics/layout/juce_Viewport.h b/modules/juce_gui_basics/layout/juce_Viewport.h index 1d9c3df025..29054f9d48 100644 --- a/modules/juce_gui_basics/layout/juce_Viewport.h +++ b/modules/juce_gui_basics/layout/juce_Viewport.h @@ -225,12 +225,6 @@ public: */ void setSingleStepSizes (int stepX, int stepY); - /** Shows or hides the buttons on any scrollbars that are used. - - @see ScrollBar::setButtonVisibility - */ - void setScrollBarButtonVisibility (bool buttonsVisible); - /** Returns a pointer to the scrollbar component being used. Handy if you need to customise the bar somehow. */ diff --git a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp index fdeee99f39..40cb104707 100644 --- a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp +++ b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp @@ -713,6 +713,11 @@ void LookAndFeel::drawSpinningWaitAnimation (Graphics& g, const Colour& colour, } } +bool LookAndFeel::areScrollbarButtonsVisible() +{ + return true; +} + void LookAndFeel::drawScrollbarButton (Graphics& g, ScrollBar& scrollbar, int width, int height, diff --git a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h index 8dd1cac0a1..d3fdd8902a 100644 --- a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h +++ b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h @@ -229,6 +229,8 @@ public: int x, int y, int w, int h); //============================================================================== + virtual bool areScrollbarButtonsVisible(); + /** Draws one of the buttons on a scrollbar. @param g the context to draw into diff --git a/modules/juce_gui_basics/widgets/juce_TextEditor.cpp b/modules/juce_gui_basics/widgets/juce_TextEditor.cpp index 53d36b419f..c4b7aea2c1 100644 --- a/modules/juce_gui_basics/widgets/juce_TextEditor.cpp +++ b/modules/juce_gui_basics/widgets/juce_TextEditor.cpp @@ -1200,11 +1200,6 @@ void TextEditor::setScrollBarThickness (const int newThicknessPixels) viewport->setScrollBarThickness (newThicknessPixels); } -void TextEditor::setScrollBarButtonVisibility (const bool buttonsVisible) -{ - viewport->setScrollBarButtonVisibility (buttonsVisible); -} - //============================================================================== void TextEditor::clear() { diff --git a/modules/juce_gui_basics/widgets/juce_TextEditor.h b/modules/juce_gui_basics/widgets/juce_TextEditor.h index 242343b3be..429431a1c5 100644 --- a/modules/juce_gui_basics/widgets/juce_TextEditor.h +++ b/modules/juce_gui_basics/widgets/juce_TextEditor.h @@ -287,12 +287,6 @@ public: */ void setScrollBarThickness (int newThicknessPixels); - /** Shows or hides the buttons on any scrollbars that are used. - - @see ScrollBar::setButtonVisibility - */ - void setScrollBarButtonVisibility (bool buttonsVisible); - //============================================================================== /** Receives callbacks from a TextEditor component when it changes.