Browse Source

Fix linux resize, add repicker button

Signed-off-by: falkTX <falktx@falktx.com>
tags/v1.0
falkTX 3 years ago
parent
commit
03cbbc126e
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
3 changed files with 61 additions and 11 deletions
  1. +1
    -1
      dpf
  2. +59
    -10
      plugins/Common/IldaeilUI.cpp
  3. +1
    -0
      plugins/Common/SizeUtils.cpp

+ 1
- 1
dpf

@@ -1 +1 @@
Subproject commit 1c19c75b8f2b4a83741c4c92e486c1fde873050e
Subproject commit 87986a6f343a937dea4f3db3a591beacea8251e2

+ 59
- 10
plugins/Common/IldaeilUI.cpp View File

@@ -54,6 +54,10 @@ using namespace CarlaBackend;


class IldaeilUI : public UI, public Thread class IldaeilUI : public UI, public Thread
{ {
static constexpr const uint kInitialWidth = 1280;
static constexpr const uint kInitialHeight = 720;
static constexpr const uint kBottomHeight = 35;

enum { enum {
kDrawingInit, kDrawingInit,
kDrawingError, kDrawingError,
@@ -77,7 +81,7 @@ class IldaeilUI : public UI, public Thread


public: public:
IldaeilUI() IldaeilUI()
: UI(1280, 720),
: UI(kInitialWidth, kInitialHeight),
Thread("IldaeilScanner"), Thread("IldaeilScanner"),
fDrawingState(kDrawingInit), fDrawingState(kDrawingInit),
fPlugin((IldaeilPlugin*)getPluginInstancePointer()), fPlugin((IldaeilPlugin*)getPluginInstancePointer()),
@@ -133,9 +137,16 @@ public:


carla_embed_custom_ui(handle, 0, (void*)fOurWindowId); carla_embed_custom_ui(handle, 0, (void*)fOurWindowId);


// tryResizingToChildWindowContent();
tryResizingToChildWindowContent();
fDrawingState = kDrawingPluginCustomUI; fDrawingState = kDrawingPluginCustomUI;
} }
else
{
// TODO query parameter information and store it
fDrawingState = kDrawingPluginGenericUI;
}

repaint();
} }


protected: protected:
@@ -168,7 +179,7 @@ protected:
{ {
fPlugins = new CarlaCachedPluginInfo[fPluginCount]; fPlugins = new CarlaCachedPluginInfo[fPluginCount];


for (uint i=0; i < fPluginCount && !shouldThreadExit(); ++i)
for (uint i=0; i < fPluginCount && ! shouldThreadExit(); ++i)
{ {
std::memcpy(&fPlugins[i], carla_get_cached_plugin_info(PLUGIN_LV2, i), sizeof(CarlaCachedPluginInfo)); std::memcpy(&fPlugins[i], carla_get_cached_plugin_info(PLUGIN_LV2, i), sizeof(CarlaCachedPluginInfo));
// TODO fix leaks // TODO fix leaks
@@ -177,7 +188,7 @@ protected:
} }
} }


if (!shouldThreadExit())
if (! shouldThreadExit())
fDrawingState = kDrawingPluginList; fDrawingState = kDrawingPluginList;
} }


@@ -186,18 +197,45 @@ protected:
switch (fDrawingState) switch (fDrawingState)
{ {
case kDrawingPluginList: case kDrawingPluginList:
drawPluginList();
break; break;
case kDrawingError: case kDrawingError:
// TODO display error message // TODO display error message
return;
break;
case kDrawingLoading: case kDrawingLoading:
// TODO display loading message // TODO display loading message
return;
default:
return;
break;
case kDrawingPluginCustomUI:
case kDrawingPluginGenericUI:
drawBottomBar();
break;
}
}

void drawBottomBar()
{
const CarlaHostHandle handle = fPlugin->fCarlaHostHandle;

ImGui::SetNextWindowPos(ImVec2(0, getHeight() - kBottomHeight * getScaleFactor()));
ImGui::SetNextWindowSize(ImVec2(getWidth(), kBottomHeight * getScaleFactor()));

if (ImGui::Begin("Current Plugin", nullptr, ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoResize))
{
if (ImGui::Button("Pick Another..."))
{
if (fDrawingState == kDrawingPluginCustomUI)
carla_show_custom_ui(fPlugin->fCarlaHostHandle, 0, false);

fDrawingState = kDrawingPluginList;
setSize(kInitialWidth, kInitialHeight);
}
} }
}


void drawPluginList()
{
const CarlaHostHandle handle = fPlugin->fCarlaHostHandle; const CarlaHostHandle handle = fPlugin->fCarlaHostHandle;
const bool pluginIsRunning = carla_get_current_plugin_count(handle) != 0;


float width = getWidth(); float width = getWidth();
float height = getHeight(); float height = getHeight();
@@ -213,6 +251,9 @@ protected:


if (ImGui::Button("Load Plugin")) if (ImGui::Button("Load Plugin"))
{ {
if (pluginIsRunning)
carla_replace_plugin(handle, 0);

do { do {
const CarlaCachedPluginInfo& info(fPlugins[fPluginSelected]); const CarlaCachedPluginInfo& info(fPlugins[fPluginSelected]);


@@ -225,16 +266,23 @@ protected:
slash+1, 0, 0x0, PLUGIN_OPTIONS_NULL)) slash+1, 0, 0x0, PLUGIN_OPTIONS_NULL))
{ {
showPluginUI(handle); showPluginUI(handle);
repaint();


/*
delete[] fPlugins; delete[] fPlugins;
fPlugins = nullptr; fPlugins = nullptr;
fPluginCount = 0; fPluginCount = 0;
*/
} }


} while (false); } while (false);
} }


if (pluginIsRunning && ImGui::Button("Cancel"))
{
showPluginUI(handle);
return;
}

if (ImGui::BeginChild("pluginlistwindow")) if (ImGui::BeginChild("pluginlistwindow"))
{ {
if (ImGui::BeginTable("pluginlist", 3, ImGuiTableFlags_NoSavedSettings|ImGuiTableFlags_NoClip)) if (ImGui::BeginTable("pluginlist", 3, ImGuiTableFlags_NoSavedSettings|ImGuiTableFlags_NoClip))
@@ -296,11 +344,12 @@ protected:
private: private:
void tryResizingToChildWindowContent() void tryResizingToChildWindowContent()
{ {
const Size<uint> size(getChildWindowSize(fOurWindowId));
Size<uint> size(getChildWindowSize(fOurWindowId));


if (size.isValid()) if (size.isValid())
{ {
fInitialSizeHasBeenSet = true; fInitialSizeHasBeenSet = true;
size.setHeight(size.getHeight() + kBottomHeight * getScaleFactor());
setSize(size); setSize(size);
} }
} }


+ 1
- 0
plugins/Common/SizeUtils.cpp View File

@@ -101,6 +101,7 @@ Size<uint> getChildWindowSize(const uintptr_t winId)
// XMoveWindow(display, (::Window)winId, 0, 40); // XMoveWindow(display, (::Window)winId, 0, 40);
// XResizeWindow(display, (::Window)winId, width, height); // XResizeWindow(display, (::Window)winId, width, height);
// XMoveWindow(display, childWindow, 0, 40); // XMoveWindow(display, childWindow, 0, 40);
// XMoveResizeWindow(display, childWindow, 0, 40, width, height);
return Size<uint>(static_cast<uint>(width), static_cast<uint>(height)); return Size<uint>(static_cast<uint>(width), static_cast<uint>(height));
} }
} }


Loading…
Cancel
Save