Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Status update & 0.5 Roadmap #434

Closed
5 of 7 tasks
cmyr opened this issue Dec 31, 2019 · 0 comments
Closed
5 of 7 tasks

Status update & 0.5 Roadmap #434

cmyr opened this issue Dec 31, 2019 · 0 comments

Comments

@cmyr
Copy link
Member

cmyr commented Dec 31, 2019

Status update & 0.5 Roadmap

Goals & Non-goals

Development of druid is currently driven by the needs of Runebender, a font editor, and this will continue to be true for the scope of this roadmap. Runebender is a creative desktop application, supporting Windows, macOS, and Linux (via Gtk).

A major goal for Runebender, and thus druid, is to offer a polished user experience. There are many factors to this goal, including performance, a rich palette of interactions (thus a widget library to support them), and playing well with the native platform.

This last point deserves more explanation. The intent of druid is not that you can write a single program that will magically look and feel native on all supported platforms. It's questionable whether such a thing can be done, and chasing it leads to a "lowest common denominator" approach. Rather, the goal of druid is to make it possible to create an app which respects platform conventions and expectations around things like window management, menus, and behaviour, but with a distinct visual language. Where possible, we will try and make this easier for the application author, but our expectation is that writing a good application will require significant platform-specific code. We would like to make it fairly easy to write this code within the framework, using Rust's cfg annotations (#[cfg(target_os = "macos")] { // your code here }), and we would also like to make it easy to make simple 'utility' applications that just need some basic UI, and want to be cross platform. Druid will not attempt to mimic platform UI styling (at least in the near future) for the simple reason that it's very difficult to get that 100% accurate, and being only 90% accurate is the uncanny valley.

Interest in a general toolkit for writing GUI applications in Rust appears strong, and it is a longer term goal for druid to become viable in that space. However, druid should still be considered experimental. Simple use cases that are similar to Runebender will probably be well supported. Beyond that, over the next few months, the theme is "gentle stretching" - features that would require major architectural support are likely out of scope, though the energy of a passionate contributor counts for a lot. As always, the best way to get involved is to sign up for our Zulip chat instance and say hello.

0.5 roadmap

This roadmap is intended to cover approximately January, February, and March.

The main goal for 0.5.0 is to finish the fundamental architectural todos that we've identified. These are major low-level projects that are necessary for building real applications; without them druid is non-viable.

  • addressable widgets (issue Addressable widgets #432) a number of features such as async loading of resources, controlling scroll position of a specific scroll widget, and routing commands to a widget that is multiple container-widgets deep in the tree require widgets to have 'identity'. (@raphlinus)

  • lifecycle refactor: (issue Split life cycle events into their own method #404). Widgets need to be notified when they are added and removed from the graph, when they are activated or deactivated, and in a number of other circumstances. (@cmyr)

  • z-order painting (issue z-order painting #430) for things like combo boxes and (non-system) modal dialogs, we need an ability to paint at a specific z-order. We have a design for this that we're confident about, it just needs implementation. This is up for grabs, if someone is interested; check the issue.

  • paint bounds (issue Paint bounds #401) currently, there is no way for a widget to indicate that it will draw outside of its bounds. This means we cannot correctly handle things like drop shadows or z͘a̮̤͡ḷg̛̱͔̖̠̥ó̬. (@raphlinus)

  • modal widgets: (issue modal widgets #429) this will lt us implement things like a combo box widget or a text entry pop-up more expediently. Up for grabs if someone is interested; details in the issue.

  • continuing improvement in text support, including multiline labels (issue Multiline labels #428). (@futurepaul)

  • tab between widgets (issue Tab to next editable widget #433) this is blocked on Split life cycle events into their own method #404 and Addressable widgets #432; we can revise when those are finished.

additional near-future goals:

Other work is also totally welcome in this interval; this list is mostly of architectural/lower level stuff. In particular there are a number of biggish projects that are on the horizon, but which we don't want to commit to yet:

  • cargo-druid: this is a utility that will set up new druid projects, and allow creation of native app bundles, manage desktop icons, etc. I've squatted the name on crates.io.

  • resource bundles (issue Add a "resource bundle" for files like images, fonts, and localization #397) closely related to the item above, we need to be able to package up a bunch of assets (images, localization files, etc) and have them be available from within the application. This should ideally handle things like screen resolution etc when resolving an asset.

Druid 0.4.0

Has been pubished. This is not a focused release, just a bunch of patches that happen to include some breakage, that it felt good to release before this next significant batch of breakage.

The most significant additions are multi-format copy/paste (#330), a reworked file open/save API (#376), major work on lenses (#339, #344, #367), and a bunch of widget improvements. There has also been a bunch of energy spent on cleaning up the structure of the druid crates, and refining the API.

Along with myself and @raphlinus, this release includes work from a roll call of contributors (in the approximate order of their first merged PR since the last release, and trying not to leave anyone out; apologies if I have!):

Thank you everyone for your work!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant