Github Release: https://github.com/isomerc/nicotine/releases/tag/v0.6.0
This is a big one. Since my last post on /r/eve and the launch of the Nicotine Country Discord community, the userbase of Nicotine has exploded in growth. This is great, and I love to see people enjoying my software, but with it comes a bunch of new opinions, use cases, system configurations, and other factors to account for when moving the project forward.
One of these was using Nicotine for a very large number of characters. The UI was built in a way such that if the character count grew beyond a certain number, the UI elements would bleed off the bottom viewport boundary and become unusable, seen below:
As you can see in this screenshot, all of the UI elements are crammed into a single vertical pane, so as the character list grew, it would push the "Keyboard Hotkeys" and "Preview Windows" settings sections downward, and with enough characters, eventually out of the viewport. Combined with the fact that the window wasn't resizeable, this made Nicotine ostensibly unusable for a number of people.
I approached this problem from a ground-up perspective. I didn't want to just slap a scrollbar onto the characters section and call it a day. That felt lazy. I decided to totally rebuild the UI, getting rid of egui and reaching for Iced instead. This project began as a tool I was building only for myself, and I never really intended on releasing or supporting it as a community project, so egui made sense at the time. Had I known that as many people would like it as do, I would have begun development with Iced.
I also explored Dioxus and Tauri for the UI rebuild, but ultimately decided against both of them. Tauri afforded the greatest amount of UI flexibility, but that comes at the cost of bringing in the entire web stack, being that it's a web-native framework similar to Electron. That overhead removed it as a possibility as one of Nicotine's primary value adds is that it's lightweight. I created a local branch and rebuilt the UI in Dioxus and was very pleased with the development experience, and I think Dioxus is a really cool project, but I'm a bit concerned about the longevity of that framework. There seems to be a lot of negative community sentiment about Dioxus, and I just don't know if it's going to be around for the long term. Iced on the other hand is being used at the core of the Cosmic desktop environment, which is a huge project. This gives me the longevity confidence, and I think Iced is flexible enough to serve the needs of the Nicotine project long term.
The above is the new Iced UI. I'm feeling great about these changes. The single control panel has been replaced by a more space-efficient tabbed layout with a scrollable section dedicated to character management and cycle order featuring click+drag to reorder cycle management. This is a vast user experience improvement over the original UI, and I feel good about this layout and UI framework carrying the project into its future.
Other Improvements
A master show / hide hotkey is now available for all preview windows; meaning a single hotkey can immediately hide all preview windows to get them out of your way when needed, showing them again upon a subsequent keypress.
The overhauled preview window controls section has four new features:
- You can now set the opacity of preview windows
- Preview windows can have their aspect ratio constrained and become resizable with a single "size" slider
- All slider values can take text inputs so sizes and values can be keyed in precisely to the pixel
- A control has been added to hide the preview window of the currently active client
Though it's a bit more niche, GNOME SUPPORT HAS BEEN ADDED for Linux.
Alongside these new features, a litany of performance improvements and fixes have been added, including a fix for a really nasty race condition that surfaced in certain situations on Linux.
All of these improvements represent a fairly fundamental shift in the project. The 0.5.0 release was all about attaining feature parity between Linux and Windows, and this new 0.6.0 release focuses on new features and performance / stability improvements across all supported platforms. From a developer perspective, it's quite nice that new improvements can be tackled in a singualar way with platform-specific code being supporting code. No longer will it feel like one side is constantly trying to catch up with the other.
Additionally, the Nicotine website has been updated to reflect the current state of the project.
I really hope you enjoy 0.6.0. Onward and upward.