void TracktionMarketplaceUnlockForm::showBubbleMessage (const String& text, Component& target)
{
    bubble = new BubbleMessageComponent (500);
    addChildComponent (bubble);

    AttributedString attString;
    attString.append (text, Font (15.0f));

    bubble->showAt (getLocalArea (&target, target.getLocalBounds()),
                    attString, 500,  // numMillisecondsBeforeRemoving
                    true,  // removeWhenMouseClicked
                    false); // deleteSelfAfterUse
}
const Rectangle<int> CodeEditorComponent::getCaretRectangle()
{
    return getLocalArea (caret, caret->getLocalBounds());
}
 void childBoundsChanged (Component* child)
 {
     auto childArea = getLocalArea (child, child->getLocalBounds());
     setSize (childArea.getWidth(), childArea.getHeight());
 }
 void paint (Graphics& g)
 {
     if (Component* c = target)
         shadow.drawForRectangle (g, getLocalArea (c, c->getLocalBounds()));
 }
 void childBoundsChanged (Component* child)
 {
     const Rectangle<int> childArea (getLocalArea (child, child->getLocalBounds()));
     setSize (childArea.getWidth(), childArea.getHeight());
 }