From 9dfaca403563ff4d0aff6fbba2a221d0606568e9 Mon Sep 17 00:00:00 2001 From: hogliux Date: Tue, 8 May 2018 11:53:51 +0100 Subject: [PATCH] Ensured that bubble messages are also transformed in the ComponentTransforms demo --- examples/GUI/ComponentTransformsDemo.h | 2 +- examples/GUI/WidgetsDemo.h | 84 +++++++++++++++----------- 2 files changed, 51 insertions(+), 35 deletions(-) diff --git a/examples/GUI/ComponentTransformsDemo.h b/examples/GUI/ComponentTransformsDemo.h index 5b7d5b6979..f038de79ea 100644 --- a/examples/GUI/ComponentTransformsDemo.h +++ b/examples/GUI/ComponentTransformsDemo.h @@ -53,7 +53,7 @@ class ComponentTransformsDemo : public Component public: ComponentTransformsDemo() { - content.reset (new WidgetsDemo()); + content.reset (new WidgetsDemo (true)); addAndMakeVisible (content.get()); content->setSize (750, 500); diff --git a/examples/GUI/WidgetsDemo.h b/examples/GUI/WidgetsDemo.h index 29a10be0a3..70461e8ad8 100644 --- a/examples/GUI/WidgetsDemo.h +++ b/examples/GUI/WidgetsDemo.h @@ -50,26 +50,8 @@ //============================================================================== static void showBubbleMessage (Component& targetComponent, const String& textToShow, - std::unique_ptr& bmc) -{ - bmc.reset (new BubbleMessageComponent()); - - if (Desktop::canUseSemiTransparentWindows()) - { - bmc->setAlwaysOnTop (true); - bmc->addToDesktop (0); - } - else - { - targetComponent.getTopLevelComponent()->addChildComponent (bmc.get()); - } - - AttributedString text (textToShow); - text.setJustification (Justification::centred); - text.setColour (targetComponent.findColour (TextButton::textColourOffId)); - - bmc->showAt (&targetComponent, text, 2000, true, false); -} + std::unique_ptr& bmc, + bool isRunningComponentTransformDemo); //============================================================================== /** To demonstrate how sliders can have custom snapping applied to their values, @@ -272,7 +254,7 @@ private: //============================================================================== struct ButtonsPage : public Component { - ButtonsPage() + ButtonsPage (bool isRunningComponentTransformDemo) { { auto* group = addToList (new GroupComponent ("group", "Radio buttons")); @@ -374,14 +356,15 @@ struct ButtonsPage : public Component down.setImage (getImageFromAssets ("juce_icon.png")); down.setOverlayColour (Colours::black.withAlpha (0.3f)); - auto popupMessageCallback = [this] + auto popupMessageCallback = [this, isRunningComponentTransformDemo] { if (auto* focused = Component::getCurrentlyFocusedComponent()) showBubbleMessage (*focused, "This is a demo of the BubbleMessageComponent, which lets you pop up a message pointing " "at a component or somewhere on the screen.\n\n" "The message bubbles will disappear after a timeout period, or when the mouse is clicked.", - this->bubbleMessage); + this->bubbleMessage, + isRunningComponentTransformDemo); }; { @@ -1277,19 +1260,20 @@ private: //============================================================================== struct DemoTabbedComponent : public TabbedComponent { - DemoTabbedComponent() + DemoTabbedComponent (bool isRunningComponenTransformsDemo) : TabbedComponent (TabbedButtonBar::TabsAtTop) { auto colour = findColour (ResizableWindow::backgroundColourId); - addTab ("Buttons", colour, new ButtonsPage(), true); - addTab ("Sliders", colour, new SlidersPage(), true); - addTab ("Toolbars", colour, new ToolbarDemoComp(), true); - addTab ("Misc", colour, new MiscPage(), true); - addTab ("Tables", colour, new TableDemoComponent(), true); - addTab ("Drag & Drop", colour, new DragAndDropDemo(), true); + addTab ("Buttons", colour, new ButtonsPage (isRunningComponenTransformsDemo), true); + addTab ("Sliders", colour, new SlidersPage(), true); + addTab ("Toolbars", colour, new ToolbarDemoComp(), true); + addTab ("Misc", colour, new MiscPage(), true); + addTab ("Tables", colour, new TableDemoComponent(), true); + addTab ("Drag & Drop", colour, new DragAndDropDemo(), true); - getTabbedButtonBar().getTabButton (5)->setExtraComponent (new CustomTabButton(), TabBarButton::afterText); + getTabbedButtonBar().getTabButton (5)->setExtraComponent (new CustomTabButton (isRunningComponenTransformsDemo), + TabBarButton::afterText); } // This is a small star button that is put inside one of the tabs. You can @@ -1297,7 +1281,8 @@ struct DemoTabbedComponent : public TabbedComponent class CustomTabButton : public Component { public: - CustomTabButton() + CustomTabButton (bool isRunningComponenTransformsDemo) + : runningComponenTransformsDemo (isRunningComponenTransformsDemo) { setSize (20, 20); } @@ -1318,9 +1303,11 @@ struct DemoTabbedComponent : public TabbedComponent "\n" "You can use these to implement things like close-buttons " "or status displays for your tabs.", - bubbleMessage); + bubbleMessage, + runningComponenTransformsDemo); } private: + bool runningComponenTransformsDemo; std::unique_ptr bubbleMessage; }; @@ -1330,7 +1317,8 @@ struct DemoTabbedComponent : public TabbedComponent //============================================================================== struct WidgetsDemo : public Component { - WidgetsDemo() + WidgetsDemo (bool isRunningComponenTransformsDemo = false) + : tabs (isRunningComponenTransformsDemo) { setOpaque (true); addAndMakeVisible (tabs); @@ -1352,3 +1340,31 @@ struct WidgetsDemo : public Component JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (WidgetsDemo) }; + +//============================================================================== +void showBubbleMessage (Component& targetComponent, const String& textToShow, + std::unique_ptr& bmc, + bool isRunningComponentTransformDemo) +{ + bmc.reset (new BubbleMessageComponent()); + + if (isRunningComponentTransformDemo) + { + targetComponent.findParentComponentOfClass()->addChildComponent (bmc.get()); + } + else if (Desktop::canUseSemiTransparentWindows()) + { + bmc->setAlwaysOnTop (true); + bmc->addToDesktop (0); + } + else + { + targetComponent.getTopLevelComponent()->addChildComponent (bmc.get()); + } + + AttributedString text (textToShow); + text.setJustification (Justification::centred); + text.setColour (targetComponent.findColour (TextButton::textColourOffId)); + + bmc->showAt (&targetComponent, text, 2000, true, false); +}