Skip to content

Break it up!!! #33

@Fuzzyzilla

Description

@Fuzzyzilla

This project is huge!! Time to split off components into their own crates, so my work can be more focused on just the core art functionality of Fuzzpaint and so that some of my code can be used by others in the rust ecosystem. Plus, easier to bugfix, cleaner code since I'm not tempted to put pen logic in the UI or whatever, faster compile times...

Ideas for what can be split off, in order of likelihood of me doing so:

  • egui renderer - already exists: egui_winit_vulkano which I have been working on optimizing prior to integration. Plus, has more accurate color and better support for new egui features.
  • Tablet/Stylus/Pad input - Implemented in octotablet, Simple octotablet integration + Bump deps #36.
  • Rebindable hotkeys - I like what I have now so that could be broken off to it's own crate, but I have not looked at what the wider ecosystem has to offer. Currently it is deeply inspired by Godot's Input class.
  • Rich text - containers and editors. While UI toolkits provide a way to edit rich text, they don't provide a stable representation/datastructure to store it in.
  • Zero-copy RIFF - I am extremely proud of the performance I achieved with my RIFF readers and writers, and I could easily make them a crate. Before I throw my hat into the ring though I need to check the other libraries - no point in posting a worse version of the same thing someone else did better :P
  • Gizmos - A very niche UI mechanism that I am highly doubtful exists elsewhere and is maybe of dubious re-usability. In particular, composable, interactive onscreen shapes where the "canvas" and "viewport" are in separate coordinate spaces and can be mixed and matched for different parts of the graphics/transforms. I.e., a resize box, drag handles, on-document markers, etc.
  • Command/State trees - Very close to an Operational CRDT which was a term I didn't know of at the time I wrote it. These are deeply baked into the architecture of fuzzpaint and it would require a lot of thought on how/if it can be extracted in a generalized form. I'm also not proud of the state it's in within fuzzpaint (by the time I finished it I was exhausted of that chunk of code and just wanted it to be done lol) so it needs some rethought anyway. It would be positively lovely to have it be however, as it makes multi-user editing, tree-undos, and parallelized editing/rendering a drop-in thing.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions