114 lines
2.7 KiB
C++
114 lines
2.7 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
|
|
|
|
#include "cvstguitimer.h"
|
|
#include "platform/platformfactory.h"
|
|
|
|
#if DEBUG
|
|
#define DEBUGLOG 0
|
|
#endif
|
|
|
|
namespace VSTGUI {
|
|
|
|
//-----------------------------------------------------------------------------
|
|
IdStringPtr CVSTGUITimer::kMsgTimer = "timer fired";
|
|
|
|
//-----------------------------------------------------------------------------
|
|
CVSTGUITimer::CVSTGUITimer (CBaseObject* timerObject, uint32_t fireTime, bool doStart)
|
|
: fireTime (fireTime)
|
|
, platformTimer (nullptr)
|
|
{
|
|
callbackFunc = [timerObject](CVSTGUITimer* timer) {
|
|
timerObject->notify (timer, kMsgTimer);
|
|
};
|
|
if (doStart)
|
|
start ();
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
CVSTGUITimer::CVSTGUITimer (const CallbackFunc& callback, uint32_t fireTime, bool doStart)
|
|
: fireTime (fireTime)
|
|
, callbackFunc (callback)
|
|
, platformTimer (nullptr)
|
|
{
|
|
if (doStart)
|
|
start ();
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
CVSTGUITimer::CVSTGUITimer (CallbackFunc&& callback, uint32_t fireTime, bool doStart)
|
|
: fireTime (fireTime)
|
|
, callbackFunc (std::move (callback))
|
|
, platformTimer (nullptr)
|
|
{
|
|
if (doStart)
|
|
start ();
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
CVSTGUITimer::~CVSTGUITimer () noexcept = default;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
void CVSTGUITimer::beforeDelete ()
|
|
{
|
|
stop ();
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
bool CVSTGUITimer::start ()
|
|
{
|
|
if (platformTimer == nullptr)
|
|
{
|
|
platformTimer = getPlatformFactory ().createTimer (this);
|
|
if (platformTimer)
|
|
{
|
|
platformTimer->start (fireTime);
|
|
#if DEBUGLOG
|
|
DebugPrint ("Timer started (0x%x)\n", timerObject);
|
|
#endif
|
|
}
|
|
}
|
|
return (platformTimer != nullptr);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
bool CVSTGUITimer::stop ()
|
|
{
|
|
if (platformTimer)
|
|
{
|
|
platformTimer->stop ();
|
|
platformTimer = nullptr;
|
|
|
|
#if DEBUGLOG
|
|
DebugPrint ("Timer stopped (0x%x)\n", timerObject);
|
|
#endif
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
bool CVSTGUITimer::setFireTime (uint32_t newFireTime)
|
|
{
|
|
if (fireTime != newFireTime)
|
|
{
|
|
bool wasRunning = stop ();
|
|
fireTime = newFireTime;
|
|
if (wasRunning)
|
|
return start ();
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
void CVSTGUITimer::fire ()
|
|
{
|
|
CBaseObjectGuard guard (this);
|
|
if (callbackFunc)
|
|
callbackFunc (this);
|
|
}
|
|
|
|
} // VSTGUI
|