TODO
TODO
- drawdata: make it easy to clone (or swap?) a full ImDrawData so user can easily
save that data if they use threaded rendering. (e.g. #2646)
! drawlist: add calctextsize func to facilitate consistent code from user pov
(currently need to use ImGui or ImFont alternatives!)
- drawlist: end-user probably can't call Clear() directly because we expect a
texture to be pushed in the stack.
- 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).
- drawlist: primitives/helpers to manipulate vertices post submission, so e.g. a
quad/rect can be resized to fit later submitted content, _without_ using the
ChannelSplit api
- 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: would be good to be able to deep copy of ImDrawData (we have a deep
copy of ImDrawList now).
- drawlist: rendering: provide a way for imgui to output to a single/global vertex
buffer, re-order indices only at the end of the frame (ref:
https://gist.github.com/floooh/10388a0afbe08fce9e617d8aefa7d302)
- drawlist: callback: add an extra void* in ImDrawCallback to allow passing
render-local data to the callback (would break API).
- drawlist: AddRect vs AddLine position confusing (#2441)
- drawlist: channel splitter should be external helper and not stored in
ImDrawList.
- 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.
- main: find a way to preserve relative orders of multiple reappearing windows (so
an app toggling between "modes" e.g. fullscreen vs all tools) won't lose relative
ordering.
- main: IsItemHovered() make it more consistent for various type of widgets,
widgets with multiple components, etc. also effectively IsHovered() region
sometimes differs from hot region, e.g tree nodes
- main: IsItemHovered() info stored in a stack? so that 'if TreeNode() { Text;
TreePop; } if IsHovered' return the hover state of the TreeNode?
- main: rename the main "Debug" window to avoid ID collision with user who may
want to use "Debug" with specific flags.
- input text: clean up the mess caused by converting UTF-8 <> wchar. the code is
rather inefficient right now and super fragile.
- input text: reorganize event handling, allow CharFilter to modify buffers, allow
multiple events? (#541)
- input text: expose CursorPos in char filter event (#816)
- input text: access public fields via a non-callback API e.g.
InputTextGetState("xxx") that may return NULL if not active.
- input text: flag to disable live update of the user buffer (also applies to
float/int text input) (#701)
- input text: hover tooltip could show unclamped text
- input text: option to Tab after an Enter validation.
- input text: add ImGuiInputTextFlags_EnterToApply? (off #218)
- input text: easier ways to update buffer (from source char*) while owned.
preserve some sort of cursor position for multi-line text.
- input text: add discard flag (e.g. ImGuiInputTextFlags_DiscardActiveBuffer) or
make it easier to clear active focus for text replacement during edition (#725)
- input text: display bug when clicking a drag/slider after an input text in a
different window has all-selected text (order dependent). actually a very old bug
but no one appears to have noticed it.
- input text: allow centering/positioning text so that ctrl+clicking Drag or
Slider keeps the textual value at the same pixel position.
- input text: decorrelate layout from inputs - e.g. what's the easiest way to
implement a nice IP/Mac address input editor?
- input text: global callback system so user can plug in an expression evaluator
easily. (#1691)
- input text: force scroll to end or scroll to a given line/contents (so user can
implement a log or a search feature)
- input text: a way to preview completion (e.g. disabled text completing from the
cursor)
- input text: a side bar that could e.g. preview where errors are. probably left
to the user to draw but we'd need to give them the info there.
- input text: a way for the user to provide syntax coloring.
- input text: Shift+TAB with ImGuiInputTextFlags_AllowTabInput could eat preceding
blanks, up to tab_count.
- input text: facilitate patterns like if (InputText(..., obj.get_string_ref())
{ obj.set_string(...); } relying on internally held buffer.
- input text multi-line: don't directly call AddText() which does an unnecessary
vertex reserve for character count prior to clipping. and/or more line-based
clipping to AddText(). and/or reorganize TextUnformatted/RenderText for more
efficiency for large text (e.g TextUnformatted could clip and log separately, etc).
- input text multi-line: support for cut/paste without selection (cut/paste the
current line)
- input text multi-line: line numbers? status bar? (follow up on #200)
- input text multi-line: behave better when user changes input buffer while
editing is active (even though it is illegal behavior). namely, the change of
buffer can create a scrollbar glitch (#725)
- input text multi-line: better horizontal scrolling support (#383, #1224)
- input text multi-line: single call to AddText() should be coarse clipped on
InputTextEx() end.
- input number: optional range min/max for Input*() functions
- input number: holding [-]/[+] buttons could increase the step speed non-linearly
(or user-controlled)
- input number: use mouse wheel to step up/down
- input number: applying arithmetics ops (+,-,*,/) messes up with text edit undo
stack.
- columns: sizing policy (e.g. for each column: fixed size, %, fill, distribute
default size among fills) (#513, #125)
- columns: add a conditional parameter to SetColumnOffset() (#513, #125)
- columns: headers. re-orderable. (#513, #125)
- columns: optional sorting modifiers (up/down), sort list so sorting can be done
multi-criteria. notify user when sort order changed.
- columns: option to alternate background colors on odd/even scanlines.
- columns: allow columns to recurse.
- columns: allow a same columns set to be interrupted by e.g. CollapsingHeader and
resume with columns in sync when moving them.
- columns: sizing is lossy when columns width is very small (default width may
turn negative etc.)
- columns: separator function or parameter that works within the column (currently
Separator() bypass all columns) (#125)
- columns: flag to add horizontal separator above/below?
- columns/layout: setup minimum line height (equivalent of automatically calling
AlignFirstTextHeightToWidgets)
!- 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. all bell &
whistle. why not!
- plot: PlotLines() should use the polygon-stroke facilities, less vertices
(currently issues with averaging normals)
- plot: make it easier for user to draw extra stuff into the graph (e.g: draw
basis, highlight certain points, 2d plots, multiple plots)
- plot: "smooth" automatic scale over time, user give an input 0.0(full user
scale) 1.0(full derived from value)
- plot: option/feature: draw the zero line
- plot: option/feature: draw grid, vertical markers
- plot: option/feature: draw unit
- plot: add a helper e.g. Plot(char* label, float value, float time_span=2.0f)
that stores values and Plot them for you - probably another function name. and/or
automatically allow to plot ANY displayed value (more reliance on stable ID)
- clipper: ability to force display 1 item in the list would be convenient (for
patterns where we need to set active id etc.)
- clipper: ability to disable the clipping through a simple flag/bool.
- clipper: ability to run without knowing full count in advance.
- clipper: horizontal clipping support. (#2580)
- 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)
- combo: use clipper: make it easier to disable clipper with a single flag.
- combo: flag for BeginCombo to not return true when unchanged (#1182)
- combo: a way/helper to customize the combo preview (#1658)
- combo/listbox: keyboard control. need InputText-like non-active focus + key
handling. considering keyboard for custom listbox (pr #203)
- listbox: refactor and clean the begin/end api
- listbox: multiple selection.
- listbox: unselect option (#1208)
- listbox: make it easier/more natural to implement range-select (need some sort
of info/ref about the last clicked/focused item that user can translate to an
index?) (wip stash)
- listbox: user may want to initial scroll to focus on the one selected value?
- listbox: expose hovered item for a basic ListBox
- listbox: keyboard navigation.
- listbox: disable capturing mouse wheel if the listbox has no scrolling. (#1681)
- listbox: scrolling should track modified selection.
- listbox: future api should allow to enable horizontal scrolling (#2510)
- menus: calling BeginMenu() twice with a same name doesn't append as Begin() does
for regular windows (#1207)
- menus: menu bars inside modal windows are acting weird.
- status-bar: add a per-window status bar helper similar to what menu-bar does.
- 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
- shortcuts: programmatically access shortcuts "Focus("&Save"))
- menus: menu-bar: main menu-bar could affect clamping of windows position (~ akin
to modifying DisplayMin)
- menus: hovering from menu to menu on a menu-bar has 1 frame without any menu,
which is a little annoying. ideally either 0 either longer.
- menus: could merge draw call in most cases (how about storing an optional aabb
in ImDrawCmd to move the burden of merging in a single spot).
- 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: _NoIndentOnOpen flag? would require to store a per-depth bit mask to
store info for pop (or whatever is cheaper)
- tree node/opt: could avoid formatting when clipped (flag assuming we don't care
about width/height, assume single line height?)
- settings: write more decent code to allow saving/loading new fields: columns,
selected tree nodes?
- settings: api for per-tool simple persistent data (bool,int,float,columns
sizes,etc.) in .ini file (#437)
- stb: add defines to disable stb implementations
- log: have more control over the log scope (e.g. stop logging when leaving
current tree node scope)
- log: be able to log anything (e.g. right-click on a window/tree-node, shows
context menu? log into tty/file/clipboard)
- log: let user copy any window content to clipboard easily (CTRL+C on windows?
while moving it? context menu?). code is commented because it fails with multiple
Begin/End pairs.
- log: obsolete LogButtons() all together.
- log: LogButtons() options for specifying depth and/or hiding depth slider
- filters: set a current filter that 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: drag tooltip hovering over source widget with
IsItemHovered/SetTooltip flickers.
- drag and drop: fix/support/options for overlapping drag sources.
- 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: allow using with other mouse buttons (where activeid won't be
set). (#1637)
- 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"?)
- font: MergeMode: flags to select overwriting or not (this is now very easy with
refactored ImFontAtlasBuildWithStbTruetype)
- font: free the Alpha buffer if user only requested RGBA.
!- font: better CalcTextSizeA() API, at least for simple use cases. current one is
horrible (perhaps have simple vs extended versions).
- font: for the purpose of RenderTextEllipsis(), it might be useful that
CalcTextSizeA() can ignore the trailing padding?
- font: a CalcTextHeight() helper could run faster than CalcTextSize().y
- font: enforce monospace through ImFontConfig (for icons?) + create dual ImFont
output from same input, reusing rasterized data but with different glyphs/AdvanceX
- font: finish CustomRectRegister() to allow mapping Unicode codepoint to custom
texture data
- font: make it easier to submit own bitmap font (same texture, another texture?).
(#2127, #2575)
- font: PushFontSize API (#1018)
- font: MemoryTTF taking ownership confusing/not obvious, maybe default should be
opposite?
- font: storing MinAdvanceX per font would allow us to skip calculating line width
(under a threshold of character count) in loops looking for block width
- font/demo: add tools to show glyphs used by a text blob, display U16 value, list
missing glyphs.
- font/demo: demonstrate use of ImFontGlyphRangesBuilder.
- font/atlas: add a missing Glyphs.reserve()
- font/atlas: incremental updates
- font/atlas: dynamic font atlas to avoid baking huge ranges into bitmap and make
scaling easier.
- font/draw: vertical and/or rotated text renderer (#705) - vertical is easier
clipping wise
- font/draw: need to be able to specify wrap start position.
- font/draw: better reserve policy for large horizontal block of text (shouldn't
reserve for all clipped lines)
- font/draw: underline, squiggle line rendering helpers.
- font: optimization: for monospace font (like the default one) we can trim
IndexXAdvance as long as trailing value is == FallbackXAdvance (need to make sure
TAB is still correct), would save on cache line.
- font: add support for kerning, probably optional. A) perhaps default to
(32..128)^2 matrix ~ 9K entries = 36KB, then hash for non-ascii?. B) or sparse
lookup into per-char list?
- font: add a simpler CalcTextSizeA() api? current one ok but not welcome if user
needs to call it directly (without going through ImGui::CalcTextSize)
- font: fix AddRemapChar() to work before atlas has been built.
- font: what would it take to support codepoint higher than 0xFFFF? (smileys,
etc.) (#2538, #2541)
- font: (api breaking) remove "TTF" from symbol names. also because it now
supports OTF.
- font/opt: Considering storing standalone AdvanceX table as 16-bit fixed point
integer?
- font/opt: Glyph currently 40 bytes (2+9*4). Consider storing UV as 16 bits
integer? (->32 bytes). X0/Y0/X1/Y1 as 16 fixed-point integers? Or X0/Y0 as float
and X1/Y1 as fixed8_8?
- inputs: we need an explicit flag about whether the imgui window is focused, to
be able to distinguish focused key releases vs alt-tabbing all release behaviors.
- inputs: rework IO system to be able to pass actual ordered/timestamped events.
use an event queue? (~#335, #71)
- inputs: support track pad style scrolling & slider edit.
- inputs/io: backspace and arrows in the context of a text input could use system
repeat rate.
- inputs/io: clarify/standardize/expose repeat rate and repeat delays (#1808)
- inputs: add mouse cursor for unavailable/no? IDC_NO/SDL_SYSTEM_CURSOR_NO.
- inputs/scrolling: support for smooth scrolling (#2462, #2569)
- misc: idle: expose "woken up" boolean (set by inputs) and/or animation time (for
cursor blink) for back-end 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: make the ImGuiCond values linear (non-power-of-two). internal storage for
ImGuiWindow can use integers to combine into flags (Why?)
- misc: provide a way to compile out the entire implementation while providing a
dummy API (e.g. #define IMGUI_DUMMY_IMPL)
- misc: PushItemFlag(): add a flag to disable keyboard capture when used with
mouse? (#1682)
- misc: use more size_t in public api?
- misc: possible compile-time support for string view/range instead of char* would
e.g. facilitate usage with Rust (#683)
- misc: possible compile-time support for wchar_t instead of char*?
- backend: bgfx?
https://gist.github.com/RichardGale/6e2b74bc42b3005e08397236e4be0fd0
- emscriptem: with refactored examples, we could provide a direct
imgui_impl_emscripten platform layer (see eg. https://github.com/floooh/sokol-
samples/blob/master/html5/imgui-emsc.cc#L42)
- remote: make a system like RemoteImGui first-class citizen/project (#75)