From 9d909fc3fe761a096c3ccd32d18a355ac843add7 Mon Sep 17 00:00:00 2001 From: Oliver James Date: Mon, 20 Mar 2023 14:52:59 +0000 Subject: [PATCH] Slider: LookAndFeel outline style --- .../lookandfeel/juce_LookAndFeel_V1.cpp | 3 +++ .../lookandfeel/juce_LookAndFeel_V2.cpp | 12 ++++++++++++ .../lookandfeel/juce_LookAndFeel_V2.h | 4 ++++ .../lookandfeel/juce_LookAndFeel_V3.cpp | 2 ++ .../lookandfeel/juce_LookAndFeel_V4.cpp | 5 +++++ modules/juce_gui_basics/widgets/juce_Slider.cpp | 6 ------ modules/juce_gui_basics/widgets/juce_Slider.h | 5 +++++ 7 files changed, 31 insertions(+), 6 deletions(-) diff --git a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V1.cpp b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V1.cpp index 004d68455c..64d1284e34 100644 --- a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V1.cpp +++ b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V1.cpp @@ -465,6 +465,9 @@ void LookAndFeel_V1::drawLinearSlider (Graphics& g, fill, outline); } } + + if (slider.isBar()) + drawLinearSliderOutline (g, x, y, w, h, style, slider); } Button* LookAndFeel_V1::createSliderButton (Slider&, const bool isIncrement) diff --git a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp index 0fbd6ac5ba..e6f4b72679 100644 --- a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp +++ b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp @@ -1373,6 +1373,16 @@ void LookAndFeel_V2::drawLinearSliderBackground (Graphics& g, int x, int y, int g.strokePath (indent, PathStrokeType (0.5f)); } +void LookAndFeel_V2::drawLinearSliderOutline (Graphics& g, int, int, int width, int height, + const Slider::SliderStyle, Slider& slider) +{ + if (slider.getTextBoxPosition() == Slider::NoTextBox) + { + g.setColour (slider.findColour (Slider::textBoxOutlineColourId)); + g.drawRect (0, 0, width, height, 1); + } +} + void LookAndFeel_V2::drawLinearSliderThumb (Graphics& g, int x, int y, int width, int height, float sliderPos, float minSliderPos, float maxSliderPos, const Slider::SliderStyle style, Slider& slider) @@ -1487,6 +1497,8 @@ void LookAndFeel_V2::drawLinearSlider (Graphics& g, int x, int y, int width, int baseColour, slider.isEnabled() ? 0.9f : 0.3f, true, true, true, true); + + drawLinearSliderOutline (g, x, y, width, height, style, slider); } else { diff --git a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h index a4a3d1a724..8be0fd052c 100644 --- a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h +++ b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h @@ -248,6 +248,10 @@ public: float sliderPos, float minSliderPos, float maxSliderPos, const Slider::SliderStyle, Slider&) override; + void drawLinearSliderOutline (Graphics&, int x, int y, int width, int height, + const Slider::SliderStyle, Slider&) override; + + void drawLinearSliderThumb (Graphics&, int x, int y, int width, int height, float sliderPos, float minSliderPos, float maxSliderPos, const Slider::SliderStyle, Slider&) override; diff --git a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp index 3c6a6e66fd..8ad233b048 100644 --- a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp +++ b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp @@ -420,6 +420,8 @@ void LookAndFeel_V3::drawLinearSlider (Graphics& g, int x, int y, int width, int g.fillRect (fx, sliderPos, fw, 1.0f); else g.fillRect (sliderPos, fy, 1.0f, fh); + + drawLinearSliderOutline (g, x, y, width, height, style, slider); } else { diff --git a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V4.cpp b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V4.cpp index bbcb196db0..306acaf6fe 100644 --- a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V4.cpp +++ b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V4.cpp @@ -956,6 +956,8 @@ void LookAndFeel_V4::drawLinearSlider (Graphics& g, int x, int y, int width, int g.setColour (slider.findColour (Slider::trackColourId)); g.fillRect (slider.isHorizontal() ? Rectangle (static_cast (x), (float) y + 0.5f, sliderPos - (float) x, (float) height - 1.0f) : Rectangle ((float) x + 0.5f, sliderPos, (float) width - 1.0f, (float) y + ((float) height - sliderPos))); + + drawLinearSliderOutline (g, x, y, width, height, style, slider); } else { @@ -1038,6 +1040,9 @@ void LookAndFeel_V4::drawLinearSlider (Graphics& g, int x, int y, int width, int trackWidth * 2.0f, pointerColour, 3); } } + + if (slider.isBar()) + drawLinearSliderOutline (g, x, y, width, height, style, slider); } } diff --git a/modules/juce_gui_basics/widgets/juce_Slider.cpp b/modules/juce_gui_basics/widgets/juce_Slider.cpp index 58e593182d..b72fe47757 100644 --- a/modules/juce_gui_basics/widgets/juce_Slider.cpp +++ b/modules/juce_gui_basics/widgets/juce_Slider.cpp @@ -1242,12 +1242,6 @@ public: getLinearSliderPos (lastValueMax), style, owner); } - - if ((style == LinearBar || style == LinearBarVertical) && valueBox == nullptr) - { - g.setColour (owner.findColour (Slider::textBoxOutlineColourId)); - g.drawRect (0, 0, owner.getWidth(), owner.getHeight(), 1); - } } } diff --git a/modules/juce_gui_basics/widgets/juce_Slider.h b/modules/juce_gui_basics/widgets/juce_Slider.h index e176318945..71075afb8f 100644 --- a/modules/juce_gui_basics/widgets/juce_Slider.h +++ b/modules/juce_gui_basics/widgets/juce_Slider.h @@ -932,6 +932,11 @@ public: const Slider::SliderStyle style, Slider&) = 0; + virtual void drawLinearSliderOutline (Graphics&, + int x, int y, int width, int height, + const Slider::SliderStyle, + Slider&) = 0; + virtual void drawLinearSliderThumb (Graphics&, int x, int y, int width, int height, float sliderPos,