Technical debt, GuiKit 3, OSX, Linux and some looking forward

Hey Guys,

Thought I’d post a little bit about what I’ve been up to the last couple of weeks and some things I’m thinking about going forward.

First up, I’ve just completed a major documentation effort of GuiKit - the underlying library that Cantabile’s user-interface is built on. This is all internal stuff, but with documentation now written for almost 3,000 internal functions and a bunch of code cleaned up it’s an important way to keep down the “technical debt” as they say.

Also, I’ve started a new version of GuiKit that I’m calling GuiKit 3. The big change here is going to be a move from using native operating system controls (eg: buttons, checkboxes, text fields etc…) to custom UI that will look, feel and behave identically on all platforms. While Cantabile’s main window already uses a custom UI, all the dialog boxes use native controls. This approach has worked well so far, but creates too much of a maintenance issue for porting to other platforms. This is one of the reasons I’ve been reluctant to push forward with the OSX port so far - I’m just not happy with the way it was done. So I’ve deleted that half of GuiKit and I’m starting to rebuild those controls from scratch.

There’s going to be a couple of other focuses in GuiKit 3:

  1. Much better support for Rich Text.
  2. Since I’ll need to build a multi-line text editor control, that should form a good basis for a new “in-place” show notes editor in Cantabile.
  3. Properly integrated theme support. I’ve built a new theming system which will let you customize just about anything in the UI if your so inclined.
  4. Support for the latest Windows 10 per-monitor DPI scaling features.
  5. Move to latest .NET technologies - specifically NetCore 3.1

As hinted above I’m looking into cross platform support again. While I’m not promising anything, I’m getting the feeling that Linux is going to become more and more important over the next couple of years. I recently setup a Linux based gaming machine (see here) and while I’ve used Ubuntu plenty of times before I was super impressed with 19.04 and feel like a threshold has been crossed. Same with NetCore 3.1 - it feels like its finally “arrived” and the upcoming .NET 5 is also really promising.

Finally, GuiKit is the UI library used in my son Mitch’s game (see here) and he’s been hassling me for a Linux version for ages. The game only uses a fraction of GuiKit’s features so it should be a nice stepping stone to a full port to these other platforms.

TL;DR: I’m going a bunch of behind the scenes work. None of it will be visible in Cantabile for quite a while but it’s super important and I consider this kind of effort as an investment in Cantabile’s future.




Can’t wait 'till we’re all back to work and gigs so we kibbitzers have less time to be “helpful” . .er . . that is . . .

Great stuff Brad!


Great work Brad,

I love the fact that we get to hear about what’s happening with software we use on a daily basis, it gives me a real sense of security knowing that someone actually cares about things I use for work!

Look forward to seeing what all this new stuff brings…


1 Like

A quick update lest anyone think I’m slacking off :slight_smile:

I’ve actually been really busy on this but it’s a bigger job than I originally hoped. I’ve shifted focus away from Linux and right now I’m fully focused on getting GuiKit 3 to the point where it has everything I need for Cantabile.

Besides a major overhaul of the core functionality, lots of documentation and updating to the latest .NET frameworks I’ve also implemented about half of the forms controls (eg: buttons, listboxes, checkboxes etc…) that are needed. The biggest one left to do is the text field control which I’m hoping will also form the basis for the new show notes editor.

The new theme engine is working really well and allows for just about everything to be changed via custom themes. The new layout engine is now pixel accurate which fixes some artifact issues on non-even scaling factors (eg: 130%). Also, themes and scale factors can be changed on the fly without needing restart.

Since GuiKit 3 is much nicer to code against the plan is to try and get this into Cantabile before developing any new features for Cantabile itself… but we’ll see as I don’t want hold that up for too long.

Anyway, back to my covid safe coding bunker…