sfizz/lv2/vstgui_helpers.h
Jean Pierre Cimalando b92209de74 Support UI in LV2
2020-09-02 01:44:49 +02:00

68 lines
1.7 KiB
C++

// SPDX-License-Identifier: BSD-2-Clause
// This code is part of the sfizz library and is licensed under a BSD 2-clause
// license. You should have receive a LICENSE.md file along with the code.
// If not, contact the sfizz maintainers at https://github.com/sfztools/sfizz
// Note(jpc) same code as used in Surge LV2, I am the original author
#pragma once
#include <list>
#include <chrono>
#include "editor/utility/vstgui_before.h"
#include "vstgui/lib/vstguibase.h"
#if LINUX
#include "vstgui/lib/platform/platform_x11.h"
#include "vstgui/lib/platform/linux/x11platform.h"
#endif
#include "editor/utility/vstgui_after.h"
#if LINUX
class Lv2IdleRunLoop : public VSTGUI::X11::IRunLoop
{
public:
void execIdle();
bool registerEventHandler(int fd, VSTGUI::X11::IEventHandler* handler) override;
bool unregisterEventHandler(VSTGUI::X11::IEventHandler* handler) override;
bool registerTimer(uint64_t interval, VSTGUI::X11::ITimerHandler* handler) override;
bool unregisterTimer(VSTGUI::X11::ITimerHandler* handler) override;
void forget() override
{}
void remember() override
{}
private:
struct Event
{
int fd;
VSTGUI::X11::IEventHandler* handler;
bool alive;
};
struct Timer
{
std::chrono::microseconds interval;
std::chrono::microseconds counter;
bool lastTickValid;
std::chrono::steady_clock::time_point lastTick;
VSTGUI::X11::ITimerHandler* handler;
bool alive;
};
private:
template <class T> static void garbageCollectDeadHandlers(std::list<T>& handlers);
private:
std::list<Event> _events;
std::list<Timer> _timers;
};
#endif
#if LINUX
namespace VSTGUI
{
void initializeSoHandle();
}
#endif