This might be a bit of a surprise, but after almost six years of self-imposed hiatus I’ve decided to come back to some of the open-source Swing projects that have been frozen in time since late 2010. Part of it was a mild curiosity to see how much things have changed in the meanwhile, and part of it was somewhat of a challenge to get back to a code base that I once knew like the back of my hand.

Before delving into the rest of this rather lengthy post, a fair warning. The images seen here are only meant to be viewed on high-resolution / retina / 2x-density screens. Otherwise what you’re seeing is a scaled down version of the original images that has little to do with the actual visuals seen on those screens.
Having said that, what is you see above is what I saw a couple of months ago on my 2013 MacBook Pro that has a Retina screen. Having spent the last four years looking at crisp visuals of pretty much all the native apps (except for Eclipse that is just now starting to get there, but then again calling Eclipse a native app is somewhat of a stretch), this was painful. There are obvious line artifacts, with the two most noticeable being the light outline along left/top edges of the main window and a darker horizontal line across the selected tab. But other that that, everything is just too blocky, pixelated and way too fat.
Two months later, I’m happy to report that Substance is a fully fledged citizen of the Retina universe. Given the amount of work that went into making that happen, the next release will have a version bump to 7.0 code-named Uruguay. The three big themes of this release will be as follows.
Hi DPI support
Searching the web for the initial pointers on Hi DPI support in Swing got me to this post from 2013 by Konstantin Bulenkov. Konstantin is the team lead at Jetbrains – the company behind the IntelliJ platform and all the apps built on top of that platform. Did you know that IntelliJ IDEA is a Swing app? If you didn’t, now you know.
Lucky for me, the code referenced in that post is part of the community edition of IDEA and is available under the quite permissive Apache license. And even though some part of that code is using reflection to query the underlying capabilities, if it’s working for IDEA with its hundreds of thousands of active users, it’s certainly good enough for me.
This code now powers pretty much all the pixels you see in Substance 7.0 – once again, the same warning about images that are meant to be viewed only on retina / high-res screens applies to all the images in this post.

Continue reading »
I’ve just published the final releases for the following projects:
Flamingo 5.0 release contains:
- New scroller panel component
- New color selector popup
- Full right-to-left (RTL) support
- Toggle menu buttons
- Dock icon for ribbon frame on Mac
- Dynamic resize of ribbon components
Substance 6.1 release contains:
- Platform specific keyboard shortcuts
- New Mariner skin
- New Office Black 2007 skin
- Better visual integration in Substance Flamingo plugin for ribbon under all core Substance skins
Trident 1.3 is mainly maintenance release with a few minor API additions to the repaint timelines. Flamingo uses Trident for some of the animations, and you will need to add the latest Trident jar to the classpath. If you’re running your Flamingo-based application under Substance, add the latest Substance Flamingo plugin jar to the classpath for consistent visual appearance and animation effects.
Here are a few screenshots of these libraries in action. New Mariner skin in Substance:

New Office Black 2007 skin in Substance that is targeting the Flamingo ribbon component:

Scrolling support for Flamingo popup menus:

Color selector popup for Flamingo command buttons:

Full right-to-left support in Flamingo ribbon:

I’ve just published the release candidates for the following projects:
Flamingo 5.0 release candidate contains:
- New scroller panel component
- New color selector popup
- Full right-to-left (RTL) support
- Toggle menu buttons
- Dock icon for ribbon frame on Mac
- Dynamic resize of ribbon components
Substance 6.1 release candidate contains:
- Platform specific keyboard shortcuts
- New Mariner skin
- New Office Black 2007 skin
- Better visual integration in Substance Flamingo plugin for ribbon under all core Substance skins
Trident 1.3 is mainly maintenance release with a few minor API additions to the repaint timelines. Flamingo uses Trident for some of the animations, and you will need to add the latest Trident jar to the classpath. If you’re running your Flamingo-based application under Substance, add the latest Substance Flamingo plugin jar to the classpath for consistent visual appearance and animation effects.
The final releases for all the projects are scheduled for August 9. Only bugs will be fixed until that date.
In addition to providing platform-specific key bindings, bug fixing and better integration with the Flamingo component suite, Substance 6.1 (code-named Trinidad) will introduce a new skin named Mariner. To use the new skin in your application, you have the following options:
- -Dswing.defaultlaf=org.pushingpixels.substance.api.skin.SubstanceMarinerLookAndFeel
- UIManager.setLookAndFeel(new SubstanceMarinerLookAndFeel())
- UIManager.setLookAndFeel(“org.pushingpixels.substance.api.skin.SubstanceMarinerLookAndFeel”)
- SubstanceLookAndFeel.setSkin(new MarinerSkin())
Here are a few screenshots of Mariner in action. A few basic controls, along with a decorated title pane, a menu bar and a toolbar:

A tree and a list with a few selected items

Comboboxes:

Text fields:

Sliders:

Ribbon:

A larger UI with a more controls (tabs, scroll bars, status bar and task pane container from SwingX):

If you want to test the new Mariner skin in your application, you’re more than welcome to take the latest 6.1dev drop of Substance code-named Trinidad for a ride and let me know if you run into any exceptions, visual artifacts or anything else.