-
-
Notifications
You must be signed in to change notification settings - Fork 11.3k
Description
August 10 is the date last year I put ImGui 1.0 online, following a month of preparation!
I will need to step back a little from ImGui and I thought the first year anniversary would be a good date for that.
I really enjoy working on it and I have hundreds of ideas of ways to move it forward. Then reality hits: I've been slowly consuming my savings putting time to work on this and other free projects. At this point in my life I really need to try to focus on finding something I can make a living of and this means I need to put some things aside, free up time and reduce my already charged cognitive load. Sustainable game development is enough of a lottery that I can't afford to make it harder for me.
My hope was that some of the larger companies using ImGui would be able to contribute to the Patreon up to a point where I could justify spending a few days a week working on it, but it is probably not going to be the case. I am very very grateful of everybody already helping with the Patreon. It wouldn't be reasonable to expect more and I certainly don't expect individuals to add more to the pot.
So while I won't abandon ImGui and I know myself well enough to know I'll always be doing things on it, I need to set a date to make a mental transition of softening my involvement. So instead of waking up thinking "shit I need to fix this bug or add this feature" I'll be more relaxed about it. I may come back to focus on it occasionally depending on my situation.
Omar
Development wise, some upcoming themes I have in my mind:
- (DONE!) Finish the anti-aliased branch.
- (DONE!) Which means re-factoring the rendering data to be more future-proof. Switching to indexed rendering already broke rendering in the AA branch so it is the perfect time to do that transition. We should be able in the future to provide high-level information on windows so that virtual canvas, networked output is easier to work with. Also consider the possible transition to use a dynamic font atlas, perhaps the user would get e.g. a texture dirty-rectangle.
- (DONE!) The current columns implementation is currently performance-poor because it keeps pushing primitives in submission order with different scissoring settings, whereas each column should append to its own list and they are merged-flattened at the end of the column set. One advantage of switching to indexed rendering is that it is now much easier and cheaper to do that. I want to think that feature through just in case it has an effect on the rendering data (it might not) so all the breaking changes can be done once only.
- Add a framework for testing. If more people have to work on ImGui testing needs to be more thorough. I don't know what form it would take yet.
- Add a framework for generating screenshots/animations for given pieces of code. This is probably going to be done along with the "testing" framework. I would like the ImGui documentation to be a very visual, well organized listing with C++ code on one side, screenshot (or animated GIF) on the other side and tags + commentary. I think this will easily convey a lot of ideas and tips about ways to use ImGui.
Update: I've created some helper to help me take manual screenshots and its been very helpful in the past few days. This will probably evolve into such framework. - (DONE!) Various improvements with font (Add font fallback support, just like what windows does. #182 AddFontFromMemoryTTF transferring ownership #220 Using Icon Fonts in current Font #232 Font character spacing settings (GlyphExtraSpacing) #242 are all related, the key is figuring a way to do the initialisation that is flexible enough). And considering making the texture a dynamic atlas (this later part is much less a priority).
- Allow all "value - label" widgets to be displayable in a variety of combination (e.g. "label widget", "label\nwidget" with variety of expressive layout options and alignments. Devise better methods to express and manipulate the size and alignment of one or multiple widgets. Currently the PushItemWidth(...); Widget(); PopItemWidth() idiom is way too verbose. Enable simpler and better horizontal layout.
- Resizing separators, a way to separate e.g. two child windows and resize them. That would be a more flexible generalization of the concept used by columns.
- Better columns, sizing options, columns header, scrolling with non-scrolling headers, sorting, re-ordering. It's all sort of feasible but should be natural first-class citizen.
- Better methods to handle simple alignment issues. The checkbox in the demo window with "No title bar" "No resize" etc. is a pattern that is hard to solve perfectly in one pass with the current available features. The approach of ImGui for some problems like this one is often "who cares just add a constant" but it'd be nice to have extra layout features to allow for it more elegantly.
- Shortcuts for menus and a general shortcut system.
- (DONE!) Keyboard navigation and usage.
- A generic iterator/data access scheme so that API like Combo or ListBox can be used with sparse list of value (currently Combo assume linear sequence so the user needs an extra level of indirection if their value are sparse).
- And the visual redesign..
I don't know when those things will be done. Probably not by August! if you feel like helping with something let me know!