Cantabile 3500 — Technology Update
Cantabile build 3500 is out now!
I’m calling this build a “Technology Update” because although it’s light on new features, quite a lot has changed under the hood.
The primary driving force behind this update is the work I’ve been doing porting Cantabile to macOS (which is still ongoing but getting closer) for which I’ve developed a new version of the user-interface library that Cantabile is built upon — GuiKit2.
This update is mostly about retro-fitting GuiKit2 into the Windows version of Cantabile and this post details what’s changed…
Per-Window Resolution Support
Cantabile already supported high-resolution monitors but since most plugins haven’t been updated for this they usually appear very small:
Windows 10 Creators Update introduces some features that allows different windows to have different resolutions. Cantabile leverages these new capabilities with new option “Use Per-Window Resolution Scaling”:
By enabling this mode Cantabile’s main window can remain in crisp high-resolution mode while plugins run in low-resolution mode — slightly blurry but correctly sized and much easier to use:
Improved Multi-Monitor Support and Dynamic Scaling
Cantabile now provides better support for multiple-monitor configurations (in previous builds popups would sometimes appear partially off-screen).
Also, with the above mentioned per-window scaling option turned on, Cantabile automatically responds to changes in Window’s display scaling factor (in Control Panel |Display settings) and also responds correctly when moving windows between monitors of different resolution.
In other words, this warning text from Windows no longer applies to Cantabile when per-window scaling is enabled:
GPU Accelerated Rendering
One of the surprising discoveries on porting GuiKit to Mac was just how difficult it is to get decent rendering performance on that platform. It quickly became obvious that using the hardware acceleration of the graphics card (aka the “GPU”) was the only way to get the performance Cantabile requires.
Although the Cantabile on Windows doesn’t really need it, since the work has now been done I’ve made it available on Windows too:
It’s turned off by default because it hasn’t been heavily tested are there are some known problems with it in some scenarios (described below).
Feel free to enable it and let me know if you find any problems.
(If Cantabile fails to start with it enabled, the crash recovery window that appears when you restart has an option to turn it off again).
Drag/Drop Re-Ordering
I’ve been promising support for drag/drop re-ordering in Cantabile for a long time but I was waiting for GuiKit2 because I didn’t want to have to code it twice.
Since GuiKit2 now provides support for this, it seemed obvious to include support for this in Cantabile too. Here’s a demo video of it in action:
Touch Screen Improvements
This build introduces considerable improvements to Cantabile’s touch screen support:
- New spring based physics model for bounce and flick animations makes the whole experience much smoother and more natural.
- The ticker bar and timeline panel now both support touch (including pinch zoom on the timeline).
- More usability improvements including larger touch areas and various spacing changes on touch enabled devices.
- Improved handling of complex interactions (eg: buttons in scrollable lists now work better).
- Improved tap and hold feedback and context menus.
- Support for touch drag/drop re-ordering.
Here’s a demo video (sorry for the quality, I had to record it my phone because screen recorders can’t record your finger :)
Skia Drawing
Cantabile now uses Skia for all drawing operations.
Skia is the drawing library used in Google Chrome. It’s fast, works on all platforms and provides much richer drawing capabilities than what was possibly in the old version of GuiKit.
Support for Clear Type Fonts Dropped
Although ClearType fonts provide nice crisp text on low-resolution monitors they’re a total pain to deal with in composited view engines like Cantabile’s main window.
So I’ve dropped support for ClearType and instead picked a new set of font settings still look great (text is slightly wider, but still very legible).
See this forum topic for more discussion about this.
Window Placement Resolution Independence
In previous versions if you turned the High-Resolution UI option on/off the saved placement of any windows like Cantabile’s main window and plugin editor windows wouldn’t update to reflect the new resolution. This meant windows wouldn’t come back to the same position and size — typically either growing or shrinking.
This has been fixed in this update.
Themes
Custom themes now support inheriting from a base theme. This makes it easy to tweak an existing theme and means you typically don’t need to update your custom theme each time a new build of Cantabile adds new assets.
See this guide for more about this.
Windows 7 and .NET 4.6.1
Windows XP and Windows Vista are no longer be supported. Builds 32xx will continue to support these older operating systems but there are no plans to add any new features to those builds.
This builds also moves to a newer version of the .NET framework (v4.6.1) which the setup program will automatically install (if necessary) so long as you have an Internet connection. If not see this guide for how to manually install it.
Visual Studio 2017
On macOS, Cantabile will use Microsoft’s new .NET Core 2 and since the tooling for this platform is better in Visual Studio 2017 the entire build of Cantabile has been moved to this new tool set.
All of Cantabile is now built using the latest C# and C++ compilers from Microsoft.
“Any CPU” Build Platform
Large parts of Cantabile’s code base are now built for “Any CPU”. This is a feature of .NET that lets the one DLL file be used on multiple target platforms.
Besides simplifying the build this also reduces the size of the installation package because Cantabile.dll and GuiKit.dll are now exactly the same file on both x86 and x64.
(This helps compensate for some of the other new files that now need to be shipped ie: Skia)
Paying off the Technical Debt
All software projects over time accumulate what developers call “technical debt” — patches, hacks and quick fixes to get this done. Sometimes these are due to programmer laziness but more often they’re because the technically correct fix is either too risky or too time consuming.
During a big update like this one is a good time is a good time to pay off some of that debt and much of Cantabile’s user-interface code has been cleaned up.
Compatibility with 32xx Series Builds
Nothing significant in Cantabile’s file formats has changed in this version so you should be able to fairly freely switch between this build and earlier 32xx series builds with out affecting your existing song and rack files.
The only thing that might be affected is plugin window placement — if you’re switching between Cantabile 32xx in low resolution mode and Cantabile 3500 in high-resolution modes (or vice versa) windows might move/resize.
That said, I’d recommend taking a backup of all your song and rack files before running this build. (You should be doing that regularly anyway).
Known Issues
There are currently two known issues with this build. Neither are deal breakers:
- Some OpenGL drivers (notably NVidia and Intel) appear to have bugs that cause drawing artefacts when used with the new per-window scaling option. I’ve reported these issues to the graphics card manufacturers and I’m also in discussion with Microsoft about them. In the meantime, simply turning off GPU accelerated rendering solves the problem. AMD/Radeon drivers don’t seem to have this problem.
- In Per-Window Scaling mode there’s a bug in Windows that causes check boxes in lists not to be drawn correctly. Again, I’ve reported this to Microsoft and they’re investigating. This is a cosmetic issue that only affects high-resolution monitors.
Unknown Issues
This is a big update and a lot of code has changed and while I’ve done considerable testing (and will continue to do so) at some point I really rely on end users to run it with the wide range of plugins out there and report any issues.
Hopefully there’s no serious problems but this should be considered a very experimental alpha quality build.
Definitely do not use this build in a live performance situation.
Available Now
Although this release is light on new features it’s a major technology revamp and should serve as a good foundation for continued development of Cantabile going forward — and is a major step towards getting the macOS version done.