More Ildaeil and ImGui work, only setup GL on context calls
Signed-off-by: falkTX <falktx@falktx.com>
This commit is contained in:
parent
d2b1cf420e
commit
a6a4745186
3 changed files with 72 additions and 32 deletions
|
@ -66,6 +66,9 @@ static const char* host_ui_open_file(NativeHostHandle handle, bool isDir, const
|
||||||
static const char* host_ui_save_file(NativeHostHandle handle, bool isDir, const char* title, const char* filter);
|
static const char* host_ui_save_file(NativeHostHandle handle, bool isDir, const char* title, const char* filter);
|
||||||
static intptr_t host_dispatcher(NativeHostHandle handle, NativeHostDispatcherOpcode opcode, int32_t index, intptr_t value, void* ptr, float opt);
|
static intptr_t host_dispatcher(NativeHostHandle handle, NativeHostDispatcherOpcode opcode, int32_t index, intptr_t value, void* ptr, float opt);
|
||||||
|
|
||||||
|
static void ildaeilParameterChangeForUI(void* ui, uint32_t index, float value);
|
||||||
|
static const char* ildaeilOpenFileForUI(void* ui, bool isDir, const char* title, const char* filter);
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
struct IldaeilModule : Module {
|
struct IldaeilModule : Module {
|
||||||
|
@ -95,6 +98,8 @@ struct IldaeilModule : Module {
|
||||||
mutable NativeTimeInfo fCarlaTimeInfo;
|
mutable NativeTimeInfo fCarlaTimeInfo;
|
||||||
// mutable water::MemoryOutputStream fLastProjectState;
|
// mutable water::MemoryOutputStream fLastProjectState;
|
||||||
|
|
||||||
|
void* fUI = nullptr;
|
||||||
|
|
||||||
float audioDataIn1[BUFFER_SIZE];
|
float audioDataIn1[BUFFER_SIZE];
|
||||||
float audioDataIn2[BUFFER_SIZE];
|
float audioDataIn2[BUFFER_SIZE];
|
||||||
float audioDataOut1[BUFFER_SIZE];
|
float audioDataOut1[BUFFER_SIZE];
|
||||||
|
@ -279,7 +284,7 @@ static bool host_write_midi_event(const NativeHostHandle handle, const NativeMid
|
||||||
|
|
||||||
static void host_ui_parameter_changed(const NativeHostHandle handle, const uint32_t index, const float value)
|
static void host_ui_parameter_changed(const NativeHostHandle handle, const uint32_t index, const float value)
|
||||||
{
|
{
|
||||||
// ildaeilParameterChangeForUI(static_cast<IldaeilModule*>(handle)->fUI, index, value);
|
ildaeilParameterChangeForUI(static_cast<IldaeilModule*>(handle)->fUI, index, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void host_ui_midi_program_changed(NativeHostHandle handle, uint8_t channel, uint32_t bank, uint32_t program)
|
static void host_ui_midi_program_changed(NativeHostHandle handle, uint8_t channel, uint32_t bank, uint32_t program)
|
||||||
|
@ -299,8 +304,7 @@ static void host_ui_closed(NativeHostHandle handle)
|
||||||
|
|
||||||
static const char* host_ui_open_file(const NativeHostHandle handle, const bool isDir, const char* const title, const char* const filter)
|
static const char* host_ui_open_file(const NativeHostHandle handle, const bool isDir, const char* const title, const char* const filter)
|
||||||
{
|
{
|
||||||
// return ildaeilOpenFileForUI(static_cast<IldaeilModule*>(handle)->fUI, isDir, title, filter);
|
return ildaeilOpenFileForUI(static_cast<IldaeilModule*>(handle)->fUI, isDir, title, filter);
|
||||||
return nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char* host_ui_save_file(NativeHostHandle, bool, const char*, const char*)
|
static const char* host_ui_save_file(NativeHostHandle, bool, const char*, const char*)
|
||||||
|
@ -316,7 +320,7 @@ static intptr_t host_dispatcher(const NativeHostHandle handle, const NativeHostD
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
struct IldaeilWidget : ImGuiWidget, public Thread {
|
struct IldaeilWidget : ImGuiWidget, Thread {
|
||||||
static constexpr const uint kButtonHeight = 20;
|
static constexpr const uint kButtonHeight = 20;
|
||||||
|
|
||||||
struct PluginInfoCache {
|
struct PluginInfoCache {
|
||||||
|
@ -432,15 +436,15 @@ struct IldaeilWidget : ImGuiWidget, public Thread {
|
||||||
fDrawingState = kDrawingPluginPendingFromInit;
|
fDrawingState = kDrawingPluginPendingFromInit;
|
||||||
fPluginHasCustomUI = hints & PLUGIN_HAS_CUSTOM_UI;
|
fPluginHasCustomUI = hints & PLUGIN_HAS_CUSTOM_UI;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
module->fUI = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
~IldaeilWidget() override
|
~IldaeilWidget() override
|
||||||
{
|
{
|
||||||
if (module != nullptr && module->fCarlaHostHandle != nullptr)
|
if (module != nullptr && module->fCarlaHostHandle != nullptr)
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
module->fUI = nullptr;
|
module->fUI = nullptr;
|
||||||
*/
|
|
||||||
carla_set_engine_option(module->fCarlaHostHandle, ENGINE_OPTION_FRONTEND_WIN_ID, 0, "0");
|
carla_set_engine_option(module->fCarlaHostHandle, ENGINE_OPTION_FRONTEND_WIN_ID, 0, "0");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -473,15 +477,15 @@ struct IldaeilWidget : ImGuiWidget, public Thread {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
const char* openFileFromDSP(const bool isDir, const char* const title, const char* const filter)
|
const char* openFileFromDSP(const bool isDir, const char* const title, const char* const filter)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
Window::FileBrowserOptions opts;
|
Window::FileBrowserOptions opts;
|
||||||
opts.title = title;
|
opts.title = title;
|
||||||
getWindow().openFileBrowser(opts);
|
getWindow().openFileBrowser(opts);
|
||||||
|
*/
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
void showPluginUI(const CarlaHostHandle handle)
|
void showPluginUI(const CarlaHostHandle handle)
|
||||||
{
|
{
|
||||||
|
@ -618,8 +622,10 @@ struct IldaeilWidget : ImGuiWidget, public Thread {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void onContextCreate(const ContextCreateEvent&) override
|
void onContextCreate(const ContextCreateEvent& e) override
|
||||||
{
|
{
|
||||||
|
ImGuiWidget::onContextCreate(e);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
if (module == nullptr || module->fCarlaHostHandle == nullptr)
|
if (module == nullptr || module->fCarlaHostHandle == nullptr)
|
||||||
return;
|
return;
|
||||||
|
@ -632,9 +638,11 @@ struct IldaeilWidget : ImGuiWidget, public Thread {
|
||||||
carla_set_engine_option(module->fCarlaHostHandle, ENGINE_OPTION_FRONTEND_WIN_ID, 0, winIdStr);
|
carla_set_engine_option(module->fCarlaHostHandle, ENGINE_OPTION_FRONTEND_WIN_ID, 0, winIdStr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void onContextDestroy(const ContextDestroyEvent&) override
|
void onContextDestroy(const ContextDestroyEvent& e) override
|
||||||
{
|
{
|
||||||
carla_set_engine_option(module->fCarlaHostHandle, ENGINE_OPTION_FRONTEND_WIN_ID, 0, "0");
|
carla_set_engine_option(module->fCarlaHostHandle, ENGINE_OPTION_FRONTEND_WIN_ID, 0, "0");
|
||||||
|
|
||||||
|
ImGuiWidget::onContextDestroy(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
void step() override
|
void step() override
|
||||||
|
@ -1090,6 +1098,22 @@ struct IldaeilWidget : ImGuiWidget, public Thread {
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
static void ildaeilParameterChangeForUI(void* const ui, const uint32_t index, const float value)
|
||||||
|
{
|
||||||
|
DISTRHO_SAFE_ASSERT_RETURN(ui != nullptr,);
|
||||||
|
|
||||||
|
static_cast<IldaeilWidget*>(ui)->changeParameterFromDSP(index, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char* ildaeilOpenFileForUI(void* const ui, const bool isDir, const char* const title, const char* const filter)
|
||||||
|
{
|
||||||
|
DISTRHO_SAFE_ASSERT_RETURN(ui != nullptr, nullptr);
|
||||||
|
|
||||||
|
return static_cast<IldaeilWidget*>(ui)->openFileFromDSP(isDir, title, filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
struct IldaeilModuleWidget : ModuleWidget {
|
struct IldaeilModuleWidget : ModuleWidget {
|
||||||
IldaeilWidget* ildaeilWidget = nullptr;
|
IldaeilWidget* ildaeilWidget = nullptr;
|
||||||
|
|
||||||
|
@ -1098,7 +1122,8 @@ struct IldaeilModuleWidget : ModuleWidget {
|
||||||
setModule(module);
|
setModule(module);
|
||||||
setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/glBars.svg")));
|
setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/glBars.svg")));
|
||||||
|
|
||||||
ildaeilWidget = new IldaeilWidget(module, reinterpret_cast<CardinalPluginContext*>(APP)->nativeWindowId);
|
ildaeilWidget = new IldaeilWidget(static_cast<IldaeilModule*>(module),
|
||||||
|
reinterpret_cast<CardinalPluginContext*>(APP)->nativeWindowId);
|
||||||
ildaeilWidget->box.pos = Vec(2 * RACK_GRID_WIDTH, 0);
|
ildaeilWidget->box.pos = Vec(2 * RACK_GRID_WIDTH, 0);
|
||||||
ildaeilWidget->box.size = Vec(box.size.x - 2 * RACK_GRID_WIDTH, box.size.y);
|
ildaeilWidget->box.size = Vec(box.size.x - 2 * RACK_GRID_WIDTH, box.size.y);
|
||||||
addChild(ildaeilWidget);
|
addChild(ildaeilWidget);
|
||||||
|
|
|
@ -30,7 +30,6 @@ struct ImGuiWidget::PrivateData {
|
||||||
{
|
{
|
||||||
IMGUI_CHECKVERSION();
|
IMGUI_CHECKVERSION();
|
||||||
context = ImGui::CreateContext();
|
context = ImGui::CreateContext();
|
||||||
ImGui::SetCurrentContext(context);
|
|
||||||
|
|
||||||
ImGuiIO& io(ImGui::GetIO());
|
ImGuiIO& io(ImGui::GetIO());
|
||||||
io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;
|
io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;
|
||||||
|
@ -74,28 +73,38 @@ struct ImGuiWidget::PrivateData {
|
||||||
io.KeyMap[ImGuiKey_X] = GLFW_KEY_X;
|
io.KeyMap[ImGuiKey_X] = GLFW_KEY_X;
|
||||||
io.KeyMap[ImGuiKey_Y] = GLFW_KEY_Y;
|
io.KeyMap[ImGuiKey_Y] = GLFW_KEY_Y;
|
||||||
io.KeyMap[ImGuiKey_Z] = GLFW_KEY_Z;
|
io.KeyMap[ImGuiKey_Z] = GLFW_KEY_Z;
|
||||||
|
|
||||||
ImGui_ImplOpenGL2_Init();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
~PrivateData()
|
~PrivateData()
|
||||||
{
|
{
|
||||||
ImGui::SetCurrentContext(context);
|
|
||||||
ImGui_ImplOpenGL2_Shutdown();
|
|
||||||
ImGui::DestroyContext(context);
|
ImGui::DestroyContext(context);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
ImGuiWidget::ImGuiWidget()
|
ImGuiWidget::ImGuiWidget()
|
||||||
: imData(new PrivateData())
|
: imData(new PrivateData()) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
ImGuiWidget::~ImGuiWidget()
|
ImGuiWidget::~ImGuiWidget()
|
||||||
{
|
{
|
||||||
delete imData;
|
delete imData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ImGuiWidget::onContextCreate(const ContextCreateEvent& e)
|
||||||
|
{
|
||||||
|
OpenGlWidget::onContextCreate(e);
|
||||||
|
|
||||||
|
ImGui::SetCurrentContext(imData->context);
|
||||||
|
ImGui_ImplOpenGL2_Init();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ImGuiWidget::onContextDestroy(const ContextDestroyEvent& e)
|
||||||
|
{
|
||||||
|
ImGui::SetCurrentContext(imData->context);
|
||||||
|
ImGui_ImplOpenGL2_Shutdown();
|
||||||
|
|
||||||
|
OpenGlWidget::onContextDestroy(e);
|
||||||
|
}
|
||||||
|
|
||||||
void ImGuiWidget::drawFramebuffer()
|
void ImGuiWidget::drawFramebuffer()
|
||||||
{
|
{
|
||||||
const math::Vec fbSize = getFramebufferSize();
|
const math::Vec fbSize = getFramebufferSize();
|
||||||
|
@ -195,17 +204,13 @@ void ImGuiWidget::onButton(const ButtonEvent& e)
|
||||||
|
|
||||||
void ImGuiWidget::onSelectKey(const SelectKeyEvent& e)
|
void ImGuiWidget::onSelectKey(const SelectKeyEvent& e)
|
||||||
{
|
{
|
||||||
|
if (e.key < 0 || e.key >= IM_ARRAYSIZE(ImGuiIO::KeysDown))
|
||||||
|
return;
|
||||||
|
|
||||||
ImGui::SetCurrentContext(imData->context);
|
ImGui::SetCurrentContext(imData->context);
|
||||||
|
|
||||||
ImGuiIO& io(ImGui::GetIO());
|
ImGuiIO& io(ImGui::GetIO());
|
||||||
|
|
||||||
io.KeyCtrl = e.mods & GLFW_MOD_CTRL;
|
|
||||||
io.KeyShift = e.mods & GLFW_MOD_SHIFT;
|
|
||||||
io.KeyAlt = e.mods & GLFW_MOD_ALT;
|
|
||||||
io.KeySuper = e.mods & GLFW_MOD_SUPER;
|
|
||||||
|
|
||||||
if (e.key >= 0 && e.key < IM_ARRAYSIZE(io.KeysDown))
|
|
||||||
{
|
|
||||||
switch (e.action)
|
switch (e.action)
|
||||||
{
|
{
|
||||||
case GLFW_PRESS:
|
case GLFW_PRESS:
|
||||||
|
@ -214,8 +219,14 @@ void ImGuiWidget::onSelectKey(const SelectKeyEvent& e)
|
||||||
case GLFW_RELEASE:
|
case GLFW_RELEASE:
|
||||||
io.KeysDown[e.key] = false;
|
io.KeysDown[e.key] = false;
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
io.KeyCtrl = e.mods & GLFW_MOD_CTRL;
|
||||||
|
io.KeyShift = e.mods & GLFW_MOD_SHIFT;
|
||||||
|
io.KeyAlt = e.mods & GLFW_MOD_ALT;
|
||||||
|
io.KeySuper = e.mods & GLFW_MOD_SUPER;
|
||||||
|
|
||||||
if (io.WantCaptureKeyboard)
|
if (io.WantCaptureKeyboard)
|
||||||
e.consume(this);
|
e.consume(this);
|
||||||
|
|
|
@ -34,6 +34,10 @@ struct ImGuiWidget : OpenGlWidget {
|
||||||
ImGui::ShowDemoWindow();
|
ImGui::ShowDemoWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void onContextCreate(const ContextCreateEvent& e) override;
|
||||||
|
void onContextDestroy(const ContextDestroyEvent& e) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void drawFramebuffer() override;
|
void drawFramebuffer() override;
|
||||||
void onHover(const HoverEvent& e) override;
|
void onHover(const HoverEvent& e) override;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue