100 lines
3.6 KiB
C++
100 lines
3.6 KiB
C++
// This file is part of VSTGUI. It is subject to the license terms
|
|
// in the LICENSE file found in the top-level directory of this
|
|
// distribution and at http://github.com/steinbergmedia/vstgui/LICENSE
|
|
|
|
#pragma once
|
|
|
|
#include "ccontrol.h"
|
|
#include "icontrollistener.h"
|
|
#include "../optional.h"
|
|
|
|
namespace VSTGUI {
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// CSplashScreen Declaration
|
|
//!
|
|
/// @ingroup views
|
|
//-----------------------------------------------------------------------------
|
|
class CSplashScreen : public CControl, public IControlListener
|
|
{
|
|
public:
|
|
CSplashScreen (const CRect& size, IControlListener* listener, int32_t tag, CBitmap* background, const CRect& toDisplay, const CPoint& offset = CPoint (0, 0));
|
|
CSplashScreen (const CRect& size, IControlListener* listener, int32_t tag, CView* splashView);
|
|
CSplashScreen (const CSplashScreen& splashScreen);
|
|
|
|
void draw (CDrawContext*) override;
|
|
bool hitTest (const CPoint& where, const Event& event) override;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
/// @name CSplashScreen Methods
|
|
//-----------------------------------------------------------------------------
|
|
//@{
|
|
virtual void unSplash ();
|
|
|
|
/** set the area in which the splash will be displayed */
|
|
virtual void setDisplayArea (const CRect& rect) { toDisplay = rect; }
|
|
/** get the area in which the splash will be displayed */
|
|
virtual CRect& getDisplayArea (CRect& rect) const { rect = toDisplay; return rect; }
|
|
//@}
|
|
|
|
CMouseEventResult onMouseDown (CPoint& where, const CButtonState& buttons) override;
|
|
|
|
CLASS_METHODS(CSplashScreen, CControl)
|
|
protected:
|
|
~CSplashScreen () noexcept override;
|
|
using CControl::valueChanged;
|
|
void valueChanged (CControl *pControl) override;
|
|
|
|
CRect toDisplay;
|
|
CRect keepSize;
|
|
CPoint offset;
|
|
CView* modalView{nullptr};
|
|
Optional<ModalViewSessionID> modalViewSessionID;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// CAnimationSplashScreen Declaration
|
|
/// @brief a splash screen which animates the opening and closing of the splash bitmap
|
|
/// @ingroup views
|
|
/// @ingroup new_in_4_0
|
|
//-----------------------------------------------------------------------------
|
|
class CAnimationSplashScreen : public CSplashScreen
|
|
{
|
|
public:
|
|
CAnimationSplashScreen (const CRect& size, int32_t tag, CBitmap* background, CBitmap* splashBitmap);
|
|
CAnimationSplashScreen (const CAnimationSplashScreen& splashScreen) = default;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
/// @name CAnimationSplashScreen Methods
|
|
//-----------------------------------------------------------------------------
|
|
//@{
|
|
virtual void setSplashBitmap (CBitmap* bitmap);
|
|
CBitmap* getSplashBitmap () const;
|
|
|
|
virtual void setSplashRect (const CRect& splashRect);
|
|
const CRect& getSplashRect () const;
|
|
|
|
virtual void setAnimationIndex (uint32_t index) { animationIndex = index; }
|
|
uint32_t getAnimationIndex () const { return animationIndex; }
|
|
|
|
virtual void setAnimationTime (uint32_t time) { animationTime = time; }
|
|
uint32_t getAnimationTime () const { return animationTime; }
|
|
|
|
/** create the animation. subclasses can override this to add special animations */
|
|
virtual bool createAnimation (uint32_t animationIndex, uint32_t animationTime, CView* splashView, bool removeViewAnimation);
|
|
//@}
|
|
|
|
void unSplash () override;
|
|
void draw (CDrawContext*) override;
|
|
CMouseEventResult onMouseDown (CPoint& where, const CButtonState& buttons) override;
|
|
bool sizeToFit () override;
|
|
|
|
protected:
|
|
~CAnimationSplashScreen () noexcept override = default;
|
|
|
|
uint32_t animationIndex{0};
|
|
uint32_t animationTime{500};
|
|
};
|
|
|
|
} // VSTGUI
|