diff --git a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp index b34c319ffd..0fbd6ac5ba 100644 --- a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp +++ b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp @@ -206,6 +206,8 @@ LookAndFeel_V2::LookAndFeel_V2() for (int i = 0; i < numElementsInArray (standardColours); i += 2) setColour ((int) standardColours [i], Colour ((uint32) standardColours [i + 1])); + + bubbleShadow.setShadowProperties (DropShadow (Colours::black.withAlpha (0.35f), 5, {})); } LookAndFeel_V2::~LookAndFeel_V2() {} @@ -839,6 +841,10 @@ void LookAndFeel_V2::drawBubble (Graphics& g, BubbleComponent& comp, g.strokePath (p, PathStrokeType (1.0f)); } +void LookAndFeel_V2::setComponentEffectForBubbleComponent (BubbleComponent& bubbleComponent) +{ + bubbleComponent.setComponentEffect (&bubbleShadow); +} //============================================================================== Font LookAndFeel_V2::getPopupMenuFont() diff --git a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h index 073eb7207b..a4a3d1a724 100644 --- a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h +++ b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h @@ -150,6 +150,7 @@ public: //============================================================================== void drawBubble (Graphics&, BubbleComponent&, const Point& tip, const Rectangle& body) override; + void setComponentEffectForBubbleComponent (BubbleComponent& bubbleComponent) override; void drawLasso (Graphics&, Component&) override; @@ -412,6 +413,7 @@ public: private: //============================================================================== std::unique_ptr folderImage, documentImage; + DropShadowEffect bubbleShadow; void drawShinyButtonShape (Graphics&, float x, float y, float w, float h, float maxCornerSize, diff --git a/modules/juce_gui_basics/misc/juce_BubbleComponent.cpp b/modules/juce_gui_basics/misc/juce_BubbleComponent.cpp index 009657d66f..c69af318a4 100644 --- a/modules/juce_gui_basics/misc/juce_BubbleComponent.cpp +++ b/modules/juce_gui_basics/misc/juce_BubbleComponent.cpp @@ -30,14 +30,17 @@ BubbleComponent::BubbleComponent() : allowablePlacements (above | below | left | right) { setInterceptsMouseClicks (false, false); - - shadow.setShadowProperties (DropShadow (Colours::black.withAlpha (0.35f), 5, Point())); - setComponentEffect (&shadow); + lookAndFeelChanged(); } BubbleComponent::~BubbleComponent() {} //============================================================================== +void BubbleComponent::lookAndFeelChanged() +{ + getLookAndFeel().setComponentEffectForBubbleComponent (*this); +} + void BubbleComponent::paint (Graphics& g) { getLookAndFeel().drawBubble (g, *this, arrowTip.toFloat(), content.toFloat()); diff --git a/modules/juce_gui_basics/misc/juce_BubbleComponent.h b/modules/juce_gui_basics/misc/juce_BubbleComponent.h index 43700942f5..68646ca0e8 100644 --- a/modules/juce_gui_basics/misc/juce_BubbleComponent.h +++ b/modules/juce_gui_basics/misc/juce_BubbleComponent.h @@ -151,14 +151,33 @@ public: { virtual ~LookAndFeelMethods() = default; - virtual void drawBubble (Graphics&, BubbleComponent&, + /** Override this method to draw a speech-bubble pointing at a specific location on + the screen. + */ + virtual void drawBubble (Graphics& g, + BubbleComponent& bubbleComponent, const Point& positionOfTip, const Rectangle& body) = 0; + + /** Override this method to set effects, such as a drop-shadow, on a + BubbleComponent. + + This will be called whenever a BubbleComponent is constructed or its + look-and-feel changes. + + If you need to trigger this callback to update an effect, call + sendLookAndFeelChange() on the component. + + @see Component::setComponentEffect, Component::sendLookAndFeelChange + */ + virtual void setComponentEffectForBubbleComponent (BubbleComponent& bubbleComponent) = 0; }; //============================================================================== /** @internal */ void paint (Graphics&) override; + /** @internal */ + void lookAndFeelChanged() override; protected: //============================================================================== @@ -178,7 +197,6 @@ private: Rectangle content; Point arrowTip; int allowablePlacements; - DropShadowEffect shadow; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (BubbleComponent) };