/* ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ JUCE can be redistributed and/or modified under the terms of the GNU General Public License (Version 2), as published by the Free Software Foundation. A copy of the license is included in the JUCE distribution, or can be found online at www.gnu.org/licenses. JUCE is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ------------------------------------------------------------------------------ To release a closed-source product which uses JUCE, commercial licenses are available: visit www.rawmaterialsoftware.com/juce for more information. ============================================================================== */ BubbleMessageComponent::BubbleMessageComponent (int fadeOutLengthMs) : fadeOutLength (fadeOutLengthMs), deleteAfterUse (false) { } BubbleMessageComponent::~BubbleMessageComponent() { Desktop::getInstance().getAnimator().fadeOut (this, fadeOutLength); } void BubbleMessageComponent::showAt (int x, int y, const AttributedString& text, const int numMillisecondsBeforeRemoving, const bool removeWhenMouseClicked, const bool deleteSelfAfterUse) { createLayout (text); setPosition (x, y); init (numMillisecondsBeforeRemoving, removeWhenMouseClicked, deleteSelfAfterUse); } void BubbleMessageComponent::showAt (Component* const component, const AttributedString& text, const int numMillisecondsBeforeRemoving, const bool removeWhenMouseClicked, const bool deleteSelfAfterUse) { createLayout (text); setPosition (component); init (numMillisecondsBeforeRemoving, removeWhenMouseClicked, deleteSelfAfterUse); } void BubbleMessageComponent::createLayout (const AttributedString& text) { textLayout.createLayoutWithBalancedLineLengths (text, 256); } void BubbleMessageComponent::init (const int numMillisecondsBeforeRemoving, const bool removeWhenMouseClicked, const bool deleteSelfAfterUse) { setVisible (true); deleteAfterUse = deleteSelfAfterUse; if (numMillisecondsBeforeRemoving > 0) expiryTime = Time::getMillisecondCounter() + numMillisecondsBeforeRemoving; else expiryTime = 0; startTimer (77); mouseClickCounter = Desktop::getInstance().getMouseButtonClickCounter(); if (! (removeWhenMouseClicked && isShowing())) mouseClickCounter += 0xfffff; repaint(); } void BubbleMessageComponent::getContentSize (int& w, int& h) { w = 20 + (int) textLayout.getWidth(); h = 20 + (int) textLayout.getHeight(); } void BubbleMessageComponent::paintContent (Graphics& g, int w, int h) { g.setColour (findColour (TooltipWindow::textColourId)); textLayout.draw (g, Rectangle (6.0f, 6.0f, w - 12.0f, h - 12.0f)); } void BubbleMessageComponent::timerCallback() { if (Desktop::getInstance().getMouseButtonClickCounter() > mouseClickCounter) { stopTimer(); setVisible (false); if (deleteAfterUse) delete this; } else if (expiryTime != 0 && Time::getMillisecondCounter() > expiryTime) { stopTimer(); if (deleteAfterUse) delete this; else Desktop::getInstance().getAnimator().fadeOut (this, fadeOutLength); } }