Bug: Surge XT window shrinking

Here’s one for @brad: when I open Surge XT (latest version) in Cantabile (latest version), the Surge window keeps shrinking whenever I move it - makes it pretty much unusable.

Detaching the window doesn’t help; docking the window does keep the size stable, but there’s still a bit of size-flickering when I switch to the Surge tab.

Turning off Hi-DPI works around the issue, but there is still a lot of flickering when moving the Surge window. And of course turning off Hi-DPI is not something I’m happy with on my 4K display…

No such behavior in Cubase, so it looks like it’s an unfortunate interaction between Cantabile and Surge XT.

Seems similar to a thread from the past: Cherry Audio VST interface draw glitches/weird behavior

@brad: it would be great if you could address this when you find the time!

Cheers,

Torsten

I am having the same problem. Both with Surge XT and Cherry Audio.

  • Paul

I have the same GUI scaling problems that Torsten described.
For me, Surge scales improperly only in Cantabile 4. It scales OK in C3.
Disabling Cantabile Hi-DPI mode does not help on my machine.

Maximizing the Surge window does allow usability, but repositioning the Surge window makes it shrink to an unusable size.

I also noticed that if you change Surge’s zoom level, it forgets its zoom level when you close and re-open the Surge window. Hope this helps Brad.

Thanks for reporting… I’ll look into it.

I’ve had a look at this… it seems to only misbehave when Tools → Options → General → HiDPI User Interface is set to Enabled.

When it’s set to Enabled and Upscale Plugins or Disabled it works fine.

Also, right click on the plugin slot, choose Compatibility Settings and make sure Upscale Plugin is enabled:

Let me know if that helps.

Brad

tried that - it does avoid the window shrinking, but now the menus (fixed and pop-up) inside Surge get completely messed up - they pop up in upscaled mode, then immediately shrink to un-scaled. And then the correlation between mouse position and selected menu item gets completely messed up. Not really usable.

And of course, the upscaled GUI looks awful and fuzzy…

For the moment I’m sticking with upscaling deactivated for Surge and docking the GUI. The GUI will still jump crazily whenever I switch to the Surge tab, but at least I can work with it somehow.

Unfortunately, issue not solved…

Cheers,

Torsten

Note: previous experience was with HiDPI “Enabled & Upscale”; with HiDPI completely disabled, menus work. But still a lot of funkiness, whenever I open the GUI: it opens in a larger size, then snaps back to the zoom factor previously selected. Same when using it in docked mode - when I switch to the docked GUI, it blooms up, then snaps back to its previous size.

Something is still very wrong here…

And of course I don’t really want to completely disable HiDPI on my machines…

Hope there is a workaround to address this - Cubase and Reaper play much nicer with Surge XT; no problem with HiDPI mode, so there should be a way to make this work…

Continuing the discussion from the GX-80 thread here to avoid too much topic confusion…

I did a bit of experimenting

Overall, Cantabile is set to 120% UI scaling and GPU accelerated rendering

HiDPI disabled

SurgeXT

  • window displayed correctly, but fuzzy
  • zoom remembered correctly
  • pop-up menus within plugin correct
  • window dragging initially smooth, but becomes very flickery after changing the zoom within the plugin. Closing and re-opening fixes the issue for the current size; flickering re-appears after changing zoom again

GX-80

  • Window displayed correctly, but fuzzy
  • zoom setting recalled correctly
  • hover tooltips and pop-up menus correct
  • dragging the window mostly unproblomatic - on one occasion, the window still shrunk, but haven’t been able to reproduce that

HiDPI enabled, plugin up-scaling enabled for both plugins (compatibility)

Surge XT

  • window displayed correctly, but fuzzy
  • window dragging unproblematic
  • window zoom recalled correctly
  • pop-up menus within the plugin GUI out of whack
    • drawn at larger size initially, then immediately re-drawn at smaller size
    • menu selection seems to be bound to large size, so menu selection doesn’t follow the mouse position on the smaller menu - menus very difficult to use, sometimes unusable

GX-80

  • window displays correctly; labels fuzzy, but workable
  • window dragging OK, but at some zoom factors, GUI “wobbles” - looks like a vertical compression that is applied on moving, then corrected. For some reason doesn’t happen at zoom 110 and 80…
  • some redrawing issues on tooltip popups - initially don’t get drawn, then when I change the value, the tooltips do get drawn but then don’t go away until you move the window or hover over other elements
  • massive drawing issues with the preset selection menu (try selecting “All Presets” and scrolling the list to the right…)

HiDPI enabled (without upscaling plugins)

Surge XT

  • Window displayed correctly, nice and sharp
  • all pop-up menus within the GUI display and work correctly
  • resizing the window via bottom right corner doesn’t work - keeps shrinking back
  • when selecting a zoom factor via menu, scales correctly
  • window size not recalled correctly on opening: zoomed to 100%, closed, re-opened at 64%
  • window size even shrinks when Cantabile loses and re-gains the focus: set size to 100%, switch to a different program (browser), go back to the main Cantabile window → plugin window is already smaller (80%). On clicking on the plugin GUI, it shrinks again, down to 64%
  • dragging the window makes it shrink continuously, down to ridiculous size, where it is near impossible to find the button to zoom it back to 100%
  • docking the plugin GUI makes it display correctly, without all the resizing. Just means I’m constrained to the Cantabile GUI footprint and can’t have Cantabile and the plugin windows side by side, which is far more convenient on my large 4K screen.

GX-80

  • window displayed correctly, nice and sharp
  • pop-up menus and tooltips displaying correctly
  • resizing window via bottom right corner causes a bit of flickering back and forth between sizes, but works somehow
  • resizing via zoom menu works
  • window sizes not recalled correctly: zoomed to 100%, recalled to 64%
  • same issue as Surge regarding focus loss: started at 100%, switched to browser, clicked the GX80 window → shrinks to 80%. When switching to browser, then first activating Cantabile, then clicking plugin GUI, shrinks twice → 64%
  • dragging the window makes it shrink continuously, but apparently the plugin won’t shrink below 45%, so that’s the minimum. When dragging a 45% zoom window, Cantabile still tries to scale it down, but the plugin scales back out.

Overall, it looks like in Hi DPI mode, Cantabile interprets the window size information it gets from the plugin differently from the plugin’s intention, causing it to shrink the window in size by a factor of 0.8. The plugin in turn reacts to the resizing of the window by reporting a different size back to Cantabile, and the cycle starts over. This seems to happen on every re-draw of the window.

So if Cantabile and the plugin could agree on a common understanding of the window size, this should enable both to work together nicely, I think.

After all, this is full HiDPI mode, with no “individual upscaling” of windows, so that mechanism shouldn’t come into play. Everything should be nice and HiDPI

Generally, I try to stay away from the plugin upscaling mode - it creates a lot of issues with pop-up menus within plugin GUIs. As long as a GUI just consists of a few sliders and knobs, things work out, but as soon as things get complicated, it gets messy. Maybe not really worth the hassle and development complication - perhaps it would be easier to just have two simple modes: HiDPI on or off. Just thinking out loud…

Hope this helps!

Cheers,

Torsten

BTW: just re-did this with GPU acceleration de-activated - same results!

Another addendum: this doesn’t seem to be exclusive to Cherry Audio or Surge. I just tested this with FabFilter Pro-Q3, and whatever its size is, it shrinks down to a minimum of 100% when dragged. Same issue with losing and re-gaining focus.

So it looks like there is a fundamental issue in Cantabile’s dealing with re-sizing free-scale GUI windows in HiDPI mode. It doesn’t seem to apply to plugins with GUI’s that only scale in fixed increments (e.g. Arturia, BlueCat, Waves) and don’t provide free scaling via a window sizer (bottom right).

Hope this helps finding and squashing the bug!

Cheers,

Torsten

Hi @Torsten,

Thanks for the info. I’ve spent all day looking into this and I’ve made it both better and worse.

This is a deceptively complicated area: different scaling modes, coordinate systems, scale factors, dpi factors, multiple monitors at different DPI, VST 2 vs 3, host resizing the plugin, plugin resizing the host etc…

I think I can make it much better than it currently is, but it might take a few days. Also, I’ll definitely need help testing the new changes - stay tuned.

Brad

5 Likes

I can only suggest to start simple with a “mainstream” setup: single monitor, VST3, Windows 10 - make pure HiDPI (no upscaling) work for that in a stable way, then work outward step by step (add VST2, Win 11, 2nd monitor,…). Check on upscaling last…

If I can help by testing prototype changes in my setup, let me know! I have Cantabile running on Win 10 and Win 11, different monitors from 1920x1080 to full 4K, free-scalable plugins in VST2 and VST3 versions, so happy to experiment and document.

Given our time zone difference, I can start testing when you’re done coding :sunglasses:

Cheers,

Torsten

1 Like

Hey @Torsten

I’ve just put up a new build that should make this a lot better.

It’s not perfect, especially in “Enabled and Upscale Plugins” mode when moving plugin gui between mixed DPI monitors, but it’s usable.

I even dived into the source code for Juce (as used by Surge and many others) trying to figure out what was going on and basically it came down to the plugin escaping its sandbox to try and figure out DPI scaling. ie: Juce trying to be too smart.

Anyway, have a play with build 4059 it and let me know how it goes for you.

Brad

Yesssss - now we’re talking!!!

Surge XT and GX-80 are now a joy to use - I can spread them out over my 4 K screen without any fuzzyness and go completely synth-wild :metal:t2::smiling_imp::smiling_imp:

Everything working nicely on my studio and my live machine in “Enabled” mode. I’m still not a big fan of the “Enabled and Upscale Plugins” mode - it still messes up all menus for Surge XT and the pop-up tooltips and patch menu in GX-80, so not keen to use it anyhow…

Thanx for doing this, @brad - huuuuge improvement!

Cheers,

Torsten

1 Like

Yes, I played with it a bit last night and it works much better.

  • Paul

Glad to hear this is working better now.

Try this:

  1. Turn on Enable and Upscale Plugins
  2. Right click on the plugin slot and choose “Plugin Compatibility”
  3. Turn off Enable Plugin Gui Up-scaling
  4. Restart Cantabile

image

That setting will applies to all instances of the plugin, fixes the mentioned issue with popups in Surge and should let you have other old plugins upscaled at the same time.

Brad

1 Like

Yes, that was my expectation - essentially, Cantabile should behave as in “Enabled” without the “and Upscale Plugins” for those plugins where the tick box is removed in Compatibility Settings - correct?

Was just re-checking this with upscaling active for completeness’ sake…

1 Like

Hi Brad,

I updated to this version and followed the above instructions and now I can see the Surge menus withoug putting on a second pair of readers :grinning:

Thanks for working on this!

Doug

1 Like

Surge is working much better now with update (4059). I can set Surge’s zoom level, and it now remembers it after closing and re-opening the window. It doesn’t shrink to an unreadable size when dragging the window either. Other than Surge’s tooltip popups being slightly offset, seems to function OK so far. Thank-you Brad!

I have Enable & Upscale Plugins turned on,
and turned off Enable Plugin Gui Up-scaling in the plugin compatibility.

Dave.

1 Like

It should, but unfortunately it doesn’t quite.

In order to have upscaling support, Cantabile needs to run in what Microsoft call “Per-Monitor DPI Aware Mode”. That’s a process (perhaps thread?) wide setting which unfortunately some plugins are in incompatible with.

For example, Surge (and presumably other Juce based plugins) seem to be aware of this per-monitor mode but doesn’t seem to handle the case where the host’s frame window and the plugin window are in different modes - which is what Cantabile 4 does. I could switch back to Cantabile 3 approach of having the host frame and plugin both in the same mode, but that has other issues with upscaled plugins.

The whole mixed DPI mode on Windows is a complete nightmare. It’s stateful (ie: thread and process level “modes”), not properly sandboxed (you need to trap every entry/exit point to/from a plugin to ensure the correct mode is always set), no-one really understands it and some plugins are ignorant of it, some a little aware and some too aware for their own good.

Anyway, pleased to hear it working much better now.

4 Likes