Things might have seemed quiet on the Cantabile development front lately but I’ve been busy and thought I’d provide an update.
The main thing I’ve been working on is a new version of GuiKit - the UI library that Cantabile uses. Since this is a pretty big change, I’ve been reluctant to do anything major in Cantabile that will then need to be ported. As of yesterday I basically got GuiKit finished to the point where it’s ready for use in Cantabile.
Also, .NET 5 is out now and looking pretty slick so I’ve decided to roll a whole bunch of things into one biggish update that I’m calling “Technology Update 2021”. This will include .NET 5, GuiKit 3 and various other library and toolchain and updates.
Most of these changes won’t bring new features per se but they will provide a good foundation to build upon soon after. In the meantime the main improvements will be:
.NET 5 - considerable performance improvements.
GuiKit 3 - cleaner, simpler, leaner and better in so many ways (I can’t wait till Cantabile is moved to this)
New theming engine makes pretty much everything themeable.
Theme hot swapping - no need to restart to switch themes
UI hot scaling - no need to restart to adjust scaling (and possibly independent scaling for different parts of the UI).
Pixel accurate layout engine will fix various display artifacts in the current version.
Improved touch screen support.
Improved hi-dpi and multi-monitor support
New JSON serialization library (JsonKit) supports trimming which should reduce the size of song and set list files considerably.
New language translation tools and library (TranslateKit) will make things easier for translators.
Better native control hosting should improve the plugin editor dialog and in future allow hosting of plugin editors in Cantabile’s main window.
Much improved UIAutomation support will make Cantabile’s UI programmable from third party tools and will improve support for accessibility tools like screen readers.
Better exception handling and a new crash reporter.
The biggest visible change will be the crisp new UI. Here’s a screen shot of one of the GuiKit3 test screens showing the new look. (there’s also a light theme and you can create your own if you’re keen)
Finally since all this is going to require a lot of testing this is a good opportunity to clean up some riskier areas that I’ve been putting off. ie: time to pay off some technical debt.
The next step is to port all of Cantabile’s custom controls to GuiKit 3 - things like the on-screen keyboard, the wiring view, midi activity indicators, level meters etc… I’m guesstimating that’ll take about a week or two.
If you’re interested, I’m tracking all this in Trello - see here and will post progress updates here too.
The custom controls now use GuiKit3’s new theming language:
// Cantabile GUI Theme
// Import the default GuiKit Dark theme
import("GuiKit.Dark");
// The beat indicator in the main status panel
class BeatIndicator
{
FirstBeatColor: #00FF00,
OtherBeatsColor: #dfe1e5,
}
// MIDI Activity Indicator
class MidiActivityIndicator
{
Indicator: select
{
// Checked state is used for MIDI activity (bright led)
checked: Image("LedSmallGreen.png", Gravity.Center),
// Indeterminate state is used for MIDI sense activity (dim led)
indeterminate: Image("LedSmallSense.png", Gravity.Center),
// Any other state is displayed as "off".
else: Image("LedSmallOff.png", Gravity.Center)
},
}
I’ve worked in IT for 25 years, and I’ve never worked with/bought software from a developer with more commitment and drive to deliver the best product possible. You put major companies to shame! Seriously, the whole industry could learn a lot from you. Thank you; Cantabile is a gem and you should be super proud of your work.
With that said, when are ya going to write some Lighting Control software?
I’m glad you are paying off your technical debt - this is the first step to technical independence
On a more serious note, I’ve been using an 11 inch Dell 2 in 1 in tablet mode and the touch experience is a bit wonky. I would be happy to beta test on that machine as soon as you’re ready.
When it’s ready it’ll be available for anyone who’s interested to test it. In the meantime, if you’d like to drop me an email explaining the wonkiness I can try to make sure they’re addressed.
Also, spent about two hours trying to figure out why this little popup wasn’t centered correctly. (Turned out to be two lines of code in GuiKit in the wrong order).
Very excited about this Brad! You have always been way ahead of the competitors, but this puts Cantabile light years away. Many thanks for your dedication, and long hours of hard work. It doesn’t go unnoticed.
There are very few - if any- developers that share their work flow and planning in this way. I love this level of transparency and involvement with Cantabile users. This is one of the wonderful things about using Cantabile. Thanks @brad
I set up my phone tripod and got ready for the video and the touch inside Cantabile behaved itself. I realized that yesterday I had gone back into Windows 10 display settings and set the zoom back to 100% because the bottom of the UVI display for B5 was below the bottom of the screen (its where all the buttons for settings are). I’ll set it back to 125% and see if that indeed was what was causing the issue.
I’m going to velcro a case with reading glasses to the laptop
Took a break from the Cantabile work and instead focused on the new theming language in GuiKit:
Refactored the code to decouple it from GuiKit and to make it more usable in other situations (ie: my son Mitch needs something similar for his game Sectors Edge).
Added an expression engine (eg: in theme files you can now write things like: FontSize: defaultFontSize * 1.2)
Added support for custom implicit type conversions (ie: smart type conversion/matching)
Added support for context aware evaluation (ie: no need to specify enum types so for example Gravity.Left becomes just Left when specifying alignments).
Rewrote the method overload selector so it too is context aware.
In other words, a bunch of changes to make the theme language more concise and easier to use for theme authors (ie: me and maybe you) and library easier to use for developers (me and Mitch ).
One of the nice things I’m noticing about the new theming approach is that for most controls I’m actually deleting more code than I’m writing and moving the functionality to the theme file - where it’s much more concise, not to mention customizable.
Extremely excited to see this technology update coming together like this! Hopefully it’ll provide a great platform for even more interesting and exciting advancements in the months and years to come!