DragonCon 2022 parade highlights
After a two year of partial hiatus, DragonCon came to Atlanta over the Labor Day weekend. These are my personal highlights from the opening parade this year.
After a two year of partial hiatus, DragonCon came to Atlanta over the Labor Day weekend. These are my personal highlights from the opening parade this year.
It gives me great pleasure to announce the next major release of Radiance. Let’s get to what’s been fixed, and what’s been added. First, I’m going to use emojis to mark different parts of it like this:
💔 marks an incompatible API / binary change
🎁 marks new features
🔧 marks bug fixes and general improvements
Graphics
objects passed to the relevant UI delegates and painting methodsRadianceCommonCortex.paintAtScale1x
for visuals that need to “fall” on exact pixels, line single-pixel borders, separators, etcCommandButtonPresentationModel.isFireActionOnRollover
and CommandButtonPresentationModel.isFireActionOnPress
with a single actionFireTrigger
enum that has three values:
OnRollover
to fire action on rolloverOnPressed
to fire action on pressOnPressReleased
to fire action on press release (the default)CommandButtonPresentationModel.isTextClickAction
and CommandButtonPresentationModel.isTextClickPopup
with a single textClick
enum field that has two values:
Action
to activate action on text clickPopup
to activate secondary content on text clickBreadcrumbItem
(not wired to anything)BreadcrumbBarCallBack
APIs from StringValuePair
to BreadcrumbItem
getLeafs
to getLeaves
BreadcrumbBarCallBack
to BreadcrumbBarContentProvider`BreadcrumbBarModel
to BreadcrumbBarContentModel
BreadcrumbBarPresentationModel
and support icon filteringStringValuePair
from the API surface altogetherBreadcrumbItem
BackgroundAppearanceStrategy
across all components. This applies to
CommandButtonPresentationModel.setFlat
CommandButtonPresentationModel.Overlay.setFlat
CommandStripPresentationModel.setFlat
CommandPresentationModel.setFlat
MEDIUM
command buttons that don’t display iconsSINGLE_FULL and DOUBLE_FULL
from TabContentPaneBorderKind
. Apps that wish to draw border around the content area will need to do so explicitly.RadianceSkin.setTabFadeStart
and RadianceSkin.setTabFadeEnd
and do consistent indication for the selected / rollover tab with no alpha fade gradient.isFocused
(not used anywhere, and shouldn’t be since the focus indication is painted separately) and hasShine
(specific to StandardFillPainter
visuals).ComponentOrParentChainScope.setExtraWidgetsPresence
As always, I’d love for you to take this Radiance release for a spin. Click here to get the instructions on how to add Radiance to your builds. And don’t forget that all of the modules require Java 9 to build and run.
And now for the next big thing or two.
This release took almost a year to complete. I needed this time to figure out how to continue evolving Radiance in a meaningful way over the next decade or so. The considerations for what went into this work were laid out last October in this post. The two major areas I wanted to focus on are direct rendering and API consistency.
Direct rendering has touched the UI delegates for every single core Swing component, and almost every custom Radiance component, from command buttons all the way up to the ribbon. API consistency has been driven by the ongoing work in Aurora, as well as the drive to clean up the API surfaces that have been misaligned across the codebase for a while.
Making meaningful changes also means making hard choices about backwards compatibility. Deprecating existing APIs but leaving them available leads to a confusing API surface and increases the cost of maintaining and evolving the codebase. Leaving existing APIs in place, and trying to redirect them under the hood to a “v2” variant places noticeable constraints on what is feasible to do. If I want Radiance to be here in the next 10-15 years, the only practical way forward is to cut out APIs that have not aged well, remove them from the codebase and introduce new ones as necessary. I understand that it causes friction during dependency upgrades on the application side of things, but the only other alternative is abandoning any new development altogether.
With all this in mind, what is next, for 2023 and beyond?
The first major change in Radiance is going to be around defining and using colors. Code-named Chroma, this effort aims to bring more clarity and control over working with colors in core and custom Radiance skins, inspired by the ongoing evolution of design systems such as Material and others.
This change will also find its way into Aurora, as these two projects are twins, in a sense. Once Compose for Desktop hits its official 1.2 release, Aurora will go to 1.2 as well. Afterwards, I will work on window APIs, and will start the long-planned work to port the ribbon component to Aurora.
And last but most definitely not the least, are the plans to explore the third twin to Radiance and Aurora, and bring the theming layer and all the components to the world of Flutter.
As I said last October, it’s going to be a long road, and it may take a bit of time again until the next major release of Radiance. The current goal is to fully complete the color work across both Radiance and Aurora, and have them released at the same time. This will probably happen after the ribbon component is added to Aurora. As for the Flutter twin, it is going to be an exciting, and yet completely unpredictable adventure. I may or may not have something for you to play with in 2023. Time will tell.
Earlier in the Compose Desktop / Skia explorations:
Today, we’re going to look at the recent addition in Skia – shader-based image filters, that are available as render effects in Compose Desktop. These filters operate on the content of the specific render node in the Compose hierarchy, allowing for effects like this to be implemented with a single composite shader (visuals are from this article):
It gives me great pleasure to announce the second major release of Aurora. Let’s get to what’s been fixed, and what’s been added. First, I’m going to use emojis to mark different parts of it like this:
💔 marks an incompatible API / binary change
🎁 marks new features
🔧 marks bug fixes and general improvements
autoRepeatAction
boolean, initial delay configured by autoRepeatActionInterval
, subsequent delays configured by autoRepeatSubsequentInterval
actionFireTrigger
and the new ActionFireTrigger
enum that has three values:
OnRollover
to fire action on rolloverOnPressed
to fire action on pressOnPressReleased
to fire action on press release (the default)This release (code-named Blizzard) brings a couple of new APIs, and otherwise is focused on stabilizing and improving the overall API surface of the various Aurora modules. There’s still a long road ahead to expand Aurora’s capabilities in 2022 and beyond, with the ribbon / command bar planned as the next big addition. If you’re in the business of writing Compose Desktop apps, I’d love for you to take Aurora for a spin. Stay frosty for more features coming in 2022!