Update TODO.md

This commit is contained in:
Emil Ernerfeldt 2020-09-08 09:19:40 +02:00
parent 9578773613
commit 97ca69e90e

46
TODO.md
View file

@ -1,7 +1,7 @@
# TODO
TODO-list for the Egui project. If you looking for something to do, look here.
* Widgets:
* Widgets
* [ ] Text input
* [x] Input
* [x] Text focus
@ -20,8 +20,16 @@ TODO-list for the Egui project. If you looking for something to do, look here.
* [x] Vertical scrolling
* [x] Scroll-wheel input
* [x] Drag background to scroll
* [x] Kinetic scrolling
* [ ] Horizontal scrolling
* [X] Kinetic scrolling
* Input
* [x] Distinguish between clicks and drags
* [x] Double-click
* [x] Text
* [ ] Support all mouse buttons
* [ ] Distinguish between touch input and mouse input
* [ ] Get modifier keys
* [ ] Keyboard shortcuts
* [ ] Text
* [ ] Unicode
* [ ] Shared mutable expanding texture map?
@ -37,6 +45,7 @@ TODO-list for the Egui project. If you looking for something to do, look here.
* Windows
* [ ] Positioning preference: `window.preference(Top, Right)`
* [ ] Keeping right/bottom on expand. Maybe cover jitteryness with quick animation?
* [ ] Make auto-positioning of windows respect permanent side-bars.
* [ ] Image support
* [ ] user-chosen texture ids (so people can show thing with mipmaps and whatnot)
* [ ] `enum TextureId { Egui, User(u64) }` added to `Triangles`
@ -52,9 +61,20 @@ TODO-list for the Egui project. If you looking for something to do, look here.
* [ ] Veriy alpha and sRGB correctness
* [x] sRGBA decode in fragment shader
* [ ] Thin circles look bad
* [ ] Color picker
* [ ] Allow adding multiple tooltips to the same widget, showing them all one after the other.
* Math
* [ ] Change `width.min(max_width)` to `width.at_most(max_width)`
* Id
* struct TempId(u64); struct StateId(u64);
* `TempId` is count-based. Only good for interaction. Can't be used for storing state.
* `StateId` must be generated from e.g. label (window title, ...), and is required for storing state (window position, ...).
* Both can be conveted to `Id` which is used for temporary stuff like interactions and animations.
* An `Ui`:s has two seed ids: one state, one temp. State is ONLY generated by `StateId`, no polution. A new `Ui` region is either created with e.g. a label to generate a new child `StateId`, or the region inherits the same id as the parent (but different `TempId` seed).
* Demo
* Manual layout example:
* ui.child_ui_pos(pos).label("Label at specific position");
* ui.child_ui_rect(rect).label("Label in a rectangle");
## egui_web
* [x] Scroll input
@ -77,12 +97,13 @@ TODO-list for the Egui project. If you looking for something to do, look here.
* e.g. `ui.containers((Frame::new(), Resize::new(), ScrollArea::new()), |ui| ...)`
* [ ] Attach labels to checkboxes, radio buttons and sliders with a separate wrapper-widget ?
## Input
* [x] Distinguish between clicks and drags
* [x] Double-click
* [x] Text
* [ ] Support all mouse buttons
* [ ] Distinguish between touch input and mouse input
### Refactor space allocation
When painting a widget, you want to allocate space. On that space you sometimes want to paint, sometimes create a sub-Ui to layout child widgets. So sometimes you want a `Painter` for the region, sometimes a new `Ui`. However, what you are doing is essentially the same thing, and so we should make that clearer somehow, maybe via naming.
* `ui.allocate(size) -> Rect`
* `ui.canvas(size) -> Paint`
* `ui.child_ui(size) -> Ui`
## Other
* [x] Persist UI state in external storage
@ -96,16 +117,13 @@ TODO-list for the Egui project. If you looking for something to do, look here.
* [ ] Implement a minimal markdown viewer
## Names and structure
* [x] Combine Egui and Context?
* [x] Solve which parts of Context are behind a mutex
* [x] Rename Region to Ui
* [x] Maybe find a shorter name for the library like `egui`?
* [ ] Rename things to be more consistent with Dear ImGui ?
* [ ] Put everything in `Context` behind the same Mutex? `struct Context(Arc<Mutex<ContextImpl>>);`, with e.g. `context.lock().memory.foo`?
## Global widget search
Ability to do a search for any widget. The search works even for collapsed regions and closed windows and menus. This is implemented like this: while searching, all region are layed out and their add_content functions are run. If none of the contents matches the search, the layout is reverted and nothing is shown. So windows will get temporarily opened and run, but if the search is not a match in the window it is closed again. This means then when searching your whole GUI is being run, which may be a bit slower, but it would be a really awesome feature.
# Done:
# Done
* Widgets
* [x] Label
* [x] Button