TODO
TODO
- drawdata: make it easy to deep-copy (or swap?) a full ImDrawData so user can
easily save that data if they use threaded rendering. (#1860 see
ImDrawDataSnapshot)
! drawlist: add CalcTextSize() func to facilitate consistent code from user pov
(currently need to use ImGui or ImFont alternatives!)
- drawlist: maintaining bounding box per command would allow to merge draw command
when clipping isn't relied on (typical non-scrolling window or non-overflowing
column would merge with previous command). (WIP branch)
- drawlist: make it easier to toggle AA per primitive, so we can use e.g. non-AA
fill + AA borders more naturally
- drawlist: non-AA strokes have gaps between points (#593, #288), glitch
especially on RenderCheckmark() and ColorPicker4().
- drawlist: callback: add an extra void* in ImDrawCallback to expose render state
instead of pulling from Renderer_RenderState (would break API).
- drawlist: AddRect vs AddLine position confusing (#2441)
- drawlist/opt: store rounded corners in texture to use 1 quad per corner (filled
and wireframe) to lower the cost of rounding. (#1962)
- drawlist/opt: AddRect() axis aligned pixel aligned (no-aa) could use 8 triangles
instead of 16 and no normal calculation.
- drawlist/opt: thick AA line could be doable in same number of triangles as 1.0
AA line by storing gradient+full color in atlas.
!- color: the color conversion helpers/types are a mess and needs sorting out.
- color: (api breaking) ImGui::ColorConvertXXX functions should be loose
ImColorConvertXX to match imgui_internals.h
- plot: full featured plot/graph api w/ scrolling, zooming etc. --> promote using
ImPlot
- (plot: deleted all other todo lines on 2023-06-28)
- tabs: "there is currently a problem because TabItem() will try to submit their
own tooltip after 0.50 second, and this will have the effect of making your tooltip
flicker once." -> tooltip priority work (WIP branch)
- tabs: make EndTabBar fail if users doesn't respect BeginTabBar return value, for
consistency/future-proofing.
- tabs: persistent order/focus in BeginTabBar() api (#261, #351)
- tabs: explicit api (even if internal) to cleanly manipulate tab order.
- tooltip: drag and drop with tooltip near monitor edges lose/changes its last
direction instead of locking one. The drag and drop tooltip should always follow
without changing direction.
- tooltip: allow to set the width of a tooltip to allow TextWrapped() etc. while
keeping the height automatic.
- tooltip: drag tooltip hovering over source widget with IsItemHovered/SetTooltip
flickers (WIP branch)
- tooltip: tooltip priorities to override a stock tooltip (e.g. shortcut tooltip)
- status-bar: add a per-window status bar helper similar to what menu-bar does.
generalize concept of layer0 rect in window (can make _MenuBar window flag obsolete
too).
- shortcuts: store multiple keychords in ImGuiKeyChord
- shortcuts: Hovered route (lower than Focused, higher than Global)
- shortcuts: local-style shortcut api, e.g. parse "&Save"
- shortcuts,menus: global-style shortcut api e.g. "Save (CTRL+S)" -> explicit flag
for recursing into closed menu
- menus: hovering from menu to menu on a menu-bar has 1 frame without any menu,
which is a little annoying. ideally zero.
- menus: would be nice if the Selectable() supported horizontal alignment (must be
given the equivalent of WorkRect.Max.x matching the position of the shortcut
column)
- tree node: add treenode/treepush int variants? not there because (void*) cast
from int warns on some platforms/settings?
- tree node: try to apply scrolling at time of TreePop() if node was just opened
and end of node is past scrolling limits?
- tree node / selectable render mismatch which is visible if you use them both
next to each other (e.g. cf. property viewer)
- tree node: tweak color scheme to distinguish headers from selected tree node
(#581)
- tree node: leaf/non-leaf highlight mismatch.
- tree node/opt: could avoid formatting when clipped (flag assuming we don't care
about width/height, assume single line height? format only %s/%c to be able to
count height?)
- settings: write more decent code to allow saving/loading new fields: columns,
selected tree nodes?
- settings: facilitate extension lazily calling AddSettingsHandler() while running
and still getting their data call the ReadXXX handlers immediately.
- settings: api for per-tool simple persistent data (bool,int,float,columns
sizes,etc.) in .ini file (#437)
- settings/persistence: helpers to make TreeNodeBehavior persist (even during
dev!) - may need to store some semantic and/or data type in ImGuiStoragePair
- filters: set a current filter that certain items (e.g. tree node) can
automatically query to hide themselves
- filters: handle wild-cards (with implicit leading/trailing *), reg-exprs
- filters: fuzzy matches (may use code at blog.forrestthewoods.com/4cffeed33fdb)
- drag and drop: focus drag target window on hold (even without open)
- drag and drop: releasing a drop shows the "..." tooltip for one frame - since
e13e598 (#1725)
- drag and drop: drag source on a group object (would need e.g. an invisible
button covering group in EndGroup)
https://twitter.com/paniq/status/1121446364909535233
- drag and drop: have some way to know when a drag begin from
BeginDragDropSource() pov. (see 2018/01/11 post in #143)
- drag and drop: allow preview tooltip to be submitted from a different place than
the drag source. (#1725)
- drag and drop: make it easier and provide a demo to have tooltip both are source
and target site, with a more detailed one on target site (tooltip ordering problem)
- drag and drop: demo with reordering nodes (in a list, or a tree node). (#143)
- drag and drop: test integrating with os drag and drop (make it easy to do a
naive WM_DROPFILE integration)
- drag and drop: allow for multiple payload types. (#143)
- drag and drop: make payload optional? payload promise? (see 2018/01/11 post in
#143)
- drag and drop: (#143) "both an in-process pointer and a promise to generate a
serialized version, for whether the drag ends inside or outside the same process"
- drag and drop: feedback when hovering a region blocked by modal (mouse cursor
"NO"?)
- misc: idle: expose "woken up" boolean (set by inputs) and/or animation time (for
cursor blink) for backend to be able stop refreshing easily.
- misc: idle: if cursor blink if the _only_ visible animation, core imgui could
rewrite vertex alpha to avoid CPU pass on ImGui:: calls.
- misc: idle: if cursor blink if the _only_ visible animation, could even expose a
dirty rectangle that optionally can be leverage by some app to render in a smaller
viewport, getting rid of much pixel shading cost.
- misc: no way to run a root-most GetID() with ImGui:: api since there's always a
Debug window in the stack. (mentioned in #2960)
- misc: make the ImGuiCond values linear (non-power-of-two). internal storage for
ImGuiWindow can use integers to combine into flags (Why?)
- misc: PushItemFlag(): add a flag to disable keyboard capture when used with
mouse? (#1682)
- misc: use more size_t in public api?
- misc: support for string view/range instead of char* would e.g. facilitate usage
with Rust (#683, #3038, WIP string_view branch)
- demo: demonstrate using PushStyleVar() in more details.
- demo: add vertical separator demo
- demo: add virtual scrolling example?
- demo: demonstrate Plot offset
- demo: window size constraint: square demo is broken when resizing from edges
(#1975), would need to rework the callback system to solve this
- bindings: ways to use clang ast dump to generate bindings or helpers for
bindings? (e.g. clang++ -Xclang -ast-dump=json imgui.h) (--> use
https://github.com/dearimgui/dear_bindings)