Signed-off-by: falkTX <falktx@falktx.com>tags/22.07
| @@ -132,9 +132,9 @@ void CardinalModuleWidget__saveDialog(ModuleWidget* const w) | |||
| static void appendPresetItems(ui::Menu* menu, WeakPtr<ModuleWidget> moduleWidget, std::string presetDir) { | |||
| bool foundPresets = false; | |||
| // Note: This is not cached, so opening this menu each time might have a bit of latency. | |||
| if (system::isDirectory(presetDir)) | |||
| { | |||
| // Note: This is not cached, so opening this menu each time might have a bit of latency. | |||
| std::vector<std::string> entries = system::getEntries(presetDir); | |||
| std::sort(entries.begin(), entries.end()); | |||
| for (std::string path : entries) { | |||
| @@ -143,7 +143,7 @@ static void appendPresetItems(ui::Menu* menu, WeakPtr<ModuleWidget> moduleWidget | |||
| std::regex r("^\\d+_"); | |||
| name = std::regex_replace(name, r, ""); | |||
| if (system::getExtension(path) == ".vcvm") | |||
| if (system::getExtension(path) == ".vcvm" && name != "template") | |||
| { | |||
| if (!foundPresets) | |||
| menu->addChild(new ui::MenuSeparator); | |||
| @@ -327,6 +327,11 @@ void CardinalModuleWidget::onButton(const ButtonEvent& e) | |||
| return; | |||
| } | |||
| // If module positions are locked, don't consume left-click | |||
| if (settings::lockModules) { | |||
| return; | |||
| } | |||
| internal->dragOffset = e.pos; | |||
| } | |||
| @@ -517,6 +517,7 @@ public: | |||
| fWindowParameters[kWindowParameterBrowserSort] = 3.0f; | |||
| fWindowParameters[kWindowParameterBrowserZoom] = 50.0f; | |||
| fWindowParameters[kWindowParameterInvertZoom] = 0.0f; | |||
| fWindowParameters[kWindowParameterSqueezeModulePositions] = 1.0f; | |||
| #endif | |||
| // create unique temporary path for this instance | |||
| @@ -862,6 +863,14 @@ protected: | |||
| parameter.ranges.min = 0.0f; | |||
| parameter.ranges.max = 1.0f; | |||
| break; | |||
| case kWindowParameterSqueezeModulePositions: | |||
| parameter.name = "Auto-squeeze module positions"; | |||
| parameter.symbol = "squeezeModules"; | |||
| parameter.hints = kParameterIsAutomatable|kParameterIsInteger|kParameterIsBoolean; | |||
| parameter.ranges.def = 1.0f; | |||
| parameter.ranges.min = 0.0f; | |||
| parameter.ranges.max = 1.0f; | |||
| break; | |||
| } | |||
| #endif | |||
| } | |||
| @@ -419,6 +419,9 @@ public: | |||
| case kWindowParameterInvertZoom: | |||
| windowParameters.invertZoom = value > 0.5f; | |||
| break; | |||
| case kWindowParameterSqueezeModulePositions: | |||
| windowParameters.squeezeModules = value > 0.5f; | |||
| break; | |||
| default: | |||
| return; | |||
| } | |||
| @@ -515,6 +518,9 @@ protected: | |||
| case kWindowParameterInvertZoom: | |||
| windowParameters.invertZoom = value > 0.5f; | |||
| break; | |||
| case kWindowParameterSqueezeModulePositions: | |||
| windowParameters.squeezeModules = value > 0.5f; | |||
| break; | |||
| default: | |||
| return; | |||
| } | |||
| @@ -1 +1 @@ | |||
| Subproject commit ca85e0a607a3a54fed8d2c3f0821c04ae62b8db7 | |||
| Subproject commit 5551617afff182925940908eaf73a7d7361303cc | |||
| @@ -33,6 +33,7 @@ START_NAMESPACE_DISTRHO | |||
| // ----------------------------------------------------------------------------------------------------------- | |||
| // NOTE make sure to never change the order, parameters indexes are based on this | |||
| enum WindowParameterList { | |||
| kWindowParameterShowTooltips, | |||
| kWindowParameterCableOpacity, | |||
| @@ -47,6 +48,7 @@ enum WindowParameterList { | |||
| kWindowParameterBrowserSort, | |||
| kWindowParameterBrowserZoom, | |||
| kWindowParameterInvertZoom, | |||
| kWindowParameterSqueezeModulePositions, | |||
| kWindowParameterCount, | |||
| }; | |||
| @@ -62,6 +64,7 @@ struct WindowParameters { | |||
| bool tooltips = true; | |||
| bool knobScroll = false; | |||
| bool lockModules = false; | |||
| bool squeezeModules = true; | |||
| bool invertZoom = false; | |||
| // cardinal specific | |||
| int rateLimit = 0; | |||
| @@ -489,6 +489,8 @@ struct ViewButton : MenuButton { | |||
| menu->cornerFlags = BND_CORNER_TOP; | |||
| menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y)); | |||
| menu->addChild(createMenuLabel("Appearance")); | |||
| menu->addChild(createBoolPtrMenuItem("Show tooltips", "", &settings::tooltips)); | |||
| ZoomSlider* zoomSlider = new ZoomSlider; | |||
| @@ -512,8 +514,16 @@ struct ViewButton : MenuButton { | |||
| menu->addChild(haloBrightnessSlider); | |||
| menu->addChild(new ui::MenuSeparator); | |||
| menu->addChild(createMenuLabel("Module dragging")); | |||
| menu->addChild(createBoolPtrMenuItem("Lock module positions", "", &settings::lockModules)); | |||
| menu->addChild(createBoolPtrMenuItem("Auto-squeeze modules when dragging", "", &settings::squeezeModules)); | |||
| menu->addChild(new ui::MenuSeparator); | |||
| menu->addChild(createMenuLabel("Parameters")); | |||
| // menu->addChild(createBoolPtrMenuItem("Hide cursor while dragging", "", &settings::allowCursorLock)); | |||
| // menu->addChild(createBoolPtrMenuItem("Lock cursor while dragging", "", &settings::allowCursorLock)); | |||
| static const std::vector<std::string> knobModeLabels = { | |||
| "Linear", | |||
| @@ -537,12 +547,11 @@ struct ViewButton : MenuButton { | |||
| knobScrollSensitivitySlider->box.size.x = 250.0; | |||
| menu->addChild(knobScrollSensitivitySlider); | |||
| menu->addChild(createBoolPtrMenuItem("Lock module positions", "", &settings::lockModules)); | |||
| menu->addChild(new ui::MenuSeparator); | |||
| menu->addChild(createMenuLabel("Window")); | |||
| menu->addChild(createBoolPtrMenuItem("Invert zoom", "", &settings::invertZoom)); | |||
| menu->addChild(new ui::MenuSeparator); | |||
| static const std::vector<std::string> rateLimitLabels = { | |||
| "None", | |||
| "2x", | |||
| @@ -775,6 +775,13 @@ void WindowParametersSave(rack::window::Window* const window) | |||
| window->internal->callback->WindowParametersChanged(kWindowParameterLockModulePositions, | |||
| rack::settings::lockModules); | |||
| } | |||
| if (window->internal->params.squeezeModules != rack::settings::squeezeModules) | |||
| { | |||
| window->internal->params.squeezeModules = rack::settings::squeezeModules; | |||
| if (window->internal->callback != nullptr) | |||
| window->internal->callback->WindowParametersChanged(kWindowParameterSqueezeModulePositions, | |||
| rack::settings::squeezeModules); | |||
| } | |||
| if (window->internal->params.invertZoom != rack::settings::invertZoom) | |||
| { | |||
| window->internal->params.invertZoom = rack::settings::invertZoom; | |||
| @@ -804,6 +811,7 @@ void WindowParametersRestore(rack::window::Window* const window) | |||
| rack::settings::tooltips = window->internal->params.tooltips; | |||
| rack::settings::knobScroll = window->internal->params.knobScroll; | |||
| rack::settings::lockModules = window->internal->params.lockModules; | |||
| rack::settings::squeezeModules = window->internal->params.squeezeModules; | |||
| rack::settings::invertZoom = window->internal->params.invertZoom; | |||
| rack::settings::rateLimit = window->internal->params.rateLimit; | |||
| } | |||