mirror of
https://github.com/Drezil/imgui.git
synced 2024-12-24 16:46:36 +00:00
71a58261f6
Note that the ConfigWindowsMoveFromTitleBarOnly path for UpdateMouseMovingWindowEndFrame() would previously test the window->RootWindow title bar instead of window->RootWindowDockStop. This didn't have any side effect afaik because we wouldn't enter that function anyway as clicking on any tab bar would trigger the move before UpdateMouseMovingWindowEndFrame() does it. However for consistency made the UpdateMouseMovingWindowEndFrame()code more correct. + minor renaming
424 lines
40 KiB
Plaintext
424 lines
40 KiB
Plaintext
dear imgui
|
|
ISSUES & TODO LIST
|
|
|
|
Issue numbers (#) refer to github issues listed at https://github.com/ocornut/imgui/issues/XXXX
|
|
The list below consist mostly of ideas noted down before they are requested/discussed by users (at which point they usually exist on the github issue tracker).
|
|
It's mostly a bunch of personal notes, probably incomplete. Feel free to query if you have any questions.
|
|
|
|
- doc/test: add a proper documentation+regression testing system (#435)
|
|
- doc/test: checklist app to verify binding/integration of imgui (test inputs, rendering, callback, etc.).
|
|
- doc/tips: tips of the day: website? applet in imgui_club?
|
|
|
|
- window: preserve/restore relative focus ordering (persistent or not) (#2304) -> also see docking reference to same #.
|
|
- window: calling SetNextWindowSize() every frame with <= 0 doesn't do anything, may be useful to allow (particularly when used for a single axis). (#690)
|
|
- window: add a way for very transient windows (non-saved, temporary overlay over hundreds of objects) to "clean" up from the global window list. perhaps a lightweight explicit cleanup pass.
|
|
- window: auto-fit feedback loop when user relies on any dynamic layout (window width multiplier, column) appears weird to end-user. clarify.
|
|
- window: allow resizing of child windows (possibly given min/max for each axis?.)
|
|
- window: background options for child windows, border option (disable rounding).
|
|
- window: begin with *p_open == false could return false.
|
|
- window: get size/pos helpers given names (see discussion in #249)
|
|
- window: a collapsed window can be stuck behind the main menu bar?
|
|
- window: when window is very small, prioritize resize button over close button.
|
|
- window: detect extra End() call that pop the "Debug" window out and assert at End() call site instead of at end of frame.
|
|
- window: increase minimum size of a window with menus or fix the menu rendering so that it doesn't look odd.
|
|
- window: double-clicking on title bar to minimize isn't consistent, perhaps move to single-click on left-most collapse icon?
|
|
- window: expose contents size. (#1045)
|
|
- window: using SetWindowPos() inside Begin() and moving the window with the mouse reacts a very ugly glitch. We should just defer the SetWindowPos() call.
|
|
- window: GetWindowSize() returns (0,0) when not calculated? (#1045)
|
|
- window: investigate better auto-positioning for new windows.
|
|
- window: top most window flag? (#2574)
|
|
- window/opt: freeze window flag: if not focused/hovered, return false, render with previous ImDrawList. and/or reduce refresh rate. -> this may require enforcing that it is illegal to submit contents if Begin returns false.
|
|
- window/child: the first draw command of a child window could be moved into the current draw command of the parent window (unless child+tooltip?).
|
|
- window/child: border could be emitted in parent as well.
|
|
- window/child: allow SetNextWindowContentSize() to work on child windows.
|
|
- window/clipping: some form of clipping when DisplaySize (or corresponding viewport) is zero.
|
|
- window/tab: add a way to signify that a window or docked window requires attention (e.g. blinking title bar).
|
|
! scrolling: exposing horizontal scrolling with Shift+Wheel even when scrollbar is disabled expose lots of issues (#2424, #1463)
|
|
- scrolling: while holding down a scrollbar, try to keep the same contents visible (at least while not moving mouse)
|
|
- scrolling: allow immediately effective change of scroll after Begin() if we haven't appended items yet.
|
|
- scrolling/clipping: separator on the initial position of a window is not visible (cursorpos.y <= clippos.y). (2017-08-20: can't repro)
|
|
- scrolling/style: shadows on scrollable areas to denote that there is more contents
|
|
|
|
- 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.
|
|
|
|
- widgets: display mode: widget-label, label-widget (aligned on column or using fixed size), label-newline-tab-widget etc. (#395)
|
|
- widgets: clean up widgets internal toward exposing everything and stabilizing imgui_internals.h.
|
|
- widgets: add visuals for Disabled/ReadOnly mode and expose publicly (#211)
|
|
- widgets: add always-allow-overlap mode. This should perhaps be the default? one problem is that highlight after mouse-wheel scrolling gets deferred, makes scrolling more flickery.
|
|
- widgets: start exposing PushItemFlag() and ImGuiItemFlags
|
|
- widgets: alignment options in style (e.g. center Selectable, Right-Align within Button, etc.) #1260
|
|
- widgets: activate by identifier (trigger button, focus given id)
|
|
- widgets: a way to represent "mixed" values, so e.g. all values replaced with *, including check-boxes, colors, etc. with support for multi-components widgets (e.g. SliderFloat3, make only "Y" mixed) (#2644)
|
|
- widgets: selectable: generic BeginSelectable()/EndSelectable() mechanism.
|
|
- widgets: selectable: a way to visualize partial/mixed selection (e.g. parent tree node has children with mixed selection)
|
|
- widgets: checkbox: checkbox with custom glyph inside frame.
|
|
- widgets: coloredit: keep reporting as active when picker is on?
|
|
- widgets: group/scalarn functions: expose more per-component information. e.g. store NextItemData.ComponentIdx set by scalarn function, groups can expose them back somehow.
|
|
|
|
- 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.
|
|
|
|
- layout: helper or a way to express ImGui::SameLine(ImGui::GetCursorStartPos().x + ImGui::CalcItemWidth() + ImGui::GetStyle().ItemInnerSpacing.x); in a simpler manner.
|
|
- layout: generalization of the above: a concept equivalent to word processor ruler tab stop ~ mini columns (position in X, no clipping implied) (vaguely relate to #267, #395, also what is used internally for menu items)
|
|
- layout: horizontal layout helper (#97)
|
|
- layout: horizontal flow until no space left (#404)
|
|
- layout: more generic alignment state (left/right/centered) for single items?
|
|
- layout: clean up the InputFloatN/SliderFloatN/ColorEdit4 layout code. item width should include frame padding.
|
|
- layout: vertical alignment of mixed height items (e.g. buttons) within a same line (#1284)
|
|
- layout: null layout mode were items are not rendered but user can query GetItemRectMin()/Max/Size.
|
|
- layout: (R&D) local multi-pass layout mode.
|
|
- layout: (R&D) bind authored layout data (created by an off-line tool), items fetch their pos/size at submission, self-optimize data structures to stable linear access.
|
|
|
|
- group: BeginGroup() needs a border option. (~#1496)
|
|
- group: IsHovered() after EndGroup() covers whole aabb rather than the intersection of individual items. Is that desirable?
|
|
- group: merge deactivation/activation within same group (fwd WasEdited flag). (#2550)
|
|
|
|
- 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)
|
|
|
|
- separator: expose flags (#759)
|
|
- separator: width, thickness, centering (#1643)
|
|
- splitter: formalize the splitter idiom into an official api (we want to handle n-way split) (#319)
|
|
|
|
- docking: merge docking branch (#2109)
|
|
- docking: B: ordering currently held in tab bar should be implicitly held by windows themselves (also see #2304)
|
|
- docking: B- tab bar: the order/focus restoring code could be part of TabBar and not DockNode? (#8)
|
|
- docking: B~ rework code to be able to lazily create tab bar instance in a single place. The _Unsorted tab flag could be replacing a trailing-counter in DockNode?
|
|
- docking: B~ fully track windows/settings reference in dock nodes. perhaps find a representation that allows facilitate use of dock builder functions.
|
|
- docking: B~ Unreal style document system (requires low-level controls of dockspace serialization fork/copy/delete). this is mostly working but the DockBuilderXXX api are not exposed/finished.
|
|
- docking: B: when docking outer, perform size locking on neighbors nodes the same way we do it with splitters, so other nodes are not resized.
|
|
- docking: B~ central node resizing behavior incorrect.
|
|
- docking: B: changing title font/style per-window is not supported as dock nodes are created in NewFrame.
|
|
- docking: B- dock node inside its own viewports creates 1 temporary viewport per window on startup before ditching them (doesn't affect the user nor request platform windows to be created, but unnecessary)
|
|
- docking: B- resize sibling locking behavior may be less desirable if we merged same-axis sibling in a same node level?
|
|
- docking: B- single visible node part of a hidden split hierarchy (OnlyNodeWithWindows != NULL) should show a normal title bar (not a tab bar)
|
|
- docking: B~ SetNextWindowDock() calls (with conditional) -> defer everything to DockContextUpdate (repro: Documents->[X]Windows->Dock 1 elsewhere->Click Redock All
|
|
- docking: B~ tidy up tab list popup buttons features (available with manual tab-bar, see ImGuiTabBarFlags_NoTabListPopupButton code, not used by docking nodes)
|
|
- docking: B- SetNextWindowDockId(0) with a second Begin() in the frame will asserts
|
|
- docking: B: resize grip drawn in host window typically appears under scrollbar.
|
|
- docking: B: resize grip auto-resize on multiple node hierarchy doesn't make much sense or should be improved?
|
|
- docking: B- SetNextWindowFocus() doesn't seem to apply if the window is hidden this frame, need repro (#4)
|
|
- docking: B- resizing a dock tree small currently has glitches (overlapping collapse and close button, etc.)
|
|
- docking: B- dpi: look at interaction with the hi-dpi and multi-dpi stuff.
|
|
- docking: B- tab bar: appearing on first frame with a dumb layout would do less harm that not appearing? (when behind dynamic branch) or store titles + render in EndTabBar()
|
|
- docking: B- tab bar: make selected tab always shows its full title?
|
|
- docking: B- hide close button on single tab bar?
|
|
- docking: B- nav: design interactions so nav controls can dock/undock
|
|
- docking: B- dockspace: flag to lock the dock tree and/or sizes (ImGuiDockNodeFlags_Locked?)
|
|
- docking: B- reintroduce collapsing a floating dock node. also collapsing a docked dock node!
|
|
- docking: B- allow dragging a non-floating dock node by clicking on the title-bar-looking section (not just the collapse/menu button)
|
|
- docking: B- option to remember undocked window size? (instead of keeping their docked size) (relate to #2104)
|
|
- docking: C- nav: CTRL+TAB highlighting tabs shows the mismatch between focus-stack and tab-order (not visible in VS because it doesn't highlight the tabs)
|
|
- docking: C- after a dock/undock, the Scrollbar Status update in Begin() should use an updated e.g. size_y_for_scrollbars to avoid a 1 frame scrollbar flicker.
|
|
|
|
- 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)
|
|
|
|
- image/image button: misalignment on padded/bordered button?
|
|
- image/image button: parameters are confusing, image() has tint_col,border_col whereas imagebutton() has bg_col/tint_col. Even thou they are different parameters ordering could be more consistent. can we fix that?
|
|
- image button: not taking an explicit id can be problematic. (#2464, #1390)
|
|
- button: provide a button that looks framed. (?)
|
|
- slider/drag: ctrl+click when format doesn't include a % character.. disable? display underlying value in default format? (see TempInputTextScalar)
|
|
- slider: allow using the [-]/[+] buttons used by InputFloat()/InputInt()
|
|
- slider: initial absolute click is imprecise. change to relative movement slider (same as scrollbar). (#1946)
|
|
- slider: add dragging-based widgets to edit values with mouse (on 2 axises), saving screen real-estate.
|
|
- slider: tint background based on value (e.g. v_min -> v_max, or use 0.0f either side of the sign)
|
|
- slider: relative dragging? + precision dragging
|
|
- slider: step option (#1183)
|
|
- slider style: fill % of the bar instead of positioning a drag.
|
|
- knob: rotating knob widget (#942)
|
|
- drag float: power/logarithmic slider and drags are weird. (#1316)
|
|
- drag float: up/down axis
|
|
- drag float: power != 0.0f with current value being outside the range keeps the value stuck.
|
|
- drag float: added leeway on edge (e.g. a few invisible steps past the clamp limits)
|
|
|
|
- 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)
|
|
|
|
!- popups/menus: clarify usage of popups id, how MenuItem/Selectable closing parent popups affects the ID, etc. this is quite fishy needs improvement! (#331, #402)
|
|
- popups/modal: make modal title bar blink when trying to click outside the modal
|
|
- popups: reopening context menu at new position should be the behavior by default? (equivalent to internal OpenPopupEx() with reopen_existing=true) (~#1497)
|
|
- popups: if the popup functions took explicit ImGuiID it would allow the user to manage the scope of those ID. (#331)
|
|
- popups: clicking outside (to close popup) and holding shouldn't drag window below.
|
|
- popups: add variant using global identifier similar to Begin/End (#402)
|
|
- popups: border options. richer api like BeginChild() perhaps? (#197)
|
|
- 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: tooltip that doesn't fit in entire screen seems to lose their "last preferred direction" and may teleport when moving mouse.
|
|
- tooltip: allow to set the width of a tooltip to allow TextWrapped() etc. while keeping the height automatic.
|
|
- tooltip: tooltips with delay timers? or general timer policy? (instantaneous vs timed): IsItemHovered() with timer + implicit aabb-id for items with no ID. (#1485)
|
|
|
|
- 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).
|
|
|
|
- text: selectable text (for copy) as a generic feature (ItemFlags?)
|
|
- text: proper alignment options in imgui_internal.h
|
|
- text: it's currently impossible to have a window title with "##". perhaps an official workaround would be nice. \ style inhibitor? non-visible ascii code to insert between #?
|
|
- text: provided a framed text helper, e.g. https://pastebin.com/1Laxy8bT
|
|
- text: refactor TextUnformatted (or underlying function) to more explicitly request if we need width measurement or not
|
|
- text link/url button: underlined. should api expose an ID or use text contents as ID? which colors enum to use?
|
|
- text/wrapped: should be a more first-class citizen, e.g. wrapped text within a Selectable with known width
|
|
- text/wrapped: figure out better way to use TextWrapped() in an always auto-resize context (tooltip, etc.) (#249)
|
|
|
|
- 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)
|
|
- settings/persistence: helpers to make TreeNodeBehavior persist (even during dev!) - may need to store some semantic and/or data type in ImGuiStoragePair
|
|
|
|
- style: better default styles. (#707)
|
|
- style: add a highlighted text color (for headers, etc.)
|
|
- style: border types: out-screen, in-screen, etc. (#447)
|
|
- style: add window shadow (fading away from the window. Paint-style calculation of vertices alpha after drawlist would be easier)
|
|
- style: a concept of "compact style" that the end-user can easily rely on (e.g. PushStyleCompact()?) that maps to other settings? avoid implementing duplicate helpers such as SmallCheckbox(), etc.
|
|
- style: try to make PushStyleVar() more robust to incorrect parameters (to be more friendly to edit & continues situation).
|
|
- style: global scale setting.
|
|
- style: FramePadding could be different for up vs down (#584)
|
|
- style: WindowPadding needs to be EVEN as the 0.5 multiplier used on this value probably have a subtle effect on clip rectangle
|
|
- style: have a more global HSV setter (e.g. alter hue on all elements). consider replacing active/hovered by offset in HSV space? (#438, #707, #1223)
|
|
- style: gradients fill (#1223) ~ 2 bg colors for each fill? tricky with rounded shapes and using textures for corners.
|
|
- style editor: color child window height expressed in multiple of line height.
|
|
|
|
- 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"?)
|
|
|
|
- node/graph editor (#306)
|
|
- pie menus patterns (#434)
|
|
- markup: simple markup language for color change? (#902)
|
|
|
|
- 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?
|
|
|
|
- nav: some features such as PageUp/Down/Home/End should probably work without ImGuiConfigFlags_NavEnableKeyboard? (where do we draw the line?)
|
|
- nav: configuration flag to disable global shortcuts (currently only CTRL-Tab) ?
|
|
- nav: Home/End behavior when navigable item is not fully visible at the edge of scrolling? should be backtrack to keep item into view?
|
|
- nav: NavScrollToBringItemIntoView() with item bigger than view should focus top-right? Repro: using Nav in "About Window"
|
|
- nav: wrap around logic to allow e.g. grid based layout (pressing NavRight on the right-most element would go to the next row, etc.). see internal's NavMoveRequestTryWrapping().
|
|
- nav: patterns to make it possible for arrows key to update selection
|
|
- nav: restore/find nearest NavId when current one disappear (e.g. pressed a button that disappear, or perhaps auto restoring when current button change name)
|
|
- nav: SetItemDefaultFocus() level of priority, so widget like Selectable when inside a popup could claim a low-priority default focus on the first selected iem
|
|
- nav: ESC within a menu of a child window seems to exit the child window.
|
|
- nav: NavFlattened: ESC on a flattened child should select something.
|
|
- nav: NavFlattened: broken: in typical usage scenario, the items of a fully clipped child are currently not considered to enter into a NavFlattened child.
|
|
- nav: NavFlattened: init request doesn't select items that are part of a NavFlattened child
|
|
- nav: NavFlattened: cannot access menu-bar of a flattened child window with Alt/menu key (not a very common use case..).
|
|
- nav: Left within a tree node block as a fallback (ImGuiTreeNodeFlags_NavLeftJumpsBackHere by default?)
|
|
- nav/menus: pressing left-right on a vertically clipped menu bar tends to jump to the collapse/close buttons.
|
|
- nav/menus: allow pressing Menu to leave a sub-menu.
|
|
- nav/menus: a way to access the main menu bar with Alt? (currently needs CTRL+TAB)
|
|
- nav/menus: when using the main menu bar, even though we restore focus after, the underlying window loses its title bar highlight during menu manipulation. could we prevent it?
|
|
- nav/menus: main menu bar currently cannot restore a NULL focus. Could save NavWindow at the time of being focused, similarly to what popup do?
|
|
- nav: simulate right-click or context activation? (SHIFT+F10)
|
|
- nav: tabs should go through most/all widgets (in submission order?).
|
|
- nav: when CTRL-Tab/windowing is active, the HoveredWindow detection doesn't take account of the window display re-ordering.
|
|
- nav: esc/enter default behavior for popups, e.g. be able to mark an "ok" or "cancel" button that would get triggered by those keys.
|
|
- nav: when activating a button that changes label (without a static ID) or disappear, can we somehow automatically recover into a nearest highlight item?
|
|
- nav: there's currently no way to completely clear focus with the keyboard. depending on patterns used by the application to dispatch inputs, it may be desirable.
|
|
- focus: preserve ActiveId/focus stack state, e.g. when opening a menu and close it, previously selected InputText() focus gets restored (#622)
|
|
- focus: SetKeyboardFocusHere() on with >= 0 offset could be done on same frame (else latch and modulate on beginning of next frame)
|
|
- focus: unable to use SetKeyboardFocusHere() on clipped widgets. (#787)
|
|
|
|
- viewport: make it possible to have no main/hosting viewport
|
|
- viewport: We set ImGuiViewportFlags_NoFocusOnAppearing in a way that is required for GLFW/SDL binding, but could be handled better without
|
|
on a custom e.g. Win32 bindings. It prevents newly dragged-out viewports from taking the focus, which makes ALT+F4 more ambiguous.
|
|
- viewport: not focusing newly undocked viewport means clicking back on previous one doesn't bring OS window to front.
|
|
- viewport: with platform decoration enabled, platform may force constraint (e.g. minimum size)
|
|
- viewport: use getfocus/setfocus api to synchronize imgui<>platform focus better (e.g imgui-side ctrl-tab can focus os window, OS initial setup and alt-tab can focus imgui window etc.)
|
|
- viewport: store per-viewport/monitor DPI in .ini file so an application reload or main window changing DPI on reload can be properly patched for.
|
|
- viewport: implicit/fallback Debug window can hog a zombie viewport (harmless, noisy?) > could at least clear out the reference on a per session basis?
|
|
- viewport: need to clarify how to use GetMousePos() from a user point of view.
|
|
- platform: glfw: no support for ImGuiBackendFlags_HasMouseHoveredViewport.
|
|
- platform: sdl: no support for ImGuiBackendFlags_HasMouseHoveredViewport. maybe we could use SDL_GetMouseFocus() / SDL_WINDOW_MOUSE_FOCUS if imgui could fallback on its heuristic when NoInputs is set
|
|
- platform: sdl: no refresh of monitor/display (SDL doesn't seem to have an event for it).
|
|
- platform: sdl: multi-viewport + minimized window seems to break mouse wheel events (at least under Win32).
|
|
|
|
- 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)
|
|
|
|
- demo: find a way to demonstrate textures in the examples application, as it such a common issue for new users.
|
|
- 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
|
|
- examples: window minimize, maximize (#583)
|
|
- examples: provide a zero frame-rate/idle example.
|
|
- examples: apple: example_apple should be using modern GL3.
|
|
- examples: glfw: could go idle when minimized? if (glfwGetWindowAttrib(window, GLFW_ICONIFIED)) { glfwWaitEvents(); continue; } // issue: DeltaTime will be super high on resume, perhaps provide a way to let impl know (#440)
|
|
- examples: opengl: rename imgui_impl_opengl2 to impl_opengl_legacy and imgui_impl_opengl3 to imgui_impl_opengl? (#1900)
|
|
- examples: opengl: could use a single vertex buffer and glBufferSubData for uploads?
|
|
- examples: opengl: explicitly disable GL_STENCIL_TEST in bindings.
|
|
- examples: vulkan: viewport: support for synchronized swapping of multiple swap chains.
|
|
- optimization: replace vsnprintf with stb_printf? or enable the defines/infrastructure to allow it (#1038)
|
|
- optimization: add clipping for multi-component widgets (SliderFloatX, ColorEditX, etc.). one problem is that nav branch can't easily clip parent group when there is a move request.
|
|
- optimization: add a flag to disable most of rendering, for the case where the user expect to skip it (#335)
|
|
- optimization: fully covered window (covered by another with non-translucent bg + WindowRounding worth of padding) may want to clip rendering.
|
|
- optimization: use another hash function than crc32, e.g. FNV1a
|
|
- optimization/render: merge command-lists with same clip-rect into one even if they aren't sequential? (as long as in-between clip rectangle don't overlap)?
|
|
- optimization: turn some the various stack vectors into statically-sized arrays
|