From 1b875ad28659c9c115e2773ef0bfa21736550304 Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Sat, 1 Oct 2022 00:34:34 +0200 Subject: [PATCH] Rename vst3_no_scaling to editor_disable_host_scaling This will also affect CLAP plugins. --- CHANGELOG.md | 16 +++++++++++++++- README.md | 26 +++++++++++++------------- src/common/configuration.cpp | 12 ++++++------ src/common/configuration.h | 4 ++-- src/plugin/bridges/common.h | 6 +++--- src/wine-host/bridges/vst3.cpp | 15 ++++++++------- 6 files changed, 47 insertions(+), 32 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6b67807e..db35f0f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,21 @@ Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] -TODO: Mention CLAP. Because, you know, kinda important new feature. +- TODO: Mention CLAP. Because, you know, kinda important new feature. +- TODO: Remove mention of `vst3_no_scaling` from the readme. + +# Added + +- The new `editor_disable_host_scaling` compatibility prevents hosts from + setting an explicit DPI scaling factor for the editor. In some cases this can + help with inconsistent scaling when using HiDPI scaling. This option affects + **VST3** and **CLAP** plugins and it replaces the old `vst3_no_scaling` + option. + +# Removed + +- The `vst3_no_scaling` compatibility option has been removed in favor of the + new `editor_disable_host_scaling` option. # Changed diff --git a/README.md b/README.md index 6fd78303..d9e73698 100644 --- a/README.md +++ b/README.md @@ -334,16 +334,16 @@ you load a new plugin._ ### Compatibility options -| Option | Values | Description | -| ------------------------ | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `disable_pipes` | `{true,false,}` | When this option is enabled, yabridge will redirect the Wine plugin host's output streams to a file without any further processing. See the [known issues](#known-issues-and-fixes) section for a list of plugins where this may be useful. This can be set to a boolean, in which case the output will be written to `$XDG_RUNTIME_DIR/yabridge-plugin-output.log`, or to an absolute path (with no expansion for tildes or environment variables). Defaults to `false`. | -| `editor_coordinate_hack` | `{true,false}` | Compatibility option for plugins that rely on the absolute screen coordinates of the window they're embedded in. Since the Wine window gets embedded inside of a window provided by your DAW, these coordinates won't match up and the plugin would end up drawing in the wrong location without this option. Currently the only known plugins that require this option are _PSPaudioware E27_ and _Soundtoys Crystallizer_. Defaults to `false`. | -| `editor_force_dnd` | `{true,false}` | This option forcefully enables drag-and-drop support in _REAPER_. Because REAPER's FX window supports drag-and-drop itself, dragging a file onto a plugin editor will cause the drop to be intercepted by the FX window. This makes it impossible to drag files onto plugins in REAPER under normal circumstances. Setting this option to `true` will strip drag-and-drop support from the FX window, thus allowing files to be dragged onto the plugin again. Defaults to `false`. | -| `editor_xembed` | `{true,false}` | Use Wine's XEmbed implementation instead of yabridge's normal window embedding method. Some plugins will have redrawing issues when using XEmbed and editor resizing won't always work properly with it, but it could be useful in certain setups. You may need to use [this Wine patch](https://github.com/psycha0s/airwave/blob/master/fix-xembed-wine-windows.patch) if you're getting blank editor windows. Defaults to `false`. | -| `frame_rate` | `` | The rate at which Win32 events are being handled and usually also the refresh rate of a plugin's editor GUI. When using plugin groups all plugins share the same event handling loop, so in those the last loaded plugin will set the refresh rate. Defaults to `60`. | -| `hide_daw` | `{true,false}` | Don't report the name of the actual DAW to the plugin. See the [known issues](#known-issues-and-fixes) section for a list of situations where this may be useful. This affects VST2, VST3, and CLAP plugins. Defaults to `false`. | -| `vst3_no_scaling` | `{true,false}` | Disable HiDPI scaling for VST3 plugins. Wine currently does not have proper fractional HiDPI support, so you might have to enable this option if you're using a HiDPI display. In most cases setting the font DPI in `winecfg`'s graphics tab to 192 will cause plugins to scale correctly at 200% size. Defaults to `false`. | -| `vst3_prefer_32bit` | `{true,false}` | Use the 32-bit version of a VST3 plugin instead the 64-bit version if both are installed and they're in the same VST3 bundle inside of `~/.vst3/yabridge`. You likely won't need this. | +| Option | Values | Description | +| ----------------------------------------------------------------- | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `disable_pipes` | `{true,false,}` | When this option is enabled, yabridge will redirect the Wine plugin host's output streams to a file without any further processing. See the [known issues](#known-issues-and-fixes) section for a list of plugins where this may be useful. This can be set to a boolean, in which case the output will be written to `$XDG_RUNTIME_DIR/yabridge-plugin-output.log`, or to an absolute path (with no expansion for tildes or environment variables). Defaults to `false`. | +| `editor_coordinate_hack` | `{true,false}` | Compatibility option for plugins that rely on the absolute screen coordinates of the window they're embedded in. Since the Wine window gets embedded inside of a window provided by your DAW, these coordinates won't match up and the plugin would end up drawing in the wrong location without this option. Currently the only known plugins that require this option are _PSPaudioware E27_ and _Soundtoys Crystallizer_. Defaults to `false`. | +| `editor_disable_host_scaling` (`vst3_no_scaling` in yabridge 4.x) | `{true,false}` | Disable host-driven HiDPI scaling for VST3 and CLAP plugins. Wine currently does not have proper fractional HiDPI support, so you might have to enable this option if you're using a HiDPI display. In most cases setting the font DPI in `winecfg`'s graphics tab to 192 will cause plugins to scale correctly at 200% size. Defaults to `false`. | +| `editor_force_dnd` | `{true,false}` | This option forcefully enables drag-and-drop support in _REAPER_. Because REAPER's FX window supports drag-and-drop itself, dragging a file onto a plugin editor will cause the drop to be intercepted by the FX window. This makes it impossible to drag files onto plugins in REAPER under normal circumstances. Setting this option to `true` will strip drag-and-drop support from the FX window, thus allowing files to be dragged onto the plugin again. Defaults to `false`. | +| `editor_xembed` | `{true,false}` | Use Wine's XEmbed implementation instead of yabridge's normal window embedding method. Some plugins will have redrawing issues when using XEmbed and editor resizing won't always work properly with it, but it could be useful in certain setups. You may need to use [this Wine patch](https://github.com/psycha0s/airwave/blob/master/fix-xembed-wine-windows.patch) if you're getting blank editor windows. Defaults to `false`. | +| `frame_rate` | `` | The rate at which Win32 events are being handled and usually also the refresh rate of a plugin's editor GUI. When using plugin groups all plugins share the same event handling loop, so in those the last loaded plugin will set the refresh rate. Defaults to `60`. | +| `hide_daw` | `{true,false}` | Don't report the name of the actual DAW to the plugin. See the [known issues](#known-issues-and-fixes) section for a list of situations where this may be useful. This affects VST2, VST3, and CLAP plugins. Defaults to `false`. | +| `vst3_prefer_32bit` | `{true,false}` | Use the 32-bit version of a VST3 plugin instead the 64-bit version if both are installed and they're in the same VST3 bundle inside of `~/.vst3/yabridge`. You likely won't need this. | These options are workarounds for issues mentioned in the [known issues](#known-issues-and-fixes) section. Depending on the hosts @@ -413,13 +413,13 @@ deep within in, like this: ["FabFilter*.vst3"] group = "fabfilter" -vst3_no_scaling = true +editor_disable_host_scaling = true ["Chromaphone 3.vst3"] hide_daw = true ["Misstortion2.vst3"] -vst3_no_scaling = true +editor_disable_host_scaling = true ["*/*Spectral*.vst3"] vst3_prefer_32bit = true @@ -428,7 +428,7 @@ vst3_prefer_32bit = true # own configuration set ["*"] editor_force_dnd = true -vst3_no_scaling = true +editor_disable_host_scaling = true ``` And with CLAP plugins you match on the `.clap` file, just like the VST2 config diff --git a/src/common/configuration.cpp b/src/common/configuration.cpp index 0b085a81..168354d6 100644 --- a/src/common/configuration.cpp +++ b/src/common/configuration.cpp @@ -107,6 +107,12 @@ Configuration::Configuration(const fs::path& config_path, } else { invalid_options.emplace_back(key); } + } else if (key == "editor_disable_host_scaling") { + if (const auto parsed_value = value.as_boolean()) { + editor_disable_host_scaling = parsed_value->get(); + } else { + invalid_options.emplace_back(key); + } } else if (key == "editor_force_dnd") { if (const auto parsed_value = value.as_boolean()) { editor_force_dnd = parsed_value->get(); @@ -136,12 +142,6 @@ Configuration::Configuration(const fs::path& config_path, } else { invalid_options.emplace_back(key); } - } else if (key == "vst3_no_scaling") { - if (const auto parsed_value = value.as_boolean()) { - vst3_no_scaling = parsed_value->get(); - } else { - invalid_options.emplace_back(key); - } } else if (key == "vst3_prefer_32bit") { if (const auto parsed_value = value.as_boolean()) { vst3_prefer_32bit = parsed_value->get(); diff --git a/src/common/configuration.h b/src/common/configuration.h index aa16ffc1..2b4b8d21 100644 --- a/src/common/configuration.h +++ b/src/common/configuration.h @@ -150,7 +150,7 @@ class Configuration { * that with a Wine font DPI of 192 plugins often do draw correctly at 200% * scale. */ - bool vst3_no_scaling = false; + bool editor_disable_host_scaling = false; /** * If a merged bundle contains both the 64-bit and the 32-bit versions of a @@ -203,7 +203,7 @@ class Configuration { s.ext(frame_rate, bitsery::ext::InPlaceOptional(), [](S& s, auto& v) { s.value4b(v); }); s.value1b(hide_daw); - s.value1b(vst3_no_scaling); + s.value1b(editor_disable_host_scaling); s.value1b(vst3_prefer_32bit); s.ext(matched_file, bitsery::ext::InPlaceOptional(), diff --git a/src/plugin/bridges/common.h b/src/plugin/bridges/common.h index 020a3830..d84a84f9 100644 --- a/src/plugin/bridges/common.h +++ b/src/plugin/bridges/common.h @@ -291,6 +291,9 @@ class PluginBridge { if (config_.editor_coordinate_hack) { other_options.push_back("editor: coordinate hack"); } + if (config_.editor_disable_host_scaling) { + other_options.push_back("editor: no host DPI scaling"); + } if (config_.editor_force_dnd) { other_options.push_back("editor: force drag-and-drop"); } @@ -306,9 +309,6 @@ class PluginBridge { if (config_.hide_daw) { other_options.push_back("hack: hide DAW name"); } - if (config_.vst3_no_scaling) { - other_options.push_back("vst3: no GUI scaling"); - } if (config_.vst3_prefer_32bit) { other_options.push_back("vst3: prefer 32-bit"); } diff --git a/src/wine-host/bridges/vst3.cpp b/src/wine-host/bridges/vst3.cpp index 88a88f0f..afa685a1 100644 --- a/src/wine-host/bridges/vst3.cpp +++ b/src/wine-host/bridges/vst3.cpp @@ -997,13 +997,14 @@ void Vst3Bridge::run() { [&](YaPlugViewContentScaleSupport::SetContentScaleFactor& request) -> YaPlugViewContentScaleSupport::SetContentScaleFactor:: Response { - if (config_.vst3_no_scaling) { - std::cerr << "The host requested the editor GUI to " - "be scaled by a factor of " - << request.factor - << ", but the 'vst3_no_scale' option is " - "enabled. Ignoring the request." - << std::endl; + if (config_.editor_disable_host_scaling) { + std::cerr + << "The host requested the editor GUI to be " + "scaled by a factor of " + << request.factor + << ", but the 'editor_disable_host_scaling' " + "option is enabled. Ignoring the request." + << std::endl; return Steinberg::kNotImplemented; } else { return main_context_