[lint] TODO.md markdownlint
This commit is contained in:
parent
0ea3a53d97
commit
db2afadc76
1 changed files with 109 additions and 103 deletions
212
TODO.md
212
TODO.md
|
@ -1,154 +1,160 @@
|
||||||
# TODO
|
# TODO
|
||||||
|
|
||||||
TODO-list for the Egui project. If you looking for something to do, look here.
|
TODO-list for the Egui project. If you looking for something to do, look here.
|
||||||
|
|
||||||
* Widgets
|
* Widgets
|
||||||
* [ ] Text input
|
* [ ] Text input
|
||||||
* [x] Input
|
* [x] Input
|
||||||
* [x] Text focus
|
* [x] Text focus
|
||||||
* [x] Cursor movement
|
* [x] Cursor movement
|
||||||
* [ ] Text selection
|
* [ ] Text selection
|
||||||
* [ ] Clipboard copy/paste
|
* [ ] Clipboard copy/paste
|
||||||
* [ ] Move focus with tab
|
* [ ] Move focus with tab
|
||||||
* [ ] Horizontal slider
|
* [ ] Horizontal slider
|
||||||
* [/] Color picker
|
* [/] Color picker
|
||||||
* [x] linear rgb <-> sRGB
|
* [x] linear rgb <-> sRGB
|
||||||
* [x] HSV
|
* [x] HSV
|
||||||
* [x] Color edit button with popup color picker
|
* [x] Color edit button with popup color picker
|
||||||
* [x] Gamma for value (brightness) slider
|
* [x] Gamma for value (brightness) slider
|
||||||
* [x] Easily edit users own (s)RGBA quadruplets (`&mut [u8;4]`/`[f32;4]`)
|
* [x] Easily edit users own (s)RGBA quadruplets (`&mut [u8;4]`/`[f32;4]`)
|
||||||
* [ ] RGB editing without alpha
|
* [ ] RGB editing without alpha
|
||||||
* [ ] Additive blending aware color picker
|
* [ ] Additive blending aware color picker
|
||||||
* [ ] Premultiplied alpha is a bit of a pain in the ass. Maybe rethink this a bit.
|
* [ ] Premultiplied alpha is a bit of a pain in the ass. Maybe rethink this a bit.
|
||||||
* Containers
|
* Containers
|
||||||
* [ ] Scroll areas
|
* [ ] Scroll areas
|
||||||
* [x] Vertical scrolling
|
* [x] Vertical scrolling
|
||||||
* [x] Scroll-wheel input
|
* [x] Scroll-wheel input
|
||||||
* [x] Drag background to scroll
|
* [x] Drag background to scroll
|
||||||
* [x] Kinetic scrolling
|
* [x] Kinetic scrolling
|
||||||
* [ ] Horizontal scrolling
|
* [ ] Horizontal scrolling
|
||||||
* Input
|
* Input
|
||||||
* [x] Distinguish between clicks and drags
|
* [x] Distinguish between clicks and drags
|
||||||
* [x] Double-click
|
* [x] Double-click
|
||||||
* [x] Text
|
* [x] Text
|
||||||
* [ ] Support all mouse buttons
|
* [ ] Support all mouse buttons
|
||||||
* [ ] Distinguish between touch input and mouse input
|
* [ ] Distinguish between touch input and mouse input
|
||||||
* [ ] Get modifier keys
|
* [ ] Get modifier keys
|
||||||
* [ ] Keyboard shortcuts
|
* [ ] Keyboard shortcuts
|
||||||
* [ ] Copy, paste, undo, ...
|
* [ ] Copy, paste, undo, ...
|
||||||
* [ ] Text
|
* [ ] Text
|
||||||
* [/] Unicode
|
* [/] Unicode
|
||||||
* [x] Shared mutable expanding texture map
|
* [x] Shared mutable expanding texture map
|
||||||
* [ ] Text editing of unicode
|
* [ ] Text editing of unicode
|
||||||
* [ ] Change text style/color and continue in same layout
|
* [ ] Change text style/color and continue in same layout
|
||||||
* [ ] Menu bar (File, Edit, etc)
|
* [ ] Menu bar (File, Edit, etc)
|
||||||
* [ ] Sub-menus
|
* [ ] Sub-menus
|
||||||
* [ ] Keyboard shortcuts
|
* [ ] Keyboard shortcuts
|
||||||
* [ ] Layout
|
* [ ] Layout
|
||||||
* [x] Generalize Layout (separate from Ui)
|
* [x] Generalize Layout (separate from Ui)
|
||||||
* [ ] Table with resizable columns
|
* [ ] Table with resizable columns
|
||||||
* [ ] Grid layout
|
* [ ] Grid layout
|
||||||
* [ ] Point list
|
* [ ] Point list
|
||||||
* Windows
|
* Windows
|
||||||
* [ ] Positioning preference: `window.preference(Top, Right)`
|
* [ ] Positioning preference: `window.preference(Top, Right)`
|
||||||
* [ ] Keeping right/bottom on expand. Maybe cover jitteryness with quick animation?
|
* [ ] Keeping right/bottom on expand. Maybe cover jitteryness with quick animation?
|
||||||
* [ ] Make auto-positioning of windows respect permanent side-bars.
|
* [ ] Make auto-positioning of windows respect permanent side-bars.
|
||||||
* [ ] Image support
|
* [ ] Image support
|
||||||
* [ ] user-chosen texture ids (so people can show thing with mipmaps and whatnot)
|
* [ ] user-chosen texture ids (so people can show thing with mipmaps and whatnot)
|
||||||
* [ ] `enum TextureId { Egui, User(u64) }` added to `Triangles`
|
* [ ] `enum TextureId { Egui, User(u64) }` added to `Triangles`
|
||||||
* [ ] API for creating a texture managed by Egui
|
* [ ] API for creating a texture managed by Egui
|
||||||
* Backend-agnostic. Good for people doing Egui-apps (games etc).
|
* Backend-agnostic. Good for people doing Egui-apps (games etc).
|
||||||
* [ ] Convert font texture to RGBA, or communicate format in initialization?
|
* [ ] Convert font texture to RGBA, or communicate format in initialization?
|
||||||
* [ ] Generalized font atlas
|
* [ ] Generalized font atlas
|
||||||
* Visuals
|
* Visuals
|
||||||
* [x] Pixel-perfect painting (round positions to nearest pixel).
|
* [x] Pixel-perfect painting (round positions to nearest pixel).
|
||||||
* [x] Fix `aa_size`: should be 1, currently fudged at 1.5
|
* [x] Fix `aa_size`: should be 1, currently fudged at 1.5
|
||||||
* [x] Fix thin rounded corners rendering bug (too bright)
|
* [x] Fix thin rounded corners rendering bug (too bright)
|
||||||
* [x] Smoother animation (e.g. ease-out)? NO: animation are too brief for subtelty
|
* [x] Smoother animation (e.g. ease-out)? NO: animation are too brief for subtelty
|
||||||
* [ ] Veriy alpha and sRGB correctness
|
* [ ] Veriy alpha and sRGB correctness
|
||||||
* [x] sRGBA decode in fragment shader
|
* [x] sRGBA decode in fragment shader
|
||||||
* [ ] Thin circles look bad
|
* [ ] Thin circles look bad
|
||||||
* [ ] Allow adding multiple tooltips to the same widget, showing them all one after the other.
|
* [ ] Allow adding multiple tooltips to the same widget, showing them all one after the other.
|
||||||
* Math
|
* Math
|
||||||
* [ ] Change `width.min(max_width)` to `width.at_most(max_width)`
|
* [ ] Change `width.min(max_width)` to `width.at_most(max_width)`
|
||||||
* Id
|
* Id
|
||||||
* struct TempId(u64); struct StateId(u64);
|
* struct TempId(u64); struct StateId(u64);
|
||||||
* `TempId` is count-based. Only good for interaction. Can't be used for storing state.
|
* `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, ...).
|
* `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.
|
* 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).
|
* 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
|
* Demo
|
||||||
* Manual layout example:
|
* Manual layout example:
|
||||||
* ui.child_ui_pos(pos).label("Label at specific position");
|
* ui.child_ui_pos(pos).label("Label at specific position");
|
||||||
* ui.child_ui_rect(rect).label("Label in a rectangle");
|
* ui.child_ui_rect(rect).label("Label in a rectangle");
|
||||||
|
|
||||||
|
|
||||||
## egui_web
|
## egui_web
|
||||||
* [x] Scroll input
|
|
||||||
* [x] Change to resize cursor on hover
|
* [x] Scroll input
|
||||||
* [x] Port most code to Rust
|
* [x] Change to resize cursor on hover
|
||||||
* [x] Read url fragment and redirect to a subpage (e.g. different examples apps)
|
* [x] Port most code to Rust
|
||||||
* [ ] Embeddability
|
* [x] Read url fragment and redirect to a subpage (e.g. different examples apps)
|
||||||
* [ ] Support canvas that does NOT cover entire screen.
|
* [ ] Embeddability
|
||||||
* [ ] Support multiple eguis in one web page.
|
* [ ] Support canvas that does NOT cover entire screen.
|
||||||
* [ ] Filtering events to avoid too frequent repaints
|
* [ ] Support multiple eguis in one web page.
|
||||||
* [ ] Multiple canvases from the same rust code
|
* [ ] Filtering events to avoid too frequent repaints
|
||||||
* Different Egui instances, same app
|
* [ ] Multiple canvases from the same rust code
|
||||||
* Allows very nice web integration
|
* Different Egui instances, same app
|
||||||
|
* Allows very nice web integration
|
||||||
|
|
||||||
## Modularity
|
## Modularity
|
||||||
|
|
||||||
* [x] `trait Widget` (`Label`, `Slider`, `Checkbox`, ...)
|
* [x] `trait Widget` (`Label`, `Slider`, `Checkbox`, ...)
|
||||||
* [ ] `trait Container` (`Frame`, `Resize`, `ScrollArea`, ...)
|
* [ ] `trait Container` (`Frame`, `Resize`, `ScrollArea`, ...)
|
||||||
* [ ] `widget::TextButton` implemented as a `container::Button` which contains a `widget::Label`.
|
* [ ] `widget::TextButton` implemented as a `container::Button` which contains a `widget::Label`.
|
||||||
* [ ] Easily chain `Container`s without nested closures.
|
* [ ] Easily chain `Container`s without nested closures.
|
||||||
* e.g. `ui.containers((Frame::new(), Resize::new(), ScrollArea::new()), |ui| ...)`
|
* e.g. `ui.containers((Frame::new(), Resize::new(), ScrollArea::new()), |ui| ...)`
|
||||||
* [ ] Attach labels to checkboxes, radio buttons and sliders with a separate wrapper-widget ?
|
* [ ] Attach labels to checkboxes, radio buttons and sliders with a separate wrapper-widget ?
|
||||||
|
|
||||||
### Refactor space allocation
|
### 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.
|
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.allocate(size) -> Rect`
|
||||||
* `ui.canvas(size) -> Paint`
|
* `ui.canvas(size) -> Paint`
|
||||||
* `ui.child_ui(size) -> Ui`
|
* `ui.child_ui(size) -> Ui`
|
||||||
|
|
||||||
|
|
||||||
## Other
|
## Other
|
||||||
|
|
||||||
* [x] Persist UI state in external storage
|
* [x] Persist UI state in external storage
|
||||||
* [x] Persist Example App state
|
* [x] Persist Example App state
|
||||||
* [ ] Create an Egui icon (or use an emoji)
|
* [ ] Create an Egui icon (or use an emoji)
|
||||||
* [ ] Build in a profiler which tracks which `Ui` in which window takes up CPU.
|
* [ ] Build in a profiler which tracks which `Ui` in which window takes up CPU.
|
||||||
* [ ] Draw as flame graph
|
* [ ] Draw as flame graph
|
||||||
* [ ] Draw as hotmap
|
* [ ] Draw as hotmap
|
||||||
* [ ] Windows should open from `UI`s and be boxed by parent ui.
|
* [ ] Windows should open from `UI`s and be boxed by parent ui.
|
||||||
* Then we could open the example app inside a window in the example app, recursively.
|
* Then we could open the example app inside a window in the example app, recursively.
|
||||||
* [ ] Implement a minimal markdown viewer
|
* [ ] Implement a minimal markdown viewer
|
||||||
|
|
||||||
## Names and structure
|
## Names and structure
|
||||||
|
|
||||||
* [ ] Rename things to be more consistent with Dear ImGui ?
|
* [ ] 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`?
|
* [ ] Put everything in `Context` behind the same Mutex? `struct Context(Arc<Mutex<ContextImpl>>);`, with e.g. `context.lock().memory.foo`?
|
||||||
|
|
||||||
## Global widget search
|
## 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.
|
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
|
* Widgets
|
||||||
* [x] Label
|
* [x] Label
|
||||||
* [x] Button
|
* [x] Button
|
||||||
* [x] Checkbox
|
* [x] Checkbox
|
||||||
* [x] Radiobutton
|
* [x] Radiobutton
|
||||||
* [x] Collapsing header region
|
* [x] Collapsing header region
|
||||||
* [x] Tooltip
|
* [x] Tooltip
|
||||||
* [x] Movable/resizable windows
|
* [x] Movable/resizable windows
|
||||||
* [x] Kinetic windows
|
* [x] Kinetic windows
|
||||||
* [x] Add support for clicking hyperlinks
|
* [x] Add support for clicking hyperlinks
|
||||||
* Containers
|
* Containers
|
||||||
* [x] Vertical slider
|
* [x] Vertical slider
|
||||||
* [x] Resize any side and corner on windows
|
* [x] Resize any side and corner on windows
|
||||||
* [x] Fix autoshrink
|
* [x] Fix autoshrink
|
||||||
* [x] Automatic positioning of new windows
|
* [x] Automatic positioning of new windows
|
||||||
* Simple animations
|
* Simple animations
|
||||||
* Clip rects
|
* Clip rects
|
||||||
* [x] Separate Ui::clip_rect from Ui::rect
|
* [x] Separate Ui::clip_rect from Ui::rect
|
||||||
* [x] Use clip rectangles when painting
|
* [x] Use clip rectangles when painting
|
||||||
* [x] Use clip rectangles when interacting
|
* [x] Use clip rectangles when interacting
|
||||||
* [x] Adjust clip rects so edges of child widgets aren't clipped
|
* [x] Adjust clip rects so edges of child widgets aren't clipped
|
||||||
* [x] Use HW clip rects
|
* [x] Use HW clip rects
|
||||||
|
|
Loading…
Reference in a new issue