| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * Carla Plugin Host | |||
| * Copyright (C) 2011-2020 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2011-2021 Filipe Coelho <falktx@falktx.com> | |||
| * | |||
| * This program is free software; you can redistribute it and/or | |||
| * modify it under the terms of the GNU General Public License as | |||
| @@ -1368,6 +1368,7 @@ typedef enum { | |||
| */ | |||
| ENGINE_OPTION_AUDIO_DEVICE = 14, | |||
| #ifndef BUILD_BRIDGE | |||
| /*! | |||
| * Wherever to enable OSC support in the engine. | |||
| */ | |||
| @@ -1389,6 +1390,7 @@ typedef enum { | |||
| * @note Valid ports begin at 1024 and end at 32767 (inclusive) | |||
| */ | |||
| ENGINE_OPTION_OSC_PORT_UDP = 17, | |||
| #endif | |||
| /*! | |||
| * Set path used for a specific file type. | |||
| @@ -1475,17 +1477,24 @@ typedef enum { | |||
| ENGINE_OPTION_WINE_SERVER_RT_PRIO = 32, | |||
| #endif | |||
| #ifndef BUILD_BRIDGE | |||
| /*! | |||
| * Capture console output into debug callbacks. | |||
| */ | |||
| ENGINE_OPTION_DEBUG_CONSOLE_OUTPUT = 33, | |||
| #endif | |||
| /*! | |||
| * A prefix to give to all plugin clients created by Carla. | |||
| * Mostly useful for JACK multi-client mode. | |||
| * @note MUST include at least one "." (dot). | |||
| */ | |||
| ENGINE_OPTION_CLIENT_NAME_PREFIX = 34 | |||
| ENGINE_OPTION_CLIENT_NAME_PREFIX = 34, | |||
| /*! | |||
| * Treat loaded plugins as standalone (that is, there is no host UI to manage them) | |||
| */ | |||
| ENGINE_OPTION_PLUGINS_ARE_STANDALONE = 35 | |||
| } EngineOption; | |||
| @@ -242,6 +242,7 @@ struct CARLA_API EngineOptions { | |||
| bool preferPluginBridges; | |||
| bool preferUiBridges; | |||
| bool uisAlwaysOnTop; | |||
| bool pluginsAreStandalone; | |||
| uint bgColor; | |||
| uint fgColor; | |||
| float uiScale; | |||
| @@ -489,7 +489,6 @@ CARLA_EXPORT bool carla_set_engine_about_to_close(CarlaHostHandle handle); | |||
| */ | |||
| CARLA_EXPORT void carla_set_engine_callback(CarlaHostHandle handle, EngineCallbackFunc func, void* ptr); | |||
| #ifndef BUILD_BRIDGE | |||
| /*! | |||
| * Set an engine option. | |||
| * @param option Option | |||
| @@ -497,7 +496,6 @@ CARLA_EXPORT void carla_set_engine_callback(CarlaHostHandle handle, EngineCallba | |||
| * @param valueStr Value as string | |||
| */ | |||
| CARLA_EXPORT void carla_set_engine_option(CarlaHostHandle handle, EngineOption option, int value, const char* valueStr); | |||
| #endif | |||
| /*! | |||
| * Set the file callback function. | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * Carla Plugin Host | |||
| * Copyright (C) 2011-2020 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2011-2021 Filipe Coelho <falktx@falktx.com> | |||
| * | |||
| * This program is free software; you can redistribute it and/or | |||
| * modify it under the terms of the GNU General Public License as | |||
| @@ -57,8 +57,8 @@ struct CarlaHostStandalone : CarlaHostHandleImpl { | |||
| FileCallbackFunc fileCallback; | |||
| void* fileCallbackPtr; | |||
| #ifndef BUILD_BRIDGE | |||
| EngineOptions engineOptions; | |||
| #ifndef BUILD_BRIDGE | |||
| CarlaLogThread logThread; | |||
| bool logThreadEnabled; | |||
| #endif | |||
| @@ -71,8 +71,8 @@ struct CarlaHostStandalone : CarlaHostHandleImpl { | |||
| engineCallbackPtr(nullptr), | |||
| fileCallback(nullptr), | |||
| fileCallbackPtr(nullptr), | |||
| #ifndef BUILD_BRIDGE | |||
| engineOptions(), | |||
| #ifndef BUILD_BRIDGE | |||
| logThread(), | |||
| logThreadEnabled(false), | |||
| #endif | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * Carla Standalone | |||
| * Copyright (C) 2011-2020 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2011-2021 Filipe Coelho <falktx@falktx.com> | |||
| * | |||
| * This program is free software; you can redistribute it and/or | |||
| * modify it under the terms of the GNU General Public License as | |||
| @@ -388,6 +388,8 @@ static void carla_engine_init_common(const CarlaHostStandalone& standalone, Carl | |||
| # endif | |||
| engine->setOption(CB::ENGINE_OPTION_CLIENT_NAME_PREFIX, 0, standalone.engineOptions.clientNamePrefix); | |||
| engine->setOption(CB::ENGINE_OPTION_PLUGINS_ARE_STANDALONE, standalone.engineOptions.pluginsAreStandalone, nullptr); | |||
| #endif // BUILD_BRIDGE | |||
| } | |||
| @@ -694,7 +696,6 @@ void carla_set_engine_callback(CarlaHostHandle handle, EngineCallbackFunc func, | |||
| handle->engine->setCallback(func, ptr); | |||
| } | |||
| #ifndef BUILD_BRIDGE | |||
| void carla_set_engine_option(CarlaHostHandle handle, EngineOption option, int value, const char* valueStr) | |||
| { | |||
| carla_debug("carla_set_engine_option(%p, %i:%s, %i, \"%s\")", | |||
| @@ -811,6 +812,7 @@ void carla_set_engine_option(CarlaHostHandle handle, EngineOption option, int va | |||
| shandle.engineOptions.audioDevice = carla_strdup_safe(valueStr); | |||
| break; | |||
| #ifndef BUILD_BRIDGE | |||
| case CB::ENGINE_OPTION_OSC_ENABLED: | |||
| CARLA_SAFE_ASSERT_RETURN(value == 0 || value == 1,); | |||
| shandle.engineOptions.oscEnabled = (value != 0); | |||
| @@ -825,6 +827,7 @@ void carla_set_engine_option(CarlaHostHandle handle, EngineOption option, int va | |||
| CARLA_SAFE_ASSERT_RETURN(value <= 0 || value >= 1024,); | |||
| shandle.engineOptions.oscPortUDP = value; | |||
| break; | |||
| #endif | |||
| case CB::ENGINE_OPTION_FILE_PATH: | |||
| CARLA_SAFE_ASSERT_RETURN(value > CB::FILE_NONE,); | |||
| @@ -934,7 +937,7 @@ void carla_set_engine_option(CarlaHostHandle handle, EngineOption option, int va | |||
| shandle.engineOptions.frontendWinId = static_cast<uintptr_t>(winId); | |||
| } break; | |||
| # ifndef CARLA_OS_WIN | |||
| #if !defined(BUILD_BRIDGE_ALTERNATIVE_ARCH) && !defined(CARLA_OS_WIN) | |||
| case CB::ENGINE_OPTION_WINE_EXECUTABLE: | |||
| CARLA_SAFE_ASSERT_RETURN(valueStr != nullptr && valueStr[0] != '\0',); | |||
| @@ -972,11 +975,13 @@ void carla_set_engine_option(CarlaHostHandle handle, EngineOption option, int va | |||
| CARLA_SAFE_ASSERT_RETURN(value >= 1 && value <= 99,); | |||
| shandle.engineOptions.wine.serverRtPrio = value; | |||
| break; | |||
| # endif // CARLA_OS_WIN | |||
| #endif | |||
| #ifndef BUILD_BRIDGE | |||
| case CB::ENGINE_OPTION_DEBUG_CONSOLE_OUTPUT: | |||
| shandle.logThreadEnabled = (value != 0); | |||
| break; | |||
| #endif | |||
| case CB::ENGINE_OPTION_CLIENT_NAME_PREFIX: | |||
| if (shandle.engineOptions.clientNamePrefix != nullptr) | |||
| @@ -986,13 +991,17 @@ void carla_set_engine_option(CarlaHostHandle handle, EngineOption option, int va | |||
| ? carla_strdup_safe(valueStr) | |||
| : nullptr; | |||
| break; | |||
| case CB::ENGINE_OPTION_PLUGINS_ARE_STANDALONE: | |||
| CARLA_SAFE_ASSERT_RETURN(value == 0 || value == 1,); | |||
| shandle.engineOptions.pluginsAreStandalone = (value != 0); | |||
| break; | |||
| } | |||
| } | |||
| if (handle->engine != nullptr) | |||
| handle->engine->setOption(option, value, valueStr); | |||
| } | |||
| #endif // BUILD_BRIDGE | |||
| void carla_set_file_callback(CarlaHostHandle handle, FileCallbackFunc func, void* ptr) | |||
| { | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * Carla Plugin Host | |||
| * Copyright (C) 2011-2020 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2011-2021 Filipe Coelho <falktx@falktx.com> | |||
| * | |||
| * This program is free software; you can redistribute it and/or | |||
| * modify it under the terms of the GNU General Public License as | |||
| @@ -1902,26 +1902,22 @@ void CarlaEngine::setOption(const EngineOption option, const int value, const ch | |||
| pData->options.audioDevice = carla_strdup_safe(valueStr); | |||
| break; | |||
| #ifndef BUILD_BRIDGE | |||
| case ENGINE_OPTION_OSC_ENABLED: | |||
| CARLA_SAFE_ASSERT_RETURN(value == 0 || value == 1,); | |||
| #ifndef BUILD_BRIDGE | |||
| pData->options.oscEnabled = (value != 0); | |||
| #endif | |||
| break; | |||
| case ENGINE_OPTION_OSC_PORT_TCP: | |||
| CARLA_SAFE_ASSERT_RETURN(value <= 0 || value >= 1024,); | |||
| #ifndef BUILD_BRIDGE | |||
| pData->options.oscPortTCP = value; | |||
| #endif | |||
| break; | |||
| case ENGINE_OPTION_OSC_PORT_UDP: | |||
| CARLA_SAFE_ASSERT_RETURN(value <= 0 || value >= 1024,); | |||
| #ifndef BUILD_BRIDGE | |||
| pData->options.oscPortUDP = value; | |||
| #endif | |||
| break; | |||
| #endif | |||
| case ENGINE_OPTION_FILE_PATH: | |||
| CARLA_SAFE_ASSERT_RETURN(value > FILE_NONE,); | |||
| @@ -2116,8 +2112,10 @@ void CarlaEngine::setOption(const EngineOption option, const int value, const ch | |||
| break; | |||
| #endif | |||
| #ifndef BUILD_BRIDGE | |||
| case ENGINE_OPTION_DEBUG_CONSOLE_OUTPUT: | |||
| break; | |||
| #endif | |||
| case ENGINE_OPTION_CLIENT_NAME_PREFIX: | |||
| if (pData->options.clientNamePrefix != nullptr) | |||
| @@ -2127,6 +2125,11 @@ void CarlaEngine::setOption(const EngineOption option, const int value, const ch | |||
| ? carla_strdup_safe(valueStr) | |||
| : nullptr; | |||
| break; | |||
| case ENGINE_OPTION_PLUGINS_ARE_STANDALONE: | |||
| CARLA_SAFE_ASSERT_RETURN(value == 0 || value == 1,); | |||
| pData->options.pluginsAreStandalone = (value != 0); | |||
| break; | |||
| } | |||
| } | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * Carla Plugin Host | |||
| * Copyright (C) 2011-2019 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2011-2021 Filipe Coelho <falktx@falktx.com> | |||
| * | |||
| * This program is free software; you can redistribute it and/or | |||
| * modify it under the terms of the GNU General Public License as | |||
| @@ -209,6 +209,7 @@ EngineOptions::EngineOptions() noexcept | |||
| preferUiBridges(true), | |||
| #endif | |||
| uisAlwaysOnTop(true), | |||
| pluginsAreStandalone(false), | |||
| bgColor(0x000000ff), | |||
| fgColor(0xffffffff), | |||
| uiScale(1.0f), | |||
| @@ -494,7 +494,7 @@ public: | |||
| uiName += " (GUI)"; | |||
| } | |||
| fWindow = new JucePluginWindow(opts.frontendWinId); | |||
| fWindow = new JucePluginWindow(opts.frontendWinId, opts.pluginsAreStandalone); | |||
| fWindow->setName(uiName); | |||
| } | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * Carla LV2 Plugin | |||
| * Copyright (C) 2011-2020 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2011-2021 Filipe Coelho <falktx@falktx.com> | |||
| * | |||
| * This program is free software; you can redistribute it and/or | |||
| * modify it under the terms of the GNU General Public License as | |||
| @@ -1892,6 +1892,7 @@ public: | |||
| if (fUI.type == UI::TYPE_EMBED && fUI.rdfDescriptor->Type != LV2_UI_NONE && fUI.window == nullptr) | |||
| { | |||
| const char* msg = nullptr; | |||
| const bool isStandalone = pData->engine->getOptions().pluginsAreStandalone; | |||
| switch (fUI.rdfDescriptor->Type) | |||
| { | |||
| @@ -1906,7 +1907,7 @@ public: | |||
| case LV2_UI_COCOA: | |||
| # ifdef CARLA_OS_MAC | |||
| fUI.window = CarlaPluginUI::newCocoa(this, frontendWinId, isUiResizable()); | |||
| fUI.window = CarlaPluginUI::newCocoa(this, frontendWinId, isStandalone, isUiResizable()); | |||
| # else | |||
| msg = "UI is for MacOS only"; | |||
| # endif | |||
| @@ -1914,7 +1915,7 @@ public: | |||
| case LV2_UI_WINDOWS: | |||
| # ifdef CARLA_OS_WIN | |||
| fUI.window = CarlaPluginUI::newWindows(this, frontendWinId, isUiResizable()); | |||
| fUI.window = CarlaPluginUI::newWindows(this, frontendWinId, isStandalone, isUiResizable()); | |||
| # else | |||
| msg = "UI is for Windows only"; | |||
| # endif | |||
| @@ -1922,7 +1923,7 @@ public: | |||
| case LV2_UI_X11: | |||
| # ifdef HAVE_X11 | |||
| fUI.window = CarlaPluginUI::newX11(this, frontendWinId, isUiResizable(), true); | |||
| fUI.window = CarlaPluginUI::newX11(this, frontendWinId, isStandalone, isUiResizable(), true); | |||
| # else | |||
| msg = "UI is only for systems with X11"; | |||
| # endif | |||
| @@ -546,11 +546,11 @@ public: | |||
| const EngineOptions& opts(pData->engine->getOptions()); | |||
| #if defined(CARLA_OS_MAC) | |||
| fUI.window = CarlaPluginUI::newCocoa(this, opts.frontendWinId, false); | |||
| fUI.window = CarlaPluginUI::newCocoa(this, opts.frontendWinId, opts.pluginsAreStandalone, false); | |||
| #elif defined(CARLA_OS_WIN) | |||
| fUI.window = CarlaPluginUI::newWindows(this, opts.frontendWinId, false); | |||
| fUI.window = CarlaPluginUI::newWindows(this, opts.frontendWinId, opts.pluginsAreStandalone, false); | |||
| #elif defined(HAVE_X11) | |||
| fUI.window = CarlaPluginUI::newX11(this, opts.frontendWinId, false, false); | |||
| fUI.window = CarlaPluginUI::newX11(this, opts.frontendWinId, opts.pluginsAreStandalone, false, false); | |||
| #else | |||
| msg = "Unsupported UI type"; | |||
| #endif | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * Carla Bridge Plugin | |||
| * Copyright (C) 2012-2020 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2021 Filipe Coelho <falktx@falktx.com> | |||
| * | |||
| * This program is free software; you can redistribute it and/or | |||
| * modify it under the terms of the GNU General Public License as | |||
| @@ -661,6 +661,7 @@ int main(int argc, char* argv[]) | |||
| if (! useBridge) | |||
| { | |||
| carla_set_active(gHostHandle, 0, true); | |||
| carla_set_engine_option(gHostHandle, CarlaBackend::ENGINE_OPTION_PLUGINS_ARE_STANDALONE, 1, nullptr); | |||
| if (const CarlaPluginInfo* const pluginInfo = carla_get_plugin_info(gHostHandle, 0)) | |||
| { | |||
| @@ -253,6 +253,9 @@ bool CarlaBridgeFormat::msgReceived(const char* const msg) noexcept | |||
| CARLA_SAFE_ASSERT_RETURN(readNextLineAsULong(transientWindowId), true); | |||
| opts.transientWindowId = transientWindowId; | |||
| // we can assume we are not standalone if we got options from controller side | |||
| opts.isStandalone = true; | |||
| fGotOptions = true; | |||
| uiOptionsChanged(opts); | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * Carla Bridge UI | |||
| * Copyright (C) 2011-2017 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2011-2021 Filipe Coelho <falktx@falktx.com> | |||
| * | |||
| * This program is free software; you can redistribute it and/or | |||
| * modify it under the terms of the GNU General Public License as | |||
| @@ -77,6 +77,7 @@ protected: | |||
| uint32_t bgColor; | |||
| uint32_t fgColor; | |||
| float uiScale; | |||
| bool isStandalone; | |||
| bool useTheme; | |||
| bool useThemeColors; | |||
| const char* windowTitle; | |||
| @@ -111,6 +112,11 @@ public: | |||
| * Options. | |||
| */ | |||
| struct Options { | |||
| /*! | |||
| * UI is standalone, not controlled by another application. | |||
| */ | |||
| bool isStandalone; | |||
| /*! | |||
| * UI is resizable by the user. | |||
| * The UI can still sometimes resize itself internally if this is false. | |||
| @@ -142,7 +148,8 @@ public: | |||
| * Constructor for default options. | |||
| */ | |||
| Options() noexcept | |||
| : isResizable(true), | |||
| : isStandalone(true), | |||
| isResizable(true), | |||
| useTheme(true), | |||
| useThemeColors(true), | |||
| windowTitle("TestUI"), | |||
| @@ -826,6 +826,7 @@ public: | |||
| // ------------------------------------------------------------------------------------------------------------ | |||
| // other | |||
| fUiOptions.isStandalone = opts.isStandalone; | |||
| fUiOptions.useTheme = opts.useTheme; | |||
| fUiOptions.useThemeColors = opts.useThemeColors; | |||
| } | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * Carla Bridge UI | |||
| * Copyright (C) 2014-2018 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2014-2021 Filipe Coelho <falktx@falktx.com> | |||
| * | |||
| * This program is free software; you can redistribute it and/or | |||
| * modify it under the terms of the GNU General Public License as | |||
| @@ -57,12 +57,12 @@ public: | |||
| const CarlaBridgeFormat::Options& options(fPlugin->getOptions()); | |||
| #if defined(CARLA_OS_MAC) && defined(BRIDGE_COCOA) | |||
| fHostUI = CarlaPluginUI::newCocoa(this, 0, options.isResizable); | |||
| fHostUI = CarlaPluginUI::newCocoa(this, 0, options.isStandalone, options.isResizable); | |||
| #elif defined(CARLA_OS_WIN) && defined(BRIDGE_HWND) | |||
| fHostUI = CarlaPluginUI::newWindows(this, 0, options.isResizable); | |||
| fHostUI = CarlaPluginUI::newWindows(this, 0, options.isStandalone, options.isResizable); | |||
| #elif defined(HAVE_X11) && defined(BRIDGE_X11) | |||
| XInitThreads(); | |||
| fHostUI = CarlaPluginUI::newX11(this, 0, options.isResizable, true /* assumes LV2 */); | |||
| fHostUI = CarlaPluginUI::newX11(this, 0, options.isStandalone, options.isResizable, true); | |||
| #endif | |||
| CARLA_SAFE_ASSERT_RETURN(fHostUI != nullptr, false); | |||
| @@ -2,7 +2,7 @@ | |||
| # -*- coding: utf-8 -*- | |||
| # Carla Backend code | |||
| # Copyright (C) 2011-2020 Filipe Coelho <falktx@falktx.com> | |||
| # Copyright (C) 2011-2021 Filipe Coelho <falktx@falktx.com> | |||
| # | |||
| # This program is free software; you can redistribute it and/or | |||
| # modify it under the terms of the GNU General Public License as | |||
| @@ -1045,6 +1045,9 @@ ENGINE_OPTION_DEBUG_CONSOLE_OUTPUT = 33 | |||
| # @note MUST include at least one "." (dot). | |||
| ENGINE_OPTION_CLIENT_NAME_PREFIX = 34 | |||
| # Treat loaded plugins as standalone (that is, there is no host UI to manage them) | |||
| ENGINE_OPTION_PLUGINS_ARE_STANDALONE = 35 | |||
| # --------------------------------------------------------------------------------------------------------------------- | |||
| # Engine Process Mode | |||
| # Engine process mode. | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * Carla Backend utils | |||
| * Copyright (C) 2011-2019 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2011-2021 Filipe Coelho <falktx@falktx.com> | |||
| * | |||
| * This program is free software; you can redistribute it and/or | |||
| * modify it under the terms of the GNU General Public License as | |||
| @@ -360,12 +360,14 @@ const char* EngineOption2Str(const EngineOption option) noexcept | |||
| return "ENGINE_OPTION_AUDIO_DRIVER"; | |||
| case ENGINE_OPTION_AUDIO_DEVICE: | |||
| return "ENGINE_OPTION_AUDIO_DEVICE"; | |||
| #ifndef BUILD_BRIDGE | |||
| case ENGINE_OPTION_OSC_ENABLED: | |||
| return "ENGINE_OPTION_OSC_ENABLED"; | |||
| case ENGINE_OPTION_OSC_PORT_UDP: | |||
| return "ENGINE_OPTION_OSC_PORT_UDP"; | |||
| case ENGINE_OPTION_OSC_PORT_TCP: | |||
| return "ENGINE_OPTION_OSC_PORT_TCP"; | |||
| #endif | |||
| case ENGINE_OPTION_FILE_PATH: | |||
| return "ENGINE_OPTION_FILE_PATH"; | |||
| case ENGINE_OPTION_PLUGIN_PATH: | |||
| @@ -398,10 +400,14 @@ const char* EngineOption2Str(const EngineOption option) noexcept | |||
| case ENGINE_OPTION_WINE_SERVER_RT_PRIO: | |||
| return "ENGINE_OPTION_WINE_SERVER_RT_PRIO"; | |||
| #endif | |||
| #ifndef BUILD_BRIDGE | |||
| case ENGINE_OPTION_DEBUG_CONSOLE_OUTPUT: | |||
| return "ENGINE_OPTION_DEBUG_CONSOLE_OUTPUT"; | |||
| #endif | |||
| case ENGINE_OPTION_CLIENT_NAME_PREFIX: | |||
| return "ENGINE_OPTION_CLIENT_NAME_PREFIX"; | |||
| case ENGINE_OPTION_PLUGINS_ARE_STANDALONE: | |||
| return "ENGINE_OPTION_PLUGINS_ARE_STANDALONE"; | |||
| } | |||
| carla_stderr("CarlaBackend::EngineOption2Str(%i) - invalid option", option); | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * Carla Plugin UI | |||
| * Copyright (C) 2014-2020 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2014-2021 Filipe Coelho <falktx@falktx.com> | |||
| * | |||
| * This program is free software; you can redistribute it and/or | |||
| * modify it under the terms of the GNU General Public License as | |||
| @@ -59,8 +59,8 @@ class X11PluginUI : public CarlaPluginUI | |||
| { | |||
| public: | |||
| X11PluginUI(Callback* const cb, const uintptr_t parentId, | |||
| const bool isResizable, const bool canMonitorChildren) noexcept | |||
| : CarlaPluginUI(cb, isResizable), | |||
| const bool isStandalone, const bool isResizable, const bool canMonitorChildren) noexcept | |||
| : CarlaPluginUI(cb, isStandalone, isResizable), | |||
| fDisplay(nullptr), | |||
| fHostWindow(0), | |||
| fChildWindow(0), | |||
| @@ -571,8 +571,8 @@ private: | |||
| class CocoaPluginUI : public CarlaPluginUI | |||
| { | |||
| public: | |||
| CocoaPluginUI(Callback* const callback, const uintptr_t parentId, const bool isResizable) noexcept | |||
| : CarlaPluginUI(callback, isResizable), | |||
| CocoaPluginUI(Callback* const callback, const uintptr_t parentId, const bool isStandalone, const bool isResizable) noexcept | |||
| : CarlaPluginUI(callback, isStandalone, isResizable), | |||
| fView(nullptr), | |||
| fParentWindow(nullptr), | |||
| fWindow(nullptr) | |||
| @@ -792,8 +792,8 @@ static LRESULT CALLBACK wndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM l | |||
| class WindowsPluginUI : public CarlaPluginUI | |||
| { | |||
| public: | |||
| WindowsPluginUI(Callback* const cb, const uintptr_t parentId, const bool isResizable) noexcept | |||
| : CarlaPluginUI(cb, isResizable), | |||
| WindowsPluginUI(Callback* const cb, const uintptr_t parentId, const bool isStandalone, const bool isResizable) noexcept | |||
| : CarlaPluginUI(cb, isStandalone, isResizable), | |||
| fWindow(nullptr), | |||
| fChildWindow(nullptr), | |||
| fParentWindow(nullptr), | |||
| @@ -1392,24 +1392,31 @@ bool CarlaPluginUI::tryTransientWinIdMatch(const uintptr_t pid, const char* cons | |||
| #ifdef HAVE_X11 | |||
| CarlaPluginUI* CarlaPluginUI::newX11(Callback* const cb, | |||
| const uintptr_t parentId, | |||
| const bool isStandalone, | |||
| const bool isResizable, | |||
| const bool isLV2) | |||
| { | |||
| return new X11PluginUI(cb, parentId, isResizable, isLV2); | |||
| return new X11PluginUI(cb, parentId, isStandalone, isResizable, isLV2); | |||
| } | |||
| #endif | |||
| #ifdef CARLA_OS_MAC | |||
| CarlaPluginUI* CarlaPluginUI::newCocoa(Callback* const cb, const uintptr_t parentId, const bool isResizable) | |||
| CarlaPluginUI* CarlaPluginUI::newCocoa(Callback* const cb, | |||
| const uintptr_t parentId, | |||
| const bool isStandalone, | |||
| const bool isResizable) | |||
| { | |||
| return new CocoaPluginUI(cb, parentId, isResizable); | |||
| return new CocoaPluginUI(cb, parentId, isStandalone, isResizable); | |||
| } | |||
| #endif | |||
| #ifdef CARLA_OS_WIN | |||
| CarlaPluginUI* CarlaPluginUI::newWindows(Callback* const cb, const uintptr_t parentId, const bool isResizable) | |||
| CarlaPluginUI* CarlaPluginUI::newWindows(Callback* const cb, | |||
| const uintptr_t parentId, | |||
| const bool isStandalone, | |||
| const bool isResizable) | |||
| { | |||
| return new WindowsPluginUI(cb, parentId, isResizable); | |||
| return new WindowsPluginUI(cb, parentId, isStandalone, isResizable); | |||
| } | |||
| #endif | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * Carla Plugin UI | |||
| * Copyright (C) 2014-2018 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2014-2021 Filipe Coelho <falktx@falktx.com> | |||
| * | |||
| * This program is free software; you can redistribute it and/or | |||
| * modify it under the terms of the GNU General Public License as | |||
| @@ -51,22 +51,26 @@ public: | |||
| #endif | |||
| #ifdef CARLA_OS_MAC | |||
| static CarlaPluginUI* newCocoa(Callback*, uintptr_t, bool isResizable); | |||
| static CarlaPluginUI* newCocoa(Callback*, uintptr_t, bool isStandalone, bool isResizable); | |||
| #endif | |||
| #ifdef CARLA_OS_WIN | |||
| static CarlaPluginUI* newWindows(Callback*, uintptr_t, bool isResizable); | |||
| static CarlaPluginUI* newWindows(Callback*, uintptr_t, bool isStandalone, bool isResizable); | |||
| #endif | |||
| #ifdef HAVE_X11 | |||
| static CarlaPluginUI* newX11(Callback*, uintptr_t, bool isResizable, bool canMonitorChildren); | |||
| static CarlaPluginUI* newX11(Callback*, uintptr_t, bool isStandalone, bool isResizable, bool canMonitorChildren); | |||
| #endif | |||
| protected: | |||
| bool fIsIdling; | |||
| bool fIsStandalone; | |||
| bool fIsResizable; | |||
| Callback* fCallback; | |||
| CarlaPluginUI(Callback* const cb, const bool isResizable) noexcept | |||
| CarlaPluginUI(Callback* const cb, | |||
| const bool isStandalone, | |||
| const bool isResizable) noexcept | |||
| : fIsIdling(false), | |||
| fIsStandalone(isStandalone), | |||
| fIsResizable(isResizable), | |||
| fCallback(cb) {} | |||
| @@ -42,8 +42,9 @@ namespace juce { | |||
| class JucePluginWindow : public DialogWindow | |||
| { | |||
| public: | |||
| JucePluginWindow(const uintptr_t parentId) | |||
| JucePluginWindow(const uintptr_t parentId, const bool isStandalone) | |||
| : DialogWindow("JucePluginWindow", Colour(50, 50, 200), true, false), | |||
| fIsStandalone(isStandalone), | |||
| fClosed(false), | |||
| fShown(false), | |||
| fTransientId(parentId) | |||
| @@ -106,7 +107,13 @@ protected: | |||
| int getDesktopWindowStyleFlags() const override | |||
| { | |||
| return ComponentPeer::windowHasDropShadow | ComponentPeer::windowHasTitleBar | ComponentPeer::windowHasCloseButton; | |||
| int flags = 0; | |||
| flags |= ComponentPeer::windowHasCloseButton; | |||
| flags |= ComponentPeer::windowHasDropShadow; | |||
| flags |= ComponentPeer::windowHasTitleBar; | |||
| if (fIsStandalone) | |||
| flags |= ComponentPeer::windowAppearsOnTaskbar; | |||
| return flags; | |||
| } | |||
| #ifndef CARLA_OS_LINUX | |||
| @@ -123,6 +130,7 @@ protected: | |||
| #endif | |||
| private: | |||
| const bool fIsStandalone; | |||
| volatile bool fClosed; | |||
| bool fShown; | |||
| const uintptr_t fTransientId; | |||