Merge branch 'master' into docking
# Conflicts: # imgui.cpp # imgui.h
This commit is contained in:
commit
09c9bf2edb
@ -100,8 +100,11 @@ Other changes:
|
|||||||
Breaking Changes:
|
Breaking Changes:
|
||||||
|
|
||||||
- Removed io.DisplayVisibleMin/DisplayVisibleMax (which were marked obsolete and removed from viewport/docking branch already).
|
- Removed io.DisplayVisibleMin/DisplayVisibleMax (which were marked obsolete and removed from viewport/docking branch already).
|
||||||
|
- Made it illegal/assert when io.DisplayTime == 0.0f (with an exception for the first frame).
|
||||||
|
If for some reason your time step calculation gives you a zero value, replace it with a dummy small value!
|
||||||
|
|
||||||
Other Changes:
|
Other Changes:
|
||||||
|
|
||||||
- Added .editorconfig file for text editors to standardize using spaces. (#2038) [@kudaba]
|
- Added .editorconfig file for text editors to standardize using spaces. (#2038) [@kudaba]
|
||||||
- ImDrawData: Added FramebufferScale field (currently a copy of the value from io.DisplayFramebufferScale).
|
- ImDrawData: Added FramebufferScale field (currently a copy of the value from io.DisplayFramebufferScale).
|
||||||
This is to allow render functions being written without pulling any data from ImGuiIO, allowing incoming
|
This is to allow render functions being written without pulling any data from ImGuiIO, allowing incoming
|
||||||
@ -120,13 +123,20 @@ Other Changes:
|
|||||||
- Tabs: Removed ImGuiTabBarFlags_NoTabListPopupButton which was available in 1.67 but actually had zero use.
|
- Tabs: Removed ImGuiTabBarFlags_NoTabListPopupButton which was available in 1.67 but actually had zero use.
|
||||||
- Tabs: Fixed a minor clipping glitch when changing style's FramePadding from frame to frame.
|
- Tabs: Fixed a minor clipping glitch when changing style's FramePadding from frame to frame.
|
||||||
- Tabs: Fixed border (when enabled) so it is aligned correctly mid-pixel and appears as bright as other borders.
|
- Tabs: Fixed border (when enabled) so it is aligned correctly mid-pixel and appears as bright as other borders.
|
||||||
|
- Style, Selectable: Added ImGuiStyle::SelectableTextAlign and ImGuiStyleVar_SelectableTextAlign. (#2347) [@haldean]
|
||||||
- Menus: Tweaked horizontal overlap between parent and child menu (to help convey relative depth)
|
- Menus: Tweaked horizontal overlap between parent and child menu (to help convey relative depth)
|
||||||
from using style.ItemSpacing.x to style.ItemInnerSpacing.x, the later being expected to be smaller. (#1086)
|
from using style.ItemSpacing.x to style.ItemInnerSpacing.x, the later being expected to be smaller. (#1086)
|
||||||
- RadioButton: Fixed label horizontal alignment to precisely match Checkbox().
|
- RadioButton: Fixed label horizontal alignment to precisely match Checkbox().
|
||||||
- Window: When resizing from an edge, the border is more visible and better follow the rounded corners.
|
- Window: When resizing from an edge, the border is more visible and better follow the rounded corners.
|
||||||
- Window: Fixed initial width of collapsed windows not taking account of contents width (broken in 1.67). (#2336, #176)
|
- Window: Fixed initial width of collapsed windows not taking account of contents width (broken in 1.67). (#2336, #176)
|
||||||
|
- Scrollbar: Fade out and disable interaction when too small, in order to facilitate using the resize grab on very
|
||||||
|
small window, as well as reducing visual noise/overlap.
|
||||||
- ListBox: Better optimized when clipped / non-visible.
|
- ListBox: Better optimized when clipped / non-visible.
|
||||||
- InputTextMultiline: Better optimized when clipped / non-visible.
|
- InputTextMultiline: Better optimized when clipped / non-visible.
|
||||||
|
- Font: Fixed high-level ImGui::CalcTextSize() used by most widgets from erroneously subtracting 1.0f*scale to
|
||||||
|
calculated text width. Among noticeable side-effects, it would make sequences of repeated Text/SameLine calls
|
||||||
|
not align the same as a single call, and create mismatch between high-level size calculation and those performed
|
||||||
|
with the lower-level ImDrawList api. (#792) [@SlNPacifist]
|
||||||
- ImDrawList: Fixed AddCircle(), AddCircleFilled() angle step being off, which was visible when drawing a "circle"
|
- ImDrawList: Fixed AddCircle(), AddCircleFilled() angle step being off, which was visible when drawing a "circle"
|
||||||
with a small number of segments (e.g. an hexagon). (#2287) [@baktery]
|
with a small number of segments (e.g. an hexagon). (#2287) [@baktery]
|
||||||
- ImGuiTextBuffer: Added append() function (unformatted).
|
- ImGuiTextBuffer: Added append() function (unformatted).
|
||||||
@ -134,6 +144,7 @@ Other Changes:
|
|||||||
- ImFontAtlas: FreeType: Added support for imgui allocators + custom FreeType only SetAllocatorFunctions. (#2285) [@Vuhdo]
|
- ImFontAtlas: FreeType: Added support for imgui allocators + custom FreeType only SetAllocatorFunctions. (#2285) [@Vuhdo]
|
||||||
- ImFontAtlas: FreeType: Fixed using imgui_freetype.cpp in unity builds. (#2302)
|
- ImFontAtlas: FreeType: Fixed using imgui_freetype.cpp in unity builds. (#2302)
|
||||||
- Demo: Fixed "Log" demo not initializing properly, leading to the first line not showing before a Clear. (#2318) [@bluescan]
|
- Demo: Fixed "Log" demo not initializing properly, leading to the first line not showing before a Clear. (#2318) [@bluescan]
|
||||||
|
- Demo: Added "Auto-scroll" option in Log/Console demos. (#2300) [@nicolasnoble, @ocornut]
|
||||||
- Examples: Metal, OpenGL2, OpenGL3: Fixed offsetting of clipping rectangle with ImDrawData::DisplayPos != (0,0) when
|
- Examples: Metal, OpenGL2, OpenGL3: Fixed offsetting of clipping rectangle with ImDrawData::DisplayPos != (0,0) when
|
||||||
the display frame-buffer scale scale is not (1,1). While this doesn't make a difference when using master branch,
|
the display frame-buffer scale scale is not (1,1). While this doesn't make a difference when using master branch,
|
||||||
this is effectively fixing support for multi-viewport with Mac Retina Displays on those examples. (#2306) [@rasky, @ocornut]
|
this is effectively fixing support for multi-viewport with Mac Retina Displays on those examples. (#2306) [@rasky, @ocornut]
|
||||||
@ -341,29 +352,36 @@ Changes:
|
|||||||
|
|
||||||
Breaking Changes:
|
Breaking Changes:
|
||||||
|
|
||||||
- Style: Renamed ImGuiCol_ModalWindowDarkening to ImGuiCol_ModalWindowDimBg for consistency with other features. Kept redirection enum (will obsolete).
|
- Style: Renamed ImGuiCol_ModalWindowDarkening to ImGuiCol_ModalWindowDimBg for consistency with other features.
|
||||||
|
Kept redirection enum (will obsolete).
|
||||||
- Changed ImGui::GetTime() return value from float to double to avoid accumulating floating point imprecision over time.
|
- Changed ImGui::GetTime() return value from float to double to avoid accumulating floating point imprecision over time.
|
||||||
- Removed per-window ImGuiWindowFlags_ResizeFromAnySide Beta flag in favor `io.ConfigResizeWindowsFromEdges=true` to enable the feature globally. (#1495)
|
- Removed per-window ImGuiWindowFlags_ResizeFromAnySide Beta flag in favor `io.ConfigResizeWindowsFromEdges=true` to
|
||||||
|
enable the feature globally. (#1495)
|
||||||
The feature is not currently enabled by default because it is not satisfying enough, but will eventually be.
|
The feature is not currently enabled by default because it is not satisfying enough, but will eventually be.
|
||||||
- InputText: Renamed ImGuiTextEditCallback to ImGuiInputTextCallback, ImGuiTextEditCallbackData to ImGuiInputTextCallbackData for consistency.
|
- InputText: Renamed ImGuiTextEditCallback to ImGuiInputTextCallback, ImGuiTextEditCallbackData to ImGuiInputTextCallbackData
|
||||||
Kept redirection types (will obsolete).
|
for consistency. Kept redirection types (will obsolete).
|
||||||
- InputText: Removed ImGuiTextEditCallbackData::ReadOnly since it is a duplication of (ImGuiTextEditCallbackData::Flags & ImGuiInputTextFlags_ReadOnly).
|
- InputText: Removed ImGuiTextEditCallbackData::ReadOnly because it is a duplication of (::Flags & ImGuiInputTextFlags_ReadOnly).
|
||||||
- Renamed IsItemDeactivatedAfterChange() to IsItemDeactivatedAfterEdit() for consistency with new IsItemEdited() API.
|
- Renamed IsItemDeactivatedAfterChange() to IsItemDeactivatedAfterEdit() for consistency with new IsItemEdited() API.
|
||||||
Kept redirection function (will obsolete soonish as IsItemDeactivatedAfterChange() is very recent).
|
Kept redirection function (will obsolete soonish as IsItemDeactivatedAfterChange() is very recent).
|
||||||
- Renamed io.OptCursorBlink to io.ConfigCursorBlink [-> io.ConfigInputTextCursorBlink in 1.65], io.OptMacOSXBehaviors to io.ConfigMacOSXBehaviors for consistency. (#1427, #473)
|
- Renamed io.OptCursorBlink to io.ConfigCursorBlink [-> io.ConfigInputTextCursorBlink in 1.65], io.OptMacOSXBehaviors to
|
||||||
|
io.ConfigMacOSXBehaviors for consistency. (#1427, #473)
|
||||||
- Removed obsolete redirection functions: CollapsingHeader() variation with 2 bools - marked obsolete in v1.49, May 2016.
|
- Removed obsolete redirection functions: CollapsingHeader() variation with 2 bools - marked obsolete in v1.49, May 2016.
|
||||||
|
|
||||||
Other Changes:
|
Other Changes:
|
||||||
|
|
||||||
- ArrowButton: Fixed to honor PushButtonRepeat() setting (and internals' ImGuiItemFlags_ButtonRepeat).
|
- ArrowButton: Fixed to honor PushButtonRepeat() setting (and internals' ImGuiItemFlags_ButtonRepeat).
|
||||||
- ArrowButton: Setup current line text baseline so that ArrowButton() + SameLine() + Text() are aligned properly.
|
- ArrowButton: Setup current line text baseline so that ArrowButton() + SameLine() + Text() are aligned properly.
|
||||||
- Nav: Added a CTRL+TAB window list and changed the highlight system accordingly. The change is motivated by upcoming Docking features. (#787)
|
- Nav: Added a CTRL+TAB window list and changed the highlight system accordingly. The change is motivated by upcoming
|
||||||
|
Docking features. (#787)
|
||||||
- Nav: Made CTRL+TAB skip menus + skip the current navigation window if is has the ImGuiWindow_NoNavFocus set. (#787)
|
- Nav: Made CTRL+TAB skip menus + skip the current navigation window if is has the ImGuiWindow_NoNavFocus set. (#787)
|
||||||
While it was previously possible, you won't be able to CTRL-TAB out and immediately back in a window with the ImGuiWindow_NoNavFocus flag.
|
While it was previously possible, you won't be able to CTRL-TAB out and immediately back in a window with the
|
||||||
|
ImGuiWindow_NoNavFocus flag.
|
||||||
- Window: Allow menu and popups windows from ignoring the style.WindowMinSize values so short menus/popups are not padded. (#1909)
|
- Window: Allow menu and popups windows from ignoring the style.WindowMinSize values so short menus/popups are not padded. (#1909)
|
||||||
- Window: Added global io.ConfigResizeWindowsFromEdges option to enable resizing windows from their edges and from the lower-left corner. (#1495)
|
- Window: Added global io.ConfigResizeWindowsFromEdges option to enable resizing windows from their edges and from
|
||||||
|
the lower-left corner. (#1495)
|
||||||
- Window: Collapse button shows hovering highlight + clicking and dragging on it allows to drag the window as well.
|
- Window: Collapse button shows hovering highlight + clicking and dragging on it allows to drag the window as well.
|
||||||
- Added IsItemEdited() to query if the last item modified its value (or was pressed). This is equivalent to the bool returned by most widgets.
|
- Added IsItemEdited() to query if the last item modified its value (or was pressed). This is equivalent to the bool
|
||||||
|
returned by most widgets.
|
||||||
It is useful in some situation e.g. using InputText() with ImGuiInputTextFlags_EnterReturnsTrue. (#2034)
|
It is useful in some situation e.g. using InputText() with ImGuiInputTextFlags_EnterReturnsTrue. (#2034)
|
||||||
- InputText: Added support for buffer size/capacity changes via the ImGuiInputTextFlags_CallbackResize flag. (#2006, #1443, #1008).
|
- InputText: Added support for buffer size/capacity changes via the ImGuiInputTextFlags_CallbackResize flag. (#2006, #1443, #1008).
|
||||||
- InputText: Fixed not tracking the cursor horizontally when modifying the text buffer through a callback.
|
- InputText: Fixed not tracking the cursor horizontally when modifying the text buffer through a callback.
|
||||||
@ -426,11 +444,14 @@ Other Changes:
|
|||||||
|
|
||||||
Breaking Changes:
|
Breaking Changes:
|
||||||
|
|
||||||
- TreeNodeEx(): The helper ImGuiTreeNodeFlags_CollapsingHeader flag now include ImGuiTreeNodeFlags_NoTreePushOnOpen. The flag was already set by CollapsingHeader().
|
- TreeNodeEx(): The helper ImGuiTreeNodeFlags_CollapsingHeader flag now include ImGuiTreeNodeFlags_NoTreePushOnOpen.
|
||||||
The only difference is if you were using TreeNodeEx() manually with ImGuiTreeNodeFlags_CollapsingHeader and without ImGuiTreeNodeFlags_NoTreePushOnOpen.
|
The flag was already set by CollapsingHeader().
|
||||||
In this case you can remove the ImGuiTreeNodeFlags_NoTreePushOnOpen flag from your call (ImGuiTreeNodeFlags_CollapsingHeader & ~ImGuiTreeNodeFlags_NoTreePushOnOpen). (#1864)
|
The only difference is if you were using TreeNodeEx() manually with ImGuiTreeNodeFlags_CollapsingHeader and without
|
||||||
|
ImGuiTreeNodeFlags_NoTreePushOnOpen. In this case you can remove the ImGuiTreeNodeFlags_NoTreePushOnOpen flag from
|
||||||
|
your call (ImGuiTreeNodeFlags_CollapsingHeader & ~ImGuiTreeNodeFlags_NoTreePushOnOpen). (#1864)
|
||||||
This also apply if you were using internal's TreeNodeBehavior() with the ImGuiTreeNodeFlags_CollapsingHeader flag directly.
|
This also apply if you were using internal's TreeNodeBehavior() with the ImGuiTreeNodeFlags_CollapsingHeader flag directly.
|
||||||
- ImFontAtlas: Renamed GetGlyphRangesChinese() to GetGlyphRangesChineseFull() to distinguish new smaller variants and discourage using the full set. (#1859)
|
- ImFontAtlas: Renamed GetGlyphRangesChinese() to GetGlyphRangesChineseFull() to distinguish new smaller variants and
|
||||||
|
discourage using the full set. (#1859)
|
||||||
|
|
||||||
Other Changes:
|
Other Changes:
|
||||||
|
|
||||||
@ -443,12 +464,13 @@ Other Changes:
|
|||||||
before: imgui_impl_glfw_vulkan.cpp --> after: imgui_impl_glfw.cpp + imgui_impl_vulkan.cpp
|
before: imgui_impl_glfw_vulkan.cpp --> after: imgui_impl_glfw.cpp + imgui_impl_vulkan.cpp
|
||||||
before: imgui_impl_sdl_gl3.cpp --> after: imgui_impl_sdl2.cpp + imgui_impl_opengl2.cpp
|
before: imgui_impl_sdl_gl3.cpp --> after: imgui_impl_sdl2.cpp + imgui_impl_opengl2.cpp
|
||||||
before: imgui_impl_sdl_gl3.cpp --> after: imgui_impl_sdl2.cpp + imgui_impl_opengl3.cpp etc.
|
before: imgui_impl_sdl_gl3.cpp --> after: imgui_impl_sdl2.cpp + imgui_impl_opengl3.cpp etc.
|
||||||
- The idea is what we can now easily combine and maintain back-ends and reduce code redundancy. Individual files are smaller and more reusable.
|
- The idea is what we can now easily combine and maintain back-ends and reduce code redundancy. Individual files are
|
||||||
Integration of imgui into a new/custom engine may also be easier as there is less overlap between "windowing / inputs" and "rendering" code,
|
smaller and more reusable. Integration of imgui into a new/custom engine may also be easier as there is less overlap
|
||||||
so you may study or grab one half of the code and not the other.
|
between "windowing / inputs" and "rendering" code, so you may study or grab one half of the code and not the other.
|
||||||
- This change was motivated by the fact that adding support for the upcoming multi-viewport feature requires more work from the Platform and Renderer
|
- This change was motivated by the fact that adding support for the upcoming multi-viewport feature requires more work
|
||||||
back-ends, and the amount of redundancy across files was becoming too difficult to maintain. If you use default back-ends, you'll benefit from an
|
from the Platform and Renderer back-ends, and the amount of redundancy across files was becoming too difficult to
|
||||||
easy update path to support multi-viewports later (for future ImGui 1.7x).
|
maintain. If you use default back-ends, you'll benefit from an easy update path to support multi-viewports later
|
||||||
|
(for future ImGui 1.7x).
|
||||||
- This is not strictly a breaking change if you keep your old bindings, but when you'll want to fully update your bindings,
|
- This is not strictly a breaking change if you keep your old bindings, but when you'll want to fully update your bindings,
|
||||||
expect to have to reshuffle a few things.
|
expect to have to reshuffle a few things.
|
||||||
- Each example still has its own main.cpp which you may refer you to understand how to initialize and glue everything together.
|
- Each example still has its own main.cpp which you may refer you to understand how to initialize and glue everything together.
|
||||||
@ -461,26 +483,36 @@ Other Changes:
|
|||||||
- Nav: Added support for PageUp/PageDown (explorer-style: first aim at bottom/top most item, when scroll a page worth of contents). (#787)
|
- Nav: Added support for PageUp/PageDown (explorer-style: first aim at bottom/top most item, when scroll a page worth of contents). (#787)
|
||||||
- Nav: To keep the navigated item in view we also attempt to scroll the parent window as well as the current window. (#787)
|
- Nav: To keep the navigated item in view we also attempt to scroll the parent window as well as the current window. (#787)
|
||||||
- ColorEdit3, ColorEdit4, ColorButton: Added ImGuiColorEditFlags_NoDragDrop flag to disable ColorEditX as drag target and ColorButton as drag source. (#1826)
|
- ColorEdit3, ColorEdit4, ColorButton: Added ImGuiColorEditFlags_NoDragDrop flag to disable ColorEditX as drag target and ColorButton as drag source. (#1826)
|
||||||
- BeginDragDropSource(): Offset tooltip position so it is off the mouse cursor, but also closer to it than regular tooltips, and not clamped by viewport. (#1739)
|
- BeginDragDropSource(): Offset tooltip position so it is off the mouse cursor, but also closer to it than regular tooltips,
|
||||||
- BeginDragDropTarget(): Added ImGuiDragDropFlags_AcceptNoPreviewTooltip flag to request hiding the drag source tooltip from the target site. (#143)
|
and not clamped by viewport. (#1739)
|
||||||
- BeginCombo(), BeginMainMenuBar(), BeginChildFrame(): Temporary style modification are restored at the end of BeginXXX instead of EndXXX, to not affect tooltips and child windows.
|
- BeginDragDropTarget(): Added ImGuiDragDropFlags_AcceptNoPreviewTooltip flag to request hiding the drag source tooltip
|
||||||
|
from the target site. (#143)
|
||||||
|
- BeginCombo(), BeginMainMenuBar(), BeginChildFrame(): Temporary style modification are restored at the end of BeginXXX
|
||||||
|
instead of EndXXX, to not affect tooltips and child windows.
|
||||||
- Popup: Improved handling of (erroneously) repeating calls to OpenPopup() to not close the popup's child popups. (#1497, #1533, #1865).
|
- Popup: Improved handling of (erroneously) repeating calls to OpenPopup() to not close the popup's child popups. (#1497, #1533, #1865).
|
||||||
- InputTextMultiline(): Fixed double navigation highlight when scrollbar is active. (#787)
|
- InputTextMultiline(): Fixed double navigation highlight when scrollbar is active. (#787)
|
||||||
- InputText(): Fixed Undo corruption after pasting large amount of text (Redo will still fail when undo buffers are exhausted, but text won't be corrupted).
|
- InputText(): Fixed Undo corruption after pasting large amount of text (Redo will still fail when undo buffers are exhausted,
|
||||||
|
but text won't be corrupted).
|
||||||
- SliderFloat(): When using keyboard/gamepad and a zero precision format string (e.g. "%.0f"), always step in integer units. (#1866)
|
- SliderFloat(): When using keyboard/gamepad and a zero precision format string (e.g. "%.0f"), always step in integer units. (#1866)
|
||||||
- ImFontConfig: Added GlyphMinAdvanceX/GlyphMaxAdvanceX settings useful to make a font appears monospaced, particularly useful for icon fonts. (#1869)
|
- ImFontConfig: Added GlyphMinAdvanceX/GlyphMaxAdvanceX settings useful to make a font appears monospaced, particularly useful
|
||||||
- ImFontAtlas: Added GetGlyphRangesChineseSimplifiedCommon() helper that returns a list of ~2500 most common Simplified Chinese characters. (#1859) [@JX-Master, @ocornut]
|
for icon fonts. (#1869)
|
||||||
|
- ImFontAtlas: Added GetGlyphRangesChineseSimplifiedCommon() helper that returns a list of ~2500 most common Simplified Chinese
|
||||||
|
characters. (#1859) [@JX-Master, @ocornut]
|
||||||
- Examples: OSX: Added imgui_impl_osx.mm binding to be used along with e.g. imgui_impl_opengl2.cpp. (#281, #1870) [@pagghiu, @itamago, @ocornut]
|
- Examples: OSX: Added imgui_impl_osx.mm binding to be used along with e.g. imgui_impl_opengl2.cpp. (#281, #1870) [@pagghiu, @itamago, @ocornut]
|
||||||
- Examples: GLFW: Made it possible to Shutdown/Init the backend again (by reseting the time storage properly). (#1827) [@ice1000]
|
- Examples: GLFW: Made it possible to Shutdown/Init the backend again (by reseting the time storage properly). (#1827) [@ice1000]
|
||||||
- Examples: Win32: Fixed handling of mouse wheel messages to support sub-unit scrolling messages (typically sent by track-pads). (#1874) [@zx64]
|
- Examples: Win32: Fixed handling of mouse wheel messages to support sub-unit scrolling messages (typically sent by track-pads). (#1874) [@zx64]
|
||||||
- Examples: SDL+Vulkan: Added SDL+Vulkan example.
|
- Examples: SDL+Vulkan: Added SDL+Vulkan example.
|
||||||
- Examples: Allegro5: Added support for ImGuiConfigFlags_NoMouseCursorChange flag. Added clipboard support.
|
- Examples: Allegro5: Added support for ImGuiConfigFlags_NoMouseCursorChange flag. Added clipboard support.
|
||||||
- Examples: Allegro5: Unindexing buffers ourselves as Allegro indexed drawing primitives are buggy in the DirectX9 back-end (will be fixed in Allegro 5.2.5+).
|
- Examples: Allegro5: Unindexing buffers ourselves as Allegro indexed drawing primitives are buggy in the DirectX9 back-end
|
||||||
|
(will be fixed in Allegro 5.2.5+).
|
||||||
- Examples: DirectX12: Moved the ID3D12GraphicsCommandList* parameter from ImGui_ImplDX12_NewFrame() to ImGui_ImplDX12_RenderDrawData() which makes a lots more sense. (#301)
|
- Examples: DirectX12: Moved the ID3D12GraphicsCommandList* parameter from ImGui_ImplDX12_NewFrame() to ImGui_ImplDX12_RenderDrawData() which makes a lots more sense. (#301)
|
||||||
- Examples: Vulkan: Reordered parameters ImGui_ImplVulkan_RenderDrawData() to be consistent with other bindings, a good occasion since we refactored the code.
|
- Examples: Vulkan: Reordered parameters ImGui_ImplVulkan_RenderDrawData() to be consistent with other bindings,
|
||||||
|
a good occasion since we refactored the code.
|
||||||
- Examples: FreeGLUT: Added FreeGLUT bindings. Added FreeGLUT+OpenGL2 example. (#801)
|
- Examples: FreeGLUT: Added FreeGLUT bindings. Added FreeGLUT+OpenGL2 example. (#801)
|
||||||
- Examples: The functions in imgui_impl_xxx.cpp are prefixed with IMGUI_IMPL_API (which defaults to IMGUI_API) to facilitate some uses. (#1888)
|
- Examples: The functions in imgui_impl_xxx.cpp are prefixed with IMGUI_IMPL_API (which defaults to IMGUI_API) to facilitate
|
||||||
- Examples: Fixed bindings to use ImGuiMouseCursor_COUNT instead of old name ImGuiMouseCursor_Count_ so they can compile with IMGUI_DISABLE_OBSOLETE_FUNCTIONS. (#1887)
|
some uses. (#1888)
|
||||||
|
- Examples: Fixed bindings to use ImGuiMouseCursor_COUNT instead of old name ImGuiMouseCursor_Count_ so they can compile
|
||||||
|
with IMGUI_DISABLE_OBSOLETE_FUNCTIONS. (#1887)
|
||||||
- Misc: Updated stb_textedit from 1.09 + patches to 1.12 + minor patches.
|
- Misc: Updated stb_textedit from 1.09 + patches to 1.12 + minor patches.
|
||||||
- Internals: PushItemFlag() flags are inherited by BeginChild().
|
- Internals: PushItemFlag() flags are inherited by BeginChild().
|
||||||
|
|
||||||
@ -491,41 +523,56 @@ Other Changes:
|
|||||||
|
|
||||||
Breaking Changes:
|
Breaking Changes:
|
||||||
|
|
||||||
- DragInt(): The default compile-time format string has been changed from "%.0f" to "%d", as we are not using integers internally any more.
|
- DragInt(): The default compile-time format string has been changed from "%.0f" to "%d", as we are not using integers internally
|
||||||
If you used DragInt() with custom format strings, make sure you change them to use %d or an integer-compatible format.
|
any more. If you used DragInt() with custom format strings, make sure you change them to use %d or an integer-compatible format.
|
||||||
To honor backward-compatibility, the DragInt() code will currently parse and modify format strings to replace %*f with %d, giving time to users to upgrade their code.
|
To honor backward-compatibility, the DragInt() code will currently parse and modify format strings to replace %*f with %d,
|
||||||
If you have IMGUI_DISABLE_OBSOLETE_FUNCTIONS enabled, the code will instead assert! You may run a reg-exp search on your codebase for e.g. "DragInt.*%f" to you find them.
|
giving time to users to upgrade their code.
|
||||||
- InputFloat(): Obsoleted InputFloat() functions taking an optional "int decimal_precision" in favor of an equivalent and more flexible "const char* format",
|
If you have IMGUI_DISABLE_OBSOLETE_FUNCTIONS enabled, the code will instead assert! You may run a reg-exp search on your
|
||||||
consistent with other functions. Kept redirection functions (will obsolete).
|
codebase for e.g. "DragInt.*%f" to you find them.
|
||||||
- Misc: IM_DELETE() helper function added in 1.60 doesn't set the input pointer to NULL, more consistent with standard expectation and allows passing r-values.
|
- InputFloat(): Obsoleted InputFloat() functions taking an optional "int decimal_precision" in favor of an equivalent and more
|
||||||
|
flexible "const char* format", consistent with other functions. Kept redirection functions (will obsolete).
|
||||||
|
- Misc: IM_DELETE() helper function added in 1.60 doesn't set the input pointer to NULL, more consistent with standard
|
||||||
|
expectation and allows passing r-values.
|
||||||
|
|
||||||
Other Changes:
|
Other Changes:
|
||||||
|
|
||||||
- Added DragScalar, DragScalarN: supports signed/unsigned, 32/64 bits, float/double data types. (#643, #320, #708, #1011)
|
- Added DragScalar, DragScalarN: supports signed/unsigned, 32/64 bits, float/double data types. (#643, #320, #708, #1011)
|
||||||
- Added InputScalar, InputScalarN: supports signed/unsigned, 32/64 bits, float/double data types. (#643, #320, #708, #1011)
|
- Added InputScalar, InputScalarN: supports signed/unsigned, 32/64 bits, float/double data types. (#643, #320, #708, #1011)
|
||||||
- Added SliderScalar, SliderScalarN: supports signed/unsigned, 32/64 bits, float/double data types. (#643, #320, #708, #1011)
|
- Added SliderScalar, SliderScalarN: supports signed/unsigned, 32/64 bits, float/double data types. (#643, #320, #708, #1011)
|
||||||
- Window: Fixed pop-ups/tooltips/menus not honoring style.DisplaySafeAreaPadding as well as it should have (part of menus displayed outside the safe area, etc.).
|
- Window: Fixed pop-ups/tooltips/menus not honoring style.DisplaySafeAreaPadding as well as it should have (part of menus
|
||||||
|
displayed outside the safe area, etc.).
|
||||||
- Window: Fixed windows using the ImGuiWindowFlags_NoSavedSettings flag from not using the same default position as other windows. (#1760)
|
- Window: Fixed windows using the ImGuiWindowFlags_NoSavedSettings flag from not using the same default position as other windows. (#1760)
|
||||||
- Window: Relaxed the internal stack size checker to allow Push/Begin/Pop/.../End patterns to be used with PushStyleColor, PushStyleVar, PushFont without causing a false positive assert. (#1767)
|
- Window: Relaxed the internal stack size checker to allow Push/Begin/Pop/.../End patterns to be used with PushStyleColor, PushStyleVar, PushFont without causing a false positive assert. (#1767)
|
||||||
- Window: Fixed the default proportional item width lagging by one frame on resize.
|
- Window: Fixed the default proportional item width lagging by one frame on resize.
|
||||||
- Columns: Fixed a bug introduced in 1.51 where columns would affect the contents size of their container, often creating feedback loops when ImGuiWindowFlags_AlwaysAutoResize was used. (#1760)
|
- Columns: Fixed a bug introduced in 1.51 where columns would affect the contents size of their container, often creating
|
||||||
|
feedback loops when ImGuiWindowFlags_AlwaysAutoResize was used. (#1760)
|
||||||
- Settings: Fixed saving an empty .ini file if CreateContext/DestroyContext are called without a single call to NewFrame(). (#1741)
|
- Settings: Fixed saving an empty .ini file if CreateContext/DestroyContext are called without a single call to NewFrame(). (#1741)
|
||||||
- Settings: Added LoadIniSettingsFromDisk(), LoadIniSettingsFromMemory(), SaveIniSettingsToDisk(), SaveIniSettingsToMemory() to manually load/save .ini settings. (#923, #993)
|
- Settings: Added LoadIniSettingsFromDisk(), LoadIniSettingsFromMemory(), SaveIniSettingsToDisk(), SaveIniSettingsToMemory()
|
||||||
- Settings: Added io.WantSaveIniSettings flag, which is set to notify the application that e.g. SaveIniSettingsToMemory() should be called. (#923, #993)
|
to manually load/save .ini settings. (#923, #993)
|
||||||
- Scrolling: Fixed a case where using SetScrollHere(1.0f) at the bottom of a window on the same frame the window height has been growing would have the scroll clamped using the previous height. (#1804)
|
- Settings: Added io.WantSaveIniSettings flag, which is set to notify the application that e.g. SaveIniSettingsToMemory()
|
||||||
- MenuBar: Made BeginMainMenuBar() honor style.DisplaySafeAreaPadding so the text can be made visible on TV settings that don't display all pixels. (#1439) [@dougbinks]
|
should be called. (#923, #993)
|
||||||
|
- Scrolling: Fixed a case where using SetScrollHere(1.0f) at the bottom of a window on the same frame the window height
|
||||||
|
has been growing would have the scroll clamped using the previous height. (#1804)
|
||||||
|
- MenuBar: Made BeginMainMenuBar() honor style.DisplaySafeAreaPadding so the text can be made visible on TV settings that
|
||||||
|
don't display all pixels. (#1439) [@dougbinks]
|
||||||
- InputText: On Mac OS X, filter out characters when the CMD modifier is held. (#1747) [@sivu]
|
- InputText: On Mac OS X, filter out characters when the CMD modifier is held. (#1747) [@sivu]
|
||||||
- InputText: On Mac OS X, support CMD+SHIFT+Z for Redo. CMD+Y is also supported as major apps seems to default to support both. (#1765) [@lfnoise]
|
- InputText: On Mac OS X, support CMD+SHIFT+Z for Redo. CMD+Y is also supported as major apps seems to default to support both. (#1765) [@lfnoise]
|
||||||
- InputText: Fixed returning true when edition is cancelled with ESC and the current buffer matches the initial value.
|
- InputText: Fixed returning true when edition is cancelled with ESC and the current buffer matches the initial value.
|
||||||
- InputFloat,InputFloat2,InputFloat3,InputFloat4: Added variations taking a more flexible and consistent optional "const char* format" parameter instead of "int decimal_precision".
|
- InputFloat,InputFloat2,InputFloat3,InputFloat4: Added variations taking a more flexible and consistent optional
|
||||||
This allow using custom formats to display values in scientific notation, and is generally more consistent with other API. Obsoleted functions using the optional "int decimal_precision" parameter. (#648)
|
"const char* format" parameter instead of "int decimal_precision". This allow using custom formats to display values
|
||||||
- DragFloat, DragInt: Cancel mouse tweak when current value is initially past the min/max boundaries and mouse is pushing in the same direction (keyboard/gamepad version already did this).
|
in scientific notation, and is generally more consistent with other API.
|
||||||
|
Obsoleted functions using the optional "int decimal_precision" parameter. (#648)
|
||||||
|
- DragFloat, DragInt: Cancel mouse tweak when current value is initially past the min/max boundaries and mouse is pushing
|
||||||
|
in the same direction (keyboard/gamepad version already did this).
|
||||||
- DragFloat, DragInt: Honor natural type limits (e.g. INT_MAX, FLT_MAX) instead of wrapping around. (#708, #320)
|
- DragFloat, DragInt: Honor natural type limits (e.g. INT_MAX, FLT_MAX) instead of wrapping around. (#708, #320)
|
||||||
- DragFloat, SliderFloat: Fixes to allow input of scientific notation numbers when using CTRL+Click to input the value. (~#648, #1011)
|
- DragFloat, SliderFloat: Fixes to allow input of scientific notation numbers when using CTRL+Click to input the value. (~#648, #1011)
|
||||||
- DragFloat, SliderFloat: Rounding-on-write uses the provided format string instead of parsing the precision from the string, which allows for finer uses of %e %g etc. (#648, #642)
|
- DragFloat, SliderFloat: Rounding-on-write uses the provided format string instead of parsing the precision from the string,
|
||||||
- DragFloat: Improved computation when using the power curve. Improved lost of input precision with very small steps. Added an assert than power-curve requires a min/max range. (~#642)
|
which allows for finer uses of %e %g etc. (#648, #642)
|
||||||
|
- DragFloat: Improved computation when using the power curve. Improved lost of input precision with very small steps.
|
||||||
|
Added an assert than power-curve requires a min/max range. (~#642)
|
||||||
- DragFloat: The 'power' parameter is only honored if the min/max parameter are also setup.
|
- DragFloat: The 'power' parameter is only honored if the min/max parameter are also setup.
|
||||||
- DragInt, SliderInt: Fixed handling of large integers (we previously passed data around internally as float, which reduced the range of valid integers).
|
- DragInt, SliderInt: Fixed handling of large integers (we previously passed data around internally as float, which reduced
|
||||||
|
the range of valid integers).
|
||||||
- ColorEdit: Fixed not being able to pass the ImGuiColorEditFlags_NoAlpha or ImGuiColorEditFlags_HDR flags to SetColorEditOptions().
|
- ColorEdit: Fixed not being able to pass the ImGuiColorEditFlags_NoAlpha or ImGuiColorEditFlags_HDR flags to SetColorEditOptions().
|
||||||
- Nav: Fixed hovering a Selectable() with the mouse so that it update the navigation cursor (as it happened in the pre-1.60 navigation branch). (#787)
|
- Nav: Fixed hovering a Selectable() with the mouse so that it update the navigation cursor (as it happened in the pre-1.60 navigation branch). (#787)
|
||||||
- Style: Changed default style.DisplaySafeAreaPadding values from (4,4) to (3,3) so it is smaller than FramePadding and has no effect on main menu bar on a computer. (#1439)
|
- Style: Changed default style.DisplaySafeAreaPadding values from (4,4) to (3,3) so it is smaller than FramePadding and has no effect on main menu bar on a computer. (#1439)
|
||||||
@ -1262,6 +1309,469 @@ Other Changes:
|
|||||||
- Various extra comments and clarification in the code.
|
- Various extra comments and clarification in the code.
|
||||||
- Various other fixes and optimizations.
|
- Various other fixes and optimizations.
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
VERSION 1.47 (2015-12-25)
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.47
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
|
||||||
|
- Rebranding "ImGui" -> "dear imgui" as an optional first name to reduce ambiguity with IMGUI term. (#21)
|
||||||
|
- Added ProgressBar(). (#333)
|
||||||
|
- InputText(): Added ImGuiInputTextFlags_Password mode: hide display, disable logging/copying to clipboard. (#237, #363, #374)
|
||||||
|
- Added GetColorU32() helper to retrieve color given enum with global alpha and extra applied.
|
||||||
|
- Added ImGuiIO::ClearInputCharacters() superfluous helper.
|
||||||
|
- Fixed ImDrawList draw command merging bug where using PopClipRect() along with PushTextureID()/PopTextureID() functions
|
||||||
|
would occasionally restore an incorrect clipping rectangle.
|
||||||
|
- Fixed ImDrawList draw command merging so PushTextureID(XXX)/PopTextureID()/PushTextureID(XXX) sequence are now properly merged.
|
||||||
|
- Fixed large popups positioning issues when their contents on either axis is larger than DisplaySize,
|
||||||
|
and WindowPadding < DisplaySafeAreaPadding.
|
||||||
|
- Fixed border rendering in various situations when using non-pixel aligned glyphs.
|
||||||
|
- Fixed border rendering of windows to always contain the border within the window.
|
||||||
|
- Fixed Shutdown() leaking font atlas data if NewFrame() was never called. (#396, #303)
|
||||||
|
- Fixed int>void\* warnings for 64-bits architectures with fancy warnings enabled.
|
||||||
|
- Renamed the dubious Color() helpers to ValueColor() - dangerously named, rarely used and probably to be made obsolete.
|
||||||
|
- InputText(): Fixed and better handling of using keyboard while mouse button if being held and dragging. (#429)
|
||||||
|
- InputText(): Replace OS IME (Input Method Editor) cursor on top-left when we are not text editing.
|
||||||
|
- TreeNode(), CollapsingHeader(), Bullet(), BulletText(): various sizing and layout fixes to better support laying out
|
||||||
|
multiple item with different height on same line. (#414, #282)
|
||||||
|
- Begin(): Initial window creation with ImGuiWindowFlags_NoBringToFrontOnFocus flag pushes it at the front of global window list.
|
||||||
|
- BeginPopupContextWindow() and BeginPopupContextVoid() reopen window on subsequent click. (#439)
|
||||||
|
- ColorEdit4(): Fixed broken tooltip on hovering the color button. (actually fixes #373, #380)
|
||||||
|
- ImageButton(): uses FrameRounding up to a maximum of available framing size. (#394)
|
||||||
|
- Columns: Fixed bug with indentation within columns, also making code a bit shorter/faster. (#414, #125)
|
||||||
|
- Columns: Columns set with no implicit id include the columns count within the id to reduce collisions. (#125)
|
||||||
|
- Columns: Removed one unnecessary allocation when columns are not used by a window. (#125)
|
||||||
|
- ImFontAtlas: Tweaked GetGlyphRangesJapanese() so it is easier to modify.
|
||||||
|
- ImFontAtlas: Updated stb_rect_pack.h to 0.08.
|
||||||
|
- Metrics: Fixed computing ImDrawCmd bounding box when the draw buffer have been unindexed.
|
||||||
|
- Demo: Added a simple "Property Editor" demo applet. (#125, #414)
|
||||||
|
- Demo: Fixed assertion in "Custom Rendering" demo when holding both mouse buttons. (#393)
|
||||||
|
- Demo: Lots of extra comments, fixes.
|
||||||
|
- Demo: Tweaks to Style Editor.
|
||||||
|
- Examples: Not clearing input data/tex data in atlas (will be required for dynamic atlas anyway).
|
||||||
|
- Examples: Added /Zi (output debug information) to Win32 batch files.
|
||||||
|
- Examples: Various fixes for resizing window and recreating graphic context.
|
||||||
|
- Examples: OpenGL2/3: Save/restore viewport as part of default render function. (#392, #441).
|
||||||
|
- Examples; OpenGL3: Fixed gl3w.c for Linux when compiled with a C++ compiler. (#411)
|
||||||
|
- Examples: DirectX: Removed assumption about Unicode build in example main.cpp. (#399)
|
||||||
|
- Examples: DirectX10: Added DirectX10 example. (#424)
|
||||||
|
- Examples: DirectX11: Downgraded requirement from shader model 5.0 to 4.0. (#420)
|
||||||
|
- Examples: DirectX11: Removed Debug flag from graphics context. (#415)
|
||||||
|
- Examples: Added SDL+OpenGL3 example. (#356)
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
VERSION 1.46 (2015-10-18)
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.46
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
|
||||||
|
- Begin*(): added ImGuiWindowFlags_NoFocusOnAppearing flag. (#314)
|
||||||
|
- Begin*(): added ImGuiWindowFlags_NoBringToFrontOnFocus flag.
|
||||||
|
- Added GetDrawData() alternative to setting a Render function pointer in ImGuiIO structure.
|
||||||
|
- Added SetClipboardText(), GetClipboardText() helper shortcuts that user code can call directly without reading
|
||||||
|
from the ImGuiIO structure (to match MemAlloc/MemFree)
|
||||||
|
- Fixed handling of malformed UTF-8 at the end of a non-zero terminated string range.
|
||||||
|
- Fixed mouse click detection when passing DeltaTime 0.0. (#338)
|
||||||
|
- Fixed IsKeyReleased() and IsMouseReleased() returning true on the first frame.
|
||||||
|
- Fixed using SetNextWindow\* functions on Modal windows with a ImGuiSetCond_Appearing condition. (#377)
|
||||||
|
- IsMouseHoveringRect(): Added 'bool clip' parameter to disable clipping provided rectangle. (#316)
|
||||||
|
- InputText(): added ImGuiInputTextFlags_ReadOnly flag. (#211)
|
||||||
|
- InputText(): lose cursor/undo-stack when reactivating focus is buffer has changed size.
|
||||||
|
- InputText(): fixed ignoring text inputs when ALT or ALTGR are pressed. (#334)
|
||||||
|
- InputText(): fixed mouse-dragging not tracking the cursor when text doesn't fit. (#339)
|
||||||
|
- InputText(): fixed cursor pixel-perfect alignment when horizontally scrolling.
|
||||||
|
- InputText(): fixed crash when passing a buf_size==0 (which can be of use for read-only selectable text boxes). (#360)
|
||||||
|
- InputFloat() fixed explicit precision modifier, both display and input were broken.
|
||||||
|
- PlotHistogram(): improved rendering of histogram with a lot of values.
|
||||||
|
- Dummy(): creates an item so functions such as IsItemHovered() can be used.
|
||||||
|
- BeginChildFrame() helper: added the extra_flags parameter.
|
||||||
|
- Scrollbar: fixed rounding of background + child window consistenly have ChildWindowBg color under ScrollbarBg fill. (#355).
|
||||||
|
- Scrollbar: background color less translucent in default style so it works better when changing background color.
|
||||||
|
- Scrollbar: fixed minor rendering offset when borders are enabled. (#365)
|
||||||
|
- ImDrawList: fixed 1 leak per ImDrawList using the ChannelsSplit() API (via Columns). (#318)
|
||||||
|
- ImDrawList: fixed rectangle rendering glitches with width/height <= 1/2 and rounding enabled.
|
||||||
|
- ImDrawList: AddImage() uv parameters default to (0,0) and (1,1).
|
||||||
|
- ImFontAtlas: Added TexDesiredWidth and tweaked default cheapo best-width choice. (#327)
|
||||||
|
- ImFontAtlas: Added GetGlyphRangesKorean() helper to retrieve unicode ranges for Korean. (#348)
|
||||||
|
- ImGuiTextFilter::Draw() helper return bool and build when filter is modified.
|
||||||
|
- ImGuiTextBuffer: added c_str() helper.
|
||||||
|
- ColorEdit4(): fixed hovering the color button always showing 1.0 alpha. (#373)
|
||||||
|
- ColorConvertFloat4ToU32() round the floats instead of truncating them.
|
||||||
|
- Window: Fixed window lower-right clipping limit so it plays more friendly with both OpenGL and DirectX coordinates.
|
||||||
|
- Internal: Extracted a EndFrame() function out of Render() but kept it internal/private + clarified some asserts. (#335)
|
||||||
|
- Internal: Added missing IMGUI_API definitions in imgui_internal.h (#326)
|
||||||
|
- Internal: ImLoadFileToMemory() return void\* instead of taking void*\* + allow optional int\* file_size.
|
||||||
|
- Demo: Horizontal scrollbar demo allows to enable simultanaeous scrollbars on both axises.
|
||||||
|
- Tools: binary_to_compressed_c.cpp: added -nocompress option.
|
||||||
|
- Examples: Added example for the Marmalade platform.
|
||||||
|
- Examples: Added batch files to build Windows examples with VS.
|
||||||
|
- Examples: OpenGL3: Saving/restoring more GL state correctly. (#347)
|
||||||
|
- Examples: OpenGL2/3: Added msys2/mingw64 target to Makefiles.
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
VERSION 1.45 (2015-09-01)
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.45
|
||||||
|
|
||||||
|
Breaking Changes:
|
||||||
|
|
||||||
|
- With the addition of better horizontal scrolling primitives I had to make some consistency fixes.
|
||||||
|
`GetCursorPos()` `SetCursorPos()` `GetContentRegionMax()` `GetWindowContentRegionMin()` `GetWindowContentRegionMax()`
|
||||||
|
are now incorporating the scrolling amount. They were incorrectly not incorporating this amount previously.
|
||||||
|
It PROBABLY shouldn't break anything, but that depends on how you used them. Namely:
|
||||||
|
- If you always used SetCursorPos() with values relative to GetCursorPos() there shouldn't be a problem.
|
||||||
|
However if you used absolute coordinates, note that SetCursorPosY(100.0f) will put you at +100 from the initial Y position (which may be scrolled out of the view), NOT at +100 from the window top border. Since there wasn't any official scrolling value on X axis (past just manually moving the cursor) this can only affect you if you used to set absolute coordinates on the Y axis which is hopefully rare/unlikely, and trivial to fix.
|
||||||
|
- The value of GetWindowContentRegionMax() isn't necessarily close to GetWindowWidth() if horizontally scrolling.
|
||||||
|
Previously they were roughly interchangeable (roughly because the content region exclude window padding).
|
||||||
|
|
||||||
|
Other Changes:
|
||||||
|
|
||||||
|
- Added Horizontal Scrollbar via ImGuiWindowFlags_HorizontalScroll (#246).
|
||||||
|
- Added GetScrollX(), GetScrollX(), GetScrollMaxX() apis (#246).
|
||||||
|
- Added SetNextWindowContentSize(), SetNextWindowContentWidth() to explicitly set the content size of a window, which
|
||||||
|
define the range of scrollbar. When set explicitly it also define the base value from which widget width are derived.
|
||||||
|
- Added IO.WantTextInput telling when ImGui is expecting text input, so that e.g. OS on-screen keyboard can be enabled.
|
||||||
|
- Added printf attribute to printf-like text formatting functions (Clang/GCC).
|
||||||
|
- Added GetMousePosOnOpeningCurrentPopup() helper.
|
||||||
|
- Added GetContentRegionAvailWidth() helper.
|
||||||
|
- Malformed UTF-8 data don't terminate string, output 0xFFFD instead (#307).
|
||||||
|
- ImDrawList: Added AddBezierCurve(), PathBezierCurveTo() API for cubic bezier curves (#311).
|
||||||
|
- ImDrawList: Allow to override ImDrawIdx type (#292).
|
||||||
|
- ImDrawList: Added an assert on overflowing index value (#292).
|
||||||
|
- ImDrawList: Fixed issues with channels split/merge. Now functional without manually adding a draw cmd. Added comments.
|
||||||
|
- ImDrawData: Added ScaleClipRects() helper useful when rendering scaled. (#287).
|
||||||
|
- Fixed Bullet() inconsistent layout behaviour when clipped.
|
||||||
|
- Fixed IsWindowHovered() not taking account of window hoverability (may be disabled because of a popup).
|
||||||
|
- Fixed InvisibleButton() not honoring negative size consistently with other widgets that do so.
|
||||||
|
- Fixed OpenPopup() accessing current window, effectively opening "Debug" when called from an empty window stack.
|
||||||
|
- TreeNode(): Fixed IsItemHovered() result being inconsistent with interaction visuals (#282).
|
||||||
|
- TreeNode(): Fixed mouse interaction padding past the node label being accounted for in layout (#282).
|
||||||
|
- BeginChild(): Passing a ImGuiWindowFlags_NoMove inhibits moving parent window from this child.
|
||||||
|
- BeginChild() fixed missing rounding for child sizes which leaked into layout and have items misaligned.
|
||||||
|
- Begin(): Removed default name = "Debug" parameter. We already have a "Debug" window pushed to the stack in the first place so it's not really a useful default.
|
||||||
|
- Begin(): Minor fixes with windows main clipping rectangle (e.g. child window with border).
|
||||||
|
- Begin(): Window flags are only read on the first call of the frame. Subsequent calls ignore flags, which allows appending to a window without worryin about flags.
|
||||||
|
- InputText(): ignore character input when ctrl/alt are held. (Normally those text input are ignored by most wrappers.) (#279).
|
||||||
|
- Demo: Fixed incorrectly formed string passed to Combo (#298).
|
||||||
|
- Demo: Added simple Log demo.
|
||||||
|
- Demo: Added horizontal scrolling example + enabled in console, log and child examples (#246).
|
||||||
|
- Style: made scrollbars rounded by default. Because nice. Minor menu bar background alpha tweak. (#246)
|
||||||
|
- Metrics: display indices along with triangles count (#299) and some internal state.
|
||||||
|
- ImGuiTextFilter::PassFilter() supports string range. Added [] helper to ImGuiTextBuffer.
|
||||||
|
- ImGuiTextFilter::Draw() default parameter width=0.0f for no override, allow override with negative values.
|
||||||
|
- Examples: OpenGL2/OpenGL3: fix for retina displays. Default font current lack crispness.
|
||||||
|
- Examples: OpenGL2/OpenGL3: save/restore more GL state correctly.
|
||||||
|
- Examples: DirectX9/DirectX11: resizing buffers dynamically (#299).
|
||||||
|
- Examples: DirectX9/DirectX11: added missing middle mouse button to Windows event handler.
|
||||||
|
- Examples: DirectX11: fix for Visual Studio 2015 presumably shipping with an updated version of DX11.
|
||||||
|
- Examples: iOS: fixed missing files in project.
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
VERSION 1.44 (2015-08-08)
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.44
|
||||||
|
|
||||||
|
Breaking Changes:
|
||||||
|
|
||||||
|
- imgui.cpp has been split intro extra files: imgui_demo.cpp, imgui_draw.cpp, imgui_internal.h.
|
||||||
|
Add the two extra .cpp to your project or #include them from another .cpp file. (#219)
|
||||||
|
|
||||||
|
Other Changes:
|
||||||
|
|
||||||
|
- Internal data structure and several useful functions are now exposed in imgui_internal.h. This should make it easier
|
||||||
|
and more natural to extend ImGui. However please note that none of the content in imgui_internal.h is guaranteed
|
||||||
|
for forward-compatibility and code using those types/functions may occasionally break. (#219)
|
||||||
|
- All sample code is in imgui_demo.cpp. Please keep this file in your project and consider allowing your code to call
|
||||||
|
the ShowTestWindow() function as de-facto guide to ImGui features. It will be stripped out by the linker when unused.
|
||||||
|
- Added GetContentRegionAvail() helper (basically GetContentRegionMax() - GetCursorPos()).
|
||||||
|
- Added ImGuiWindowFlags_NoInputs for totally input-passthru window.
|
||||||
|
- Button(): honor negative size consistently with other widgets that do so (width -100 to align the button 100 pixels
|
||||||
|
before the right-most position of the contents region).
|
||||||
|
- InputTextMultiline(): honor negative size consistently with other widgets that do so.
|
||||||
|
- Combo() clamp popup to lower edge of visible area.
|
||||||
|
- InputInt(): value doesn't pass through an int>float>int casting chain, fix handling lost of precision with "large" integer.
|
||||||
|
- InputInt() allow hexadecimal input (awkwardly via ImGuiInputTextFlags_CharsHexadecimal but we will allow format
|
||||||
|
string in InputInt* later).
|
||||||
|
- Checkbox(), RadioButton(): fixed scaling of checkbox and radio button for the filling of "active" visual.
|
||||||
|
- Columns: never assume horizontal space for scrollbar if NoScrollbar flag is explicitly set.
|
||||||
|
- Slider: fixed using FramePadding between frame and grab visual. Scaling that spacing would look odd.
|
||||||
|
- Fixed lower-right resize grip hit box not scaling along with its rendered size (#287)
|
||||||
|
- ImDrawList: Fixed angles in ImDrawList::PathArcTo(), PathArcToFast() (v1.43) being off by an extra PI for no reason.
|
||||||
|
- ImDrawList: Added ImDrawList::AddText() shorthand helper.
|
||||||
|
- ImDrawList: Add missing support for anti-aliased thick-lines (#133, also ref #288)
|
||||||
|
- ImFontAtlas: Added AddFontFromMemoryCompressedBase85TTF() to load base85 encoded font string. Default font encoded
|
||||||
|
as base85 saves ~100 lines / 26 KB of source code. Added base85 output to the binary_to_compressed_c tool.
|
||||||
|
- Build fix for MinGW (#276).
|
||||||
|
- Examples: OpenGL3: Fixed running on script core profiles for OSX (#277).
|
||||||
|
- Examples: OpenGL3: Simplified code using glBufferData for vertices as well (#277, #278)
|
||||||
|
- Examples: DirectX11: Clear font texture view to ensure Release() doesn't get called twice (#290).
|
||||||
|
- Updated to stb_truetype 1.07 (back to vanilla version as our minor changes are now in master & fix unlikely assert
|
||||||
|
with odd fonts (#280)
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
VERSION 1.43 (2015-07-17)
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.43
|
||||||
|
|
||||||
|
Breaking Changes:
|
||||||
|
|
||||||
|
- This is a rather important release and we unfortunately had to break the rendering API.
|
||||||
|
ImGui now requires you to render indexed vertices instead of non-indexed ones. The fix should be very easy.
|
||||||
|
Sorry for that! This change is saving a fair amount of CPU/GPU and enables us to get anti-aliasing for a marginal cost.
|
||||||
|
Each ImDrawList now contains both a vertex buffer and an index buffer. For each command, render ElemCount/3 triangles
|
||||||
|
using indices from the index buffer.
|
||||||
|
- If you are using a vanilla copy of one of the imgui_impl_XXXX.cpp provided in the example, you just need to update
|
||||||
|
your copy and you can ignore the rest.
|
||||||
|
- The signature of the io.RenderDrawListsFn handler has changed
|
||||||
|
From: ImGui_XXXX_RenderDrawLists(ImDrawList** const cmd_lists, int cmd_lists_count)
|
||||||
|
To: ImGui_XXXX_RenderDrawLists(ImDrawData* draw_data)
|
||||||
|
With: argument 'cmd_lists' -> 'draw_data->CmdLists'
|
||||||
|
argument 'cmd_lists_count' -> 'draw_data->CmdListsCount'
|
||||||
|
ImDrawList 'commands' -> 'CmdBuffer'
|
||||||
|
ImDrawList 'vtx_buffer' -> 'VtxBuffer'
|
||||||
|
ImDrawList n/a -> 'IdxBuffer' (new)
|
||||||
|
ImDrawCmd 'vtx_count' -> 'ElemCount'
|
||||||
|
ImDrawCmd 'clip_rect' -> 'ClipRect'
|
||||||
|
ImDrawCmd 'user_callback' -> 'UserCallback'
|
||||||
|
ImDrawCmd 'texture_id' -> 'TextureId'
|
||||||
|
- If you REALLY cannot render indexed primitives, you can call the draw_data->DeIndexAllBuffers() method to de-index
|
||||||
|
the buffers. This is slow and a waste of CPU/GPU. Prefer using indexed rendering!
|
||||||
|
Refer to code in the examples/ folder or ask on the GitHub if you are unsure of how to upgrade. Please upgrade!
|
||||||
|
|
||||||
|
Other Changes:
|
||||||
|
|
||||||
|
- Added anti-aliasing on lines and shapes based on primitives by @MikkoMononen (#133).
|
||||||
|
Between the use of indexed-rendering and the fact that the entire rendering codebase has been optimized and massaged
|
||||||
|
enough, with anti-aliasing enabled ImGui 1.43 is now running FASTER than 1.41.
|
||||||
|
Made some extra effort in making the code run faster in your typical Debug build.
|
||||||
|
- Anti-aliasing can be disabled in the ImGuiStyle structure via the AntiAliasedLines/AntiAliasedShapes fields for further gains.
|
||||||
|
- ImDrawList: Added AddPolyline(), AddConvexPolyFilled() with optional anti-aliasing.
|
||||||
|
- ImDrawList: Added stateful path building and stroking API. PathLineTo(), PathArcTo(), PathRect(), PathFill(), PathStroke()
|
||||||
|
with optional anti-aliasing.
|
||||||
|
- ImDrawList: Added AddRectFilledMultiColor() helper.
|
||||||
|
- ImDrawList: Added multi-channel rendering so out of order elements can be rendered in separate channels and then merged
|
||||||
|
back together (used by columns).
|
||||||
|
- ImDrawList: Fixed merging draw commands when equal clip rectangles are in the two first commands.
|
||||||
|
- ImDrawList: Fixed window draw lists not destructed properly on Shutdown().
|
||||||
|
- ImDrawData: Added DeIndexAllBuffers() helper.
|
||||||
|
- Added lots of new font options ImFontAtlas::AddFont() and the new ImFontConfig structure.
|
||||||
|
- Added support for oversampling (ImFontConfig: OversampleH, OversampleV) and sub-pixel positioning (ImFontConfig: PixelSnapH).
|
||||||
|
Oversampling allows sub-pixel positioning but can also be used as a way to get some leeway with scaling fonts without re-rasterizing.
|
||||||
|
- Added GlyphExtraSpacing option to add extra horizontal spacing between characters (#242).
|
||||||
|
- Added MergeMode option to merge glyphs from different font inputs into a same font (#182, #232).
|
||||||
|
- Added FontDataOwnedByAtlas option to keep ownership from the TTF data buffer and request the atlas to make a copy (#220).
|
||||||
|
- Updated to stb_truetype 1.06 (+ minor mods) with better font rasterization.
|
||||||
|
- InputText: Added ImGuiInputTextFlags_NoHorizontalScroll flag.
|
||||||
|
- InputText: Added ImGuiInputTextFlags_AlwaysInsertMode flag.
|
||||||
|
- InputText: Added HasSelection() helper in ImGuiTextEditCallbackData as a clarification.
|
||||||
|
- InputText: Fix for using END key on a multi-line text editor (#275)
|
||||||
|
- Columns: Dispatch render of each column in a sub-draw list and merge on closure, saving a lot of draw calls! (#125)
|
||||||
|
- Popups: Fixed Combo boxes inside menus. (#272)
|
||||||
|
- Style: Added GrabRounding setting to make the sliders etc. grabs rounded.
|
||||||
|
- Changed SameLine() parameters from int to float.
|
||||||
|
- Fixed incorrect assert triggering when code stole ActiveID from user moving a window by calling e.g. SetKeyboardFocusHere().
|
||||||
|
- Fixed CollapsingHeader() label rendering outside its frame in columns context where ClipRect max isn't aligned with the
|
||||||
|
right-side of the header.
|
||||||
|
- Metrics window: calculate bounding box of actual vertices when hovering a draw list.
|
||||||
|
- Examples: Showing more information in the Fonts section.
|
||||||
|
- Examples: Added a gratuitous About window.
|
||||||
|
- Examples: Updated all examples code (OpenGL/DX9/DX11/SDL/Allegro/iOS) to use indexed rendering.
|
||||||
|
- Examples: Fixed the SDL2 example to support Unicode text input (#274).
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
VERSION 1.42 (2015-07-08)
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.42
|
||||||
|
|
||||||
|
Breaking Changes:
|
||||||
|
|
||||||
|
- Renamed SetScrollPosHere() to SetScrollHere(). Kept inline redirection function (will obsolete).
|
||||||
|
- Renamed GetScrollPosY() to GetScrollY(). Necessary to reduce confusion and make scrolling API consistent,
|
||||||
|
because positions (e.g. cursor position) are not equivalent to scrolling amount.
|
||||||
|
- Removed obsolete GetDefaultFontData() function that would assert anyway.
|
||||||
|
If you are updating from <1.30 you'll get a compile error instead of an assertion. (obsoleted 2015/01/11)
|
||||||
|
|
||||||
|
Other Changes:
|
||||||
|
|
||||||
|
- Added SDL2 example application (courtesy of @CedricGuillemet)
|
||||||
|
- Added iOS example application (courtesy of @joeld42)
|
||||||
|
- Added Allegro 5 example application (courtesy of @bggd)
|
||||||
|
- Added TitleBgActive color in style so focused window is made visible. (#253)
|
||||||
|
- Added CaptureKeyboardFromApp() / CaptureMouseFromApp() to manually enforce inputs capturing.
|
||||||
|
- Added DragFloatRange2() DragIntRange2() helpers. (#76)
|
||||||
|
- Added a Y centering ratio to SetScrollFromCursorPos() which can be used to aim the top or bottom of the window. (#150)
|
||||||
|
- Added SetScrollY(), SetScrollFromPos(), GetCursorStartPos() for manual scrolling manipulations. (#150).
|
||||||
|
- Added GetKeyIndex() helper for converting from ImGuiKey_\* enum to user's keycodes. Basically pulls from io.KeysMap[].
|
||||||
|
- Added missing ImGuiKey_PageUp, ImGuiKey_PageDown so more UI code can be written without referring to implementation-side keycodes.
|
||||||
|
- MenuItem() can be activated on release. (#245)
|
||||||
|
- Allowing NewFrame() with DeltaTime==0.0f to not assert.
|
||||||
|
- Fixed IsMouseDragging(). (#260)
|
||||||
|
- Fixed PlotLines(), PlotHistogram() using incorrect hovering test so they would show their tooltip even when there is
|
||||||
|
a popup between mouse and the graph.
|
||||||
|
- Fixed window padding being reported incorrectly for child windows with borders when parent have no borders.
|
||||||
|
- Fixed a bug with TextUnformatted() clipping of long text blob when clipping y1 line sits on the first line of text. (#257)
|
||||||
|
- Fixed text baseline alignment of small button (no padding) after regular buttons.
|
||||||
|
- Fixed ListBoxHeader() not honoring negative sizes the same way as BeginChild() or BeginChildFrame(). (#263)
|
||||||
|
- Fixed warnings for more pedantic compiler settings (#258).
|
||||||
|
- ImVector<> cannot be re-defined anymore, cannot be replaced with std::vector<>. Allowed us to clean up and optimize
|
||||||
|
lots of code. Yeah! (#262)
|
||||||
|
- ImDrawList: store pointer to their owner name for easier auditing/debugging.
|
||||||
|
- Examples: added scroll tracking example with SetScrollFromCursorPos().
|
||||||
|
- Examples: metrics windows render clip rectangle when hovering over a draw call.
|
||||||
|
- Lots of small optimization (particularly to run faster on unoptimized builds) and tidying up.
|
||||||
|
- Added font links in extra_fonts/ + instructions for using compressed fonts in C array.
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
VERSION 1.41 (2015-06-26)
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.41
|
||||||
|
|
||||||
|
Breaking Changes:
|
||||||
|
|
||||||
|
- Changed ImageButton() default bg_col parameter from (0,0,0,1) (black) to (0,0,0,0) (transparent).
|
||||||
|
Only makes a difference when texture have transparency.
|
||||||
|
- Changed Selectable() API from (label, selected, size) to (label, selected, flags, size).
|
||||||
|
Size override should be used very rarely so hopefully it doesn't affect many people. Sorry!
|
||||||
|
|
||||||
|
Other Changes:
|
||||||
|
|
||||||
|
- Added InputTextMultiline() multi-line text editor, vertical scrolling, selection, optimized enough to handle rather
|
||||||
|
big chunks of text in stateless context (thousands of lines are ok), option for allowing Tab to be input, option
|
||||||
|
for validating with Return or Ctrl+Return (#200).
|
||||||
|
- Added modal window API, BeginPopupModal(), follows the popup api scheme. Modal windows can be closed by clicking
|
||||||
|
outside. By default the rest of the screen is dimmed (using ImGuiCol_ModalWindowDarkening). Modal windows can be stacked.
|
||||||
|
- Added GetGlyphRangesCyrillic() helper (#237).
|
||||||
|
- Added SetNextWindowPosCenter() to center a window prior to knowing its size. (#249)
|
||||||
|
- Added IsWindowHovered() helper.
|
||||||
|
- Added IsMouseReleased(), IsKeyReleased() helpers to allow to user to avoid tracking them. (#248)
|
||||||
|
- Allow Set*WindowSize() calls to be used with popups.
|
||||||
|
- Window: AutoFit can be triggered on each axis separately via SetNextWindowSize(), etc.
|
||||||
|
- Window: fixed scrolling with mouse wheel while window was collapsed.
|
||||||
|
- Window: fixed mouse wheel scroll issues.
|
||||||
|
- DragFloat(), SliderFloat(): Fixed rounding of negative numbers which sometime made the negative lower bound unreachable.
|
||||||
|
- InputText(): lifted character count limit.
|
||||||
|
- InputText(): fixes in case of using per-window font scaling.
|
||||||
|
- Selectable(), MenuItem(): do not use frame rounding for hovering/selection.
|
||||||
|
- Selectable(): Added flag ImGuiSelectableFlags_DontClosePopups.
|
||||||
|
- Selectable(): Added flag ImGuiSelectableFlags_SpanAllColumns (#125).
|
||||||
|
- Combo(): Fixed issue with activating a Combo() not taking active id (#241).
|
||||||
|
- ColorButton(), ColorEdit4(): fix to ensure that the colored square stays square when non-default padding settings are used.
|
||||||
|
- BeginChildFrame(): returns bool like BeginChild() for clipping.
|
||||||
|
- SetScrollPosHere(): takes account of item height + more accurate centering + fixed precision issue.
|
||||||
|
- ImFont: ignoring '\r'.
|
||||||
|
- ImFont: added GetCharAdvance() helper. Exposed font Ascent and font Descent.
|
||||||
|
- ImFont: additional rendering optimizations.
|
||||||
|
- Metrics windows display storage size.
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
VERSION 1.40 (2015-05-31)
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.40
|
||||||
|
|
||||||
|
Breaking Changes:
|
||||||
|
|
||||||
|
- The BeginPopup() API (introduced in 1.37) had to be changed to allow for stacked popups and menus.
|
||||||
|
Use OpenPopup() to toggle the opened state and BeginPopup() to append.**
|
||||||
|
- The third parameter of Button(), 'repeat_if_held' has been removed. While it's been very rarely used,
|
||||||
|
some code will possibly break if you didn't rely on the default parameter.
|
||||||
|
Use PushButtonRepeat()/PopButtonRepeat() to configure repeat.
|
||||||
|
- Renamed IsRectClipped() to !IsRectVisible() for consistency (opposite return value!). Kept inline redirection function (will obsolete)
|
||||||
|
- Renamed GetWindowCollapsed() to IsWindowCollapsed() for consistency. Kept inline indirection function (will obsolete).
|
||||||
|
|
||||||
|
Other Changes:
|
||||||
|
|
||||||
|
- Menus: Added a menu system! Menus are typically populated with menu items and sub-menus, but you can add any sort of
|
||||||
|
widgets in them (buttons, text inputs, sliders, etc.). (#126)
|
||||||
|
- Menus: Added MenuItem() to append a menu item. Optional shortcut display, acts a button & toggle with checked/unchecked state,
|
||||||
|
disabled mode. Menu items can be used in any window.
|
||||||
|
- Menus: Added BeginMenu() to append a sub-menu. Note that you generally want to add sub-menu inside a popup or a menu-bar.
|
||||||
|
They will work inside a normal window but it will be a bit unusual.
|
||||||
|
- Menus: Added BeginMenuBar() to append to window menu-bar (set ImGuiWindowFlags_MenuBar to enable).
|
||||||
|
- Menus: Added BeginMainMenuBar() helper to append to a fullscreen main menu-bar.
|
||||||
|
- Popups: Support for stacked popups. Each popup level inhibit inputs to lower levels. The menus system is based on this. (#126).
|
||||||
|
- Popups: Added BeginPopupContextItem(), BeginPopupContextWindow(), BeginPopupContextVoid() to create a popup window on mouse-click.
|
||||||
|
- Popups: Popups have borders by default (#197), attenuated border alpha in default theme.
|
||||||
|
- Popups & Tooltip: Fit within display. Handling various positioning/sizing/scrolling edge cases. Better hysteresis when moving
|
||||||
|
in corners. Tooltip always tries to stay away from mouse-cursor.
|
||||||
|
- Added ImGuiStorage::GetVoidPtrRef() for manipulating stored void*.
|
||||||
|
- Added IsKeyDown() IsMouseDown() as convenience and for consistency with existing functions (instead of reading them from IO structures).
|
||||||
|
- Added Dummy() helper to advance layout by a given size. Unlike InvisibleButton() this doesn't catch any click.
|
||||||
|
- Added configurable io.KeyRepeatDelay, io.KeyRepeatRate keyboard and mouse repeat rate.
|
||||||
|
- Added PushButtonRepeat() / PopButtonRepeat() to enable hold-button-to-repeat press on any button.
|
||||||
|
- Removed the third 'repeat' parameter of Button().
|
||||||
|
- Added IsAnyItemHovered() helper.
|
||||||
|
- Added GetItemsLineHeightWithSpacing() helper.
|
||||||
|
- Added ImGuiListClipper helper for clipping large list of evenly sized items, to avoid using CalcListClipping() directly.
|
||||||
|
- Separator: within group start on group horizontal offset. (#205)
|
||||||
|
- InputText: Fixed incorrect edit state after text buffer is appended to by user via the callback. (#206)
|
||||||
|
- InputText: CTRL+letter-key shortcuts (e.g. CTRL+C/V/X) makes sure only CTRL is pressed. (#214)
|
||||||
|
- InputText: Fixed cursor generating a zero-width wire-frame rectangle turning into a division by zero (would go unnoticed
|
||||||
|
unless you trapped exceptions).
|
||||||
|
- InputFloatN/InputIntN: Flags parameter added to match scalar versions. (#218)
|
||||||
|
- Selectable: Horizontal filling not declared to ItemSize() so Selectable(),SameLine() works and we can better auto-fit the window.
|
||||||
|
- Selectable: Handling text baseline alignment for line that aren't of text height.
|
||||||
|
- Combo: Empty label doesn't add ItemInnerSpacing alignment, matching other widgets.
|
||||||
|
- EndGroup: Carries the text base offset from the last line of the group (sort of incorrect but better than nothing,
|
||||||
|
should use the first line of the group, will implement in the future).
|
||||||
|
- Columns: distinguish columns-set ID from other widgets as a convenience, added asserts and sailors.
|
||||||
|
- ListBox: ListBox() function only use public API to encourage creating custom versions. ListBoxHeader() can return false.
|
||||||
|
- ListBox: Uses ImGuiListClipper and assume items of matching height, so large lists can be handled.
|
||||||
|
- Plot: overlay label clipped within frame when not fitting.
|
||||||
|
- Window: Added ImGuiSetCond_Appearing to test the hidden->visible transition in SetWindow***/SetNextWindow*** functions.
|
||||||
|
- Window: Auto-fitting cancel out one worth of vertical spacing for vertical symmetry (like what group and tooltip do).
|
||||||
|
- Window: Default item width for auto-resizing windows expressed as a factor of font height, scales better with different font.
|
||||||
|
- Window: Fixed auto-fit calculation mismatch of whether a scrollbar will be added by maximum height clamping. Also honor NoScrollBar in the case of height clamping, not adding extra horizontal space.
|
||||||
|
- Window: Hovering require to hover same child window. Reverted 860cf57 (December 3). Might break something if you have
|
||||||
|
child overlapping items in parent window.
|
||||||
|
- Window: Fixed appending multiple times to an existing child via multiple BeginChild/EndChild calls to same child name.
|
||||||
|
Allows a simple form of out-of-order appending.
|
||||||
|
- Window: Fixed auto-filling child window using WindowMinSize at their minimum size, irrelevant.
|
||||||
|
- Metrics: Added io.MetricsActiveWindows counter. (#213.
|
||||||
|
- Metrics: Added io.MetricsAllocs counter (number of active memory allocations).
|
||||||
|
- Metrics: ShowMetricsWindow() shows popups stack, allocations.
|
||||||
|
- Style: Added style.DisplayWindowPadding to prevent windows from reaching edges of display (similar to style.DisplaySafeAreaPadding which is still in effect and also affect popups/tooltips).
|
||||||
|
- Style: Removed style.AutoFitPadding, using style.WindowPadding makes more sense (the default values were already the same).
|
||||||
|
- Style: Added style.ScrollbarRounding. (#212)
|
||||||
|
- Style: Added ImGuiCol_TextDisabled for disabled text. Added TextDisabled() helper.
|
||||||
|
- Style: Added style.WindowTitleAlign alignment options, to e.g. center title on windows. (#222)
|
||||||
|
- ImVector: tweak growth strategy, matches vector from VS2010.
|
||||||
|
- ImFontAtlas: Added ClearFonts(), making the different clear funcs more explicit. (#224)
|
||||||
|
- ImFontAtlas: Fixed appending new fonts without clearing existing fonts. Clearing input data left to application. (#224)
|
||||||
|
- ImDrawList: Merge draw command better, cases of multiple Begin/End gets merged properly.
|
||||||
|
- Store common stacked settings contiguously in memory to avoid heap allocation for unused features, and reduce cache misses.
|
||||||
|
- Shutdown() tests for g.IO.Fonts not being NULL to ease use of multiple ImGui contexts. (#207)
|
||||||
|
- Added IMGUI_DISABLE_OBSOLETE_FUNCTIONS define to disable the functions that are meant to be removed.
|
||||||
|
- Examples: Added ? marks with tooltips next to various widgets. Added more comments in the demo window.
|
||||||
|
- Examples: Added Menu-bar example.
|
||||||
|
- Examples: Added Simple Layout example.
|
||||||
|
- Examples: AutoResize demo doesn't use TextWrapped().
|
||||||
|
- Examples: Console example uses standard malloc/free, makes more sense as a copy & pastable example.
|
||||||
|
- Examples: DirectX9/11: Fixed key mapping for down arrow.
|
||||||
|
- Examples: DirectX9/11: hide OS cursor if ImGui is drawing it. (#155)
|
||||||
|
- Examples: DirectX11: explicitly set rasterizer state.
|
||||||
|
- Examples: OpenGL3: Add conditional compilation of forward compat as required by glfw on OSX. (#229)
|
||||||
|
- Fixed build with Visual Studio 2008 (possibly earlier versions as well).
|
||||||
|
- Other fixes, comments, tweaks.
|
||||||
|
|
||||||
|
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
For older version, see https://github.com/ocornut/imgui/releases
|
For older version, see https://github.com/ocornut/imgui/releases
|
||||||
|
@ -150,7 +150,7 @@ Frameworks:
|
|||||||
- Magnum: [ImGuiIntegration](https://doc.magnum.graphics/magnum/namespaceMagnum_1_1ImGuiIntegration.html) ([example](https://doc.magnum.graphics/magnum/examples-imgui.html))
|
- Magnum: [ImGuiIntegration](https://doc.magnum.graphics/magnum/namespaceMagnum_1_1ImGuiIntegration.html) ([example](https://doc.magnum.graphics/magnum/examples-imgui.html))
|
||||||
- NanoRT: [syoyo/imgui](https://github.com/syoyo/imgui/tree/nanort)
|
- NanoRT: [syoyo/imgui](https://github.com/syoyo/imgui/tree/nanort)
|
||||||
- Qt: [imgui-qt3d](https://github.com/alpqr/imgui-qt3d) / [QOpenGLWindow (qtimgui)](https://github.com/ocornut/imgui/issues/1910) / [QtDirect3D](https://github.com/giladreich/QtDirect3D) / [qt6](https://github.com/alpqr/qvk6/tree/imgui/examples/rhi/imguidemo)
|
- Qt: [imgui-qt3d](https://github.com/alpqr/imgui-qt3d) / [QOpenGLWindow (qtimgui)](https://github.com/ocornut/imgui/issues/1910) / [QtDirect3D](https://github.com/giladreich/QtDirect3D) / [qt6](https://github.com/alpqr/qvk6/tree/imgui/examples/rhi/imguidemo)
|
||||||
- SFML: [imgui-sfml](https://github.com/EliasD/imgui-sfml)
|
- SFML: [imgui-sfml](https://github.com/eliasdaler/imgui-sfml)
|
||||||
- Software renderer: [imgui_software_renderer](https://github.com/emilk/imgui_software_renderer)
|
- Software renderer: [imgui_software_renderer](https://github.com/emilk/imgui_software_renderer)
|
||||||
- Unreal Engine 4: [segross/UnrealImGui](https://github.com/segross/UnrealImGui) or [sronsse/UnrealEngine_ImGui](https://github.com/sronsse/UnrealEngine_ImGui)
|
- Unreal Engine 4: [segross/UnrealImGui](https://github.com/segross/UnrealImGui) or [sronsse/UnrealEngine_ImGui](https://github.com/sronsse/UnrealEngine_ImGui)
|
||||||
|
|
||||||
|
@ -323,6 +323,43 @@ static void ImGui_ImplGlfw_UpdateMouseCursor()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ImGui_ImplGlfw_UpdateGamepads()
|
||||||
|
{
|
||||||
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
|
memset(io.NavInputs, 0, sizeof(io.NavInputs));
|
||||||
|
if ((io.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad) == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Update gamepad inputs
|
||||||
|
#define MAP_BUTTON(NAV_NO, BUTTON_NO) { if (buttons_count > BUTTON_NO && buttons[BUTTON_NO] == GLFW_PRESS) io.NavInputs[NAV_NO] = 1.0f; }
|
||||||
|
#define MAP_ANALOG(NAV_NO, AXIS_NO, V0, V1) { float v = (axes_count > AXIS_NO) ? axes[AXIS_NO] : V0; v = (v - V0) / (V1 - V0); if (v > 1.0f) v = 1.0f; if (io.NavInputs[NAV_NO] < v) io.NavInputs[NAV_NO] = v; }
|
||||||
|
int axes_count = 0, buttons_count = 0;
|
||||||
|
const float* axes = glfwGetJoystickAxes(GLFW_JOYSTICK_1, &axes_count);
|
||||||
|
const unsigned char* buttons = glfwGetJoystickButtons(GLFW_JOYSTICK_1, &buttons_count);
|
||||||
|
MAP_BUTTON(ImGuiNavInput_Activate, 0); // Cross / A
|
||||||
|
MAP_BUTTON(ImGuiNavInput_Cancel, 1); // Circle / B
|
||||||
|
MAP_BUTTON(ImGuiNavInput_Menu, 2); // Square / X
|
||||||
|
MAP_BUTTON(ImGuiNavInput_Input, 3); // Triangle / Y
|
||||||
|
MAP_BUTTON(ImGuiNavInput_DpadLeft, 13); // D-Pad Left
|
||||||
|
MAP_BUTTON(ImGuiNavInput_DpadRight, 11); // D-Pad Right
|
||||||
|
MAP_BUTTON(ImGuiNavInput_DpadUp, 10); // D-Pad Up
|
||||||
|
MAP_BUTTON(ImGuiNavInput_DpadDown, 12); // D-Pad Down
|
||||||
|
MAP_BUTTON(ImGuiNavInput_FocusPrev, 4); // L1 / LB
|
||||||
|
MAP_BUTTON(ImGuiNavInput_FocusNext, 5); // R1 / RB
|
||||||
|
MAP_BUTTON(ImGuiNavInput_TweakSlow, 4); // L1 / LB
|
||||||
|
MAP_BUTTON(ImGuiNavInput_TweakFast, 5); // R1 / RB
|
||||||
|
MAP_ANALOG(ImGuiNavInput_LStickLeft, 0, -0.3f, -0.9f);
|
||||||
|
MAP_ANALOG(ImGuiNavInput_LStickRight,0, +0.3f, +0.9f);
|
||||||
|
MAP_ANALOG(ImGuiNavInput_LStickUp, 1, +0.3f, +0.9f);
|
||||||
|
MAP_ANALOG(ImGuiNavInput_LStickDown, 1, -0.3f, -0.9f);
|
||||||
|
#undef MAP_BUTTON
|
||||||
|
#undef MAP_ANALOG
|
||||||
|
if (axes_count > 0 && buttons_count > 0)
|
||||||
|
io.BackendFlags |= ImGuiBackendFlags_HasGamepad;
|
||||||
|
else
|
||||||
|
io.BackendFlags &= ~ImGuiBackendFlags_HasGamepad;
|
||||||
|
}
|
||||||
|
|
||||||
void ImGui_ImplGlfw_NewFrame()
|
void ImGui_ImplGlfw_NewFrame()
|
||||||
{
|
{
|
||||||
ImGuiIO& io = ImGui::GetIO();
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
@ -347,38 +384,7 @@ void ImGui_ImplGlfw_NewFrame()
|
|||||||
ImGui_ImplGlfw_UpdateMouseCursor();
|
ImGui_ImplGlfw_UpdateMouseCursor();
|
||||||
|
|
||||||
// Gamepad navigation mapping
|
// Gamepad navigation mapping
|
||||||
memset(io.NavInputs, 0, sizeof(io.NavInputs));
|
ImGui_ImplGlfw_UpdateGamepads();
|
||||||
if (io.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad)
|
|
||||||
{
|
|
||||||
// Update gamepad inputs
|
|
||||||
#define MAP_BUTTON(NAV_NO, BUTTON_NO) { if (buttons_count > BUTTON_NO && buttons[BUTTON_NO] == GLFW_PRESS) io.NavInputs[NAV_NO] = 1.0f; }
|
|
||||||
#define MAP_ANALOG(NAV_NO, AXIS_NO, V0, V1) { float v = (axes_count > AXIS_NO) ? axes[AXIS_NO] : V0; v = (v - V0) / (V1 - V0); if (v > 1.0f) v = 1.0f; if (io.NavInputs[NAV_NO] < v) io.NavInputs[NAV_NO] = v; }
|
|
||||||
int axes_count = 0, buttons_count = 0;
|
|
||||||
const float* axes = glfwGetJoystickAxes(GLFW_JOYSTICK_1, &axes_count);
|
|
||||||
const unsigned char* buttons = glfwGetJoystickButtons(GLFW_JOYSTICK_1, &buttons_count);
|
|
||||||
MAP_BUTTON(ImGuiNavInput_Activate, 0); // Cross / A
|
|
||||||
MAP_BUTTON(ImGuiNavInput_Cancel, 1); // Circle / B
|
|
||||||
MAP_BUTTON(ImGuiNavInput_Menu, 2); // Square / X
|
|
||||||
MAP_BUTTON(ImGuiNavInput_Input, 3); // Triangle / Y
|
|
||||||
MAP_BUTTON(ImGuiNavInput_DpadLeft, 13); // D-Pad Left
|
|
||||||
MAP_BUTTON(ImGuiNavInput_DpadRight, 11); // D-Pad Right
|
|
||||||
MAP_BUTTON(ImGuiNavInput_DpadUp, 10); // D-Pad Up
|
|
||||||
MAP_BUTTON(ImGuiNavInput_DpadDown, 12); // D-Pad Down
|
|
||||||
MAP_BUTTON(ImGuiNavInput_FocusPrev, 4); // L1 / LB
|
|
||||||
MAP_BUTTON(ImGuiNavInput_FocusNext, 5); // R1 / RB
|
|
||||||
MAP_BUTTON(ImGuiNavInput_TweakSlow, 4); // L1 / LB
|
|
||||||
MAP_BUTTON(ImGuiNavInput_TweakFast, 5); // R1 / RB
|
|
||||||
MAP_ANALOG(ImGuiNavInput_LStickLeft, 0, -0.3f, -0.9f);
|
|
||||||
MAP_ANALOG(ImGuiNavInput_LStickRight,0, +0.3f, +0.9f);
|
|
||||||
MAP_ANALOG(ImGuiNavInput_LStickUp, 1, +0.3f, +0.9f);
|
|
||||||
MAP_ANALOG(ImGuiNavInput_LStickDown, 1, -0.3f, -0.9f);
|
|
||||||
#undef MAP_BUTTON
|
|
||||||
#undef MAP_ANALOG
|
|
||||||
if (axes_count > 0 && buttons_count > 0)
|
|
||||||
io.BackendFlags |= ImGuiBackendFlags_HasGamepad;
|
|
||||||
else
|
|
||||||
io.BackendFlags &= ~ImGuiBackendFlags_HasGamepad;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------------
|
||||||
|
@ -204,7 +204,7 @@ static void ImGui_ImplWin32_UpdateMousePos()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Gamepad navigation mapping
|
// Gamepad navigation mapping
|
||||||
void ImGui_ImplWin32_UpdateGameControllers()
|
static void ImGui_ImplWin32_UpdateGamepads()
|
||||||
{
|
{
|
||||||
ImGuiIO& io = ImGui::GetIO();
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
memset(io.NavInputs, 0, sizeof(io.NavInputs));
|
memset(io.NavInputs, 0, sizeof(io.NavInputs));
|
||||||
@ -287,7 +287,7 @@ void ImGui_ImplWin32_NewFrame()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Update game controllers (if available)
|
// Update game controllers (if available)
|
||||||
ImGui_ImplWin32_UpdateGameControllers();
|
ImGui_ImplWin32_UpdateGamepads();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Allow compilation with old Windows SDK. MinGW doesn't have default _WIN32_WINNT/WINVER versions.
|
// Allow compilation with old Windows SDK. MinGW doesn't have default _WIN32_WINNT/WINVER versions.
|
||||||
|
67
imgui.cpp
67
imgui.cpp
@ -375,6 +375,7 @@ CODE
|
|||||||
- 2018/XX/XX (1.XX) - Moved IME support functions from io.ImeSetInputScreenPosFn, io.ImeWindowHandle to the PlatformIO api.
|
- 2018/XX/XX (1.XX) - Moved IME support functions from io.ImeSetInputScreenPosFn, io.ImeWindowHandle to the PlatformIO api.
|
||||||
|
|
||||||
|
|
||||||
|
- 2019/02/14 (1.68) - made it illegal/assert when io.DisplayTime == 0.0f (with an exception for the first frame). If for some reason your time step calculation gives you a zero value, replace it with a dummy small value!
|
||||||
- 2019/02/01 (1.68) - removed io.DisplayVisibleMin/DisplayVisibleMax (which were marked obsolete and removed from viewport/docking branch already).
|
- 2019/02/01 (1.68) - removed io.DisplayVisibleMin/DisplayVisibleMax (which were marked obsolete and removed from viewport/docking branch already).
|
||||||
- 2019/01/06 (1.67) - renamed io.InputCharacters[], marked internal as was always intended. Please don't access directly, and use AddInputCharacter() instead!
|
- 2019/01/06 (1.67) - renamed io.InputCharacters[], marked internal as was always intended. Please don't access directly, and use AddInputCharacter() instead!
|
||||||
- 2019/01/06 (1.67) - renamed ImFontAtlas::GlyphRangesBuilder to ImFontGlyphRangesBuilder. Keep redirection typedef (will obsolete).
|
- 2019/01/06 (1.67) - renamed ImFontAtlas::GlyphRangesBuilder to ImFontGlyphRangesBuilder. Keep redirection typedef (will obsolete).
|
||||||
@ -816,9 +817,9 @@ CODE
|
|||||||
|
|
||||||
// Options
|
// Options
|
||||||
ImFontConfig config;
|
ImFontConfig config;
|
||||||
config.OversampleH = 3;
|
config.OversampleH = 2;
|
||||||
config.OversampleV = 1;
|
config.OversampleV = 1;
|
||||||
config.GlyphOffset.y -= 2.0f; // Move everything by 2 pixels up
|
config.GlyphOffset.y -= 1.0f; // Move everything by 1 pixels up
|
||||||
config.GlyphExtraSpacing.x = 1.0f; // Increase spacing between characters
|
config.GlyphExtraSpacing.x = 1.0f; // Increase spacing between characters
|
||||||
io.Fonts->AddFontFromFileTTF("myfontfile.ttf", size_pixels, &config);
|
io.Fonts->AddFontFromFileTTF("myfontfile.ttf", size_pixels, &config);
|
||||||
|
|
||||||
@ -1128,6 +1129,7 @@ ImGuiStyle::ImGuiStyle()
|
|||||||
TabRounding = 4.0f; // Radius of upper corners of a tab. Set to 0.0f to have rectangular tabs.
|
TabRounding = 4.0f; // Radius of upper corners of a tab. Set to 0.0f to have rectangular tabs.
|
||||||
TabBorderSize = 0.0f; // Thickness of border around tabs.
|
TabBorderSize = 0.0f; // Thickness of border around tabs.
|
||||||
ButtonTextAlign = ImVec2(0.5f,0.5f);// Alignment of button text when button is larger than text.
|
ButtonTextAlign = ImVec2(0.5f,0.5f);// Alignment of button text when button is larger than text.
|
||||||
|
SelectableTextAlign = ImVec2(0.0f,0.0f);// Alignment of selectable text when button is larger than text.
|
||||||
DisplayWindowPadding = ImVec2(19,19); // Window position are clamped to be visible within the display area or monitors by at least this amount. Only applies to regular windows.
|
DisplayWindowPadding = ImVec2(19,19); // Window position are clamped to be visible within the display area or monitors by at least this amount. Only applies to regular windows.
|
||||||
DisplaySafeAreaPadding = ImVec2(3,3); // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows.
|
DisplaySafeAreaPadding = ImVec2(3,3); // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows.
|
||||||
MouseCursorScale = 1.0f; // Scale software rendered mouse cursor (when io.MouseDrawCursor is enabled). May be removed later.
|
MouseCursorScale = 1.0f; // Scale software rendered mouse cursor (when io.MouseDrawCursor is enabled). May be removed later.
|
||||||
@ -3488,12 +3490,12 @@ void ImGui::NewFrame()
|
|||||||
// Check user data
|
// Check user data
|
||||||
// (We pass an error message in the assert expression to make it visible to programmers who are not using a debugger, as most assert handlers display their argument)
|
// (We pass an error message in the assert expression to make it visible to programmers who are not using a debugger, as most assert handlers display their argument)
|
||||||
IM_ASSERT(g.Initialized);
|
IM_ASSERT(g.Initialized);
|
||||||
IM_ASSERT(g.IO.DeltaTime >= 0.0f && "Need a positive DeltaTime (zero is tolerated but will cause some timing issues)");
|
IM_ASSERT((g.IO.DeltaTime > 0.0f || g.FrameCount == 0) && "Need a positive DeltaTime!");
|
||||||
IM_ASSERT(g.IO.DisplaySize.x >= 0.0f && g.IO.DisplaySize.y >= 0.0f && "Invalid DisplaySize value");
|
IM_ASSERT(g.IO.DisplaySize.x >= 0.0f && g.IO.DisplaySize.y >= 0.0f && "Invalid DisplaySize value!");
|
||||||
IM_ASSERT(g.IO.Fonts->Fonts.Size > 0 && "Font Atlas not built. Did you call io.Fonts->GetTexDataAsRGBA32() / GetTexDataAsAlpha8() ?");
|
IM_ASSERT(g.IO.Fonts->Fonts.Size > 0 && "Font Atlas not built. Did you call io.Fonts->GetTexDataAsRGBA32() / GetTexDataAsAlpha8() ?");
|
||||||
IM_ASSERT(g.IO.Fonts->Fonts[0]->IsLoaded() && "Font Atlas not built. Did you call io.Fonts->GetTexDataAsRGBA32() / GetTexDataAsAlpha8() ?");
|
IM_ASSERT(g.IO.Fonts->Fonts[0]->IsLoaded() && "Font Atlas not built. Did you call io.Fonts->GetTexDataAsRGBA32() / GetTexDataAsAlpha8() ?");
|
||||||
IM_ASSERT(g.Style.CurveTessellationTol > 0.0f && "Invalid style setting");
|
IM_ASSERT(g.Style.CurveTessellationTol > 0.0f && "Invalid style setting!");
|
||||||
IM_ASSERT(g.Style.Alpha >= 0.0f && g.Style.Alpha <= 1.0f && "Invalid style setting. Alpha cannot be negative (allows us to avoid a few clamps in color computations)");
|
IM_ASSERT(g.Style.Alpha >= 0.0f && g.Style.Alpha <= 1.0f && "Invalid style setting. Alpha cannot be negative (allows us to avoid a few clamps in color computations)!");
|
||||||
IM_ASSERT((g.FrameCount == 0 || g.FrameCountEnded == g.FrameCount) && "Forgot to call Render() or EndFrame() at the end of the previous frame?");
|
IM_ASSERT((g.FrameCount == 0 || g.FrameCountEnded == g.FrameCount) && "Forgot to call Render() or EndFrame() at the end of the previous frame?");
|
||||||
for (int n = 0; n < ImGuiKey_COUNT; n++)
|
for (int n = 0; n < ImGuiKey_COUNT; n++)
|
||||||
IM_ASSERT(g.IO.KeyMap[n] >= -1 && g.IO.KeyMap[n] < IM_ARRAYSIZE(g.IO.KeysDown) && "io.KeyMap[] contains an out of bound value (need to be 0..512, or -1 for unmapped key)");
|
IM_ASSERT(g.IO.KeyMap[n] >= -1 && g.IO.KeyMap[n] < IM_ARRAYSIZE(g.IO.KeysDown) && "io.KeyMap[] contains an out of bound value (need to be 0..512, or -1 for unmapped key)");
|
||||||
@ -4185,11 +4187,7 @@ ImVec2 ImGui::CalcTextSize(const char* text, const char* text_end, bool hide_tex
|
|||||||
return ImVec2(0.0f, font_size);
|
return ImVec2(0.0f, font_size);
|
||||||
ImVec2 text_size = font->CalcTextSizeA(font_size, FLT_MAX, wrap_width, text, text_display_end, NULL);
|
ImVec2 text_size = font->CalcTextSizeA(font_size, FLT_MAX, wrap_width, text, text_display_end, NULL);
|
||||||
|
|
||||||
// Cancel out character spacing for the last character of a line (it is baked into glyph->AdvanceX field)
|
// Round
|
||||||
const float font_scale = font_size / font->FontSize;
|
|
||||||
const float character_spacing_x = 1.0f * font_scale;
|
|
||||||
if (text_size.x > 0.0f)
|
|
||||||
text_size.x -= character_spacing_x;
|
|
||||||
text_size.x = (float)(int)(text_size.x + 0.95f);
|
text_size.x = (float)(int)(text_size.x + 0.95f);
|
||||||
|
|
||||||
return text_size;
|
return text_size;
|
||||||
@ -6335,28 +6333,29 @@ struct ImGuiStyleVarInfo
|
|||||||
|
|
||||||
static const ImGuiStyleVarInfo GStyleVarInfo[] =
|
static const ImGuiStyleVarInfo GStyleVarInfo[] =
|
||||||
{
|
{
|
||||||
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, Alpha) }, // ImGuiStyleVar_Alpha
|
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, Alpha) }, // ImGuiStyleVar_Alpha
|
||||||
{ ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowPadding) }, // ImGuiStyleVar_WindowPadding
|
{ ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowPadding) }, // ImGuiStyleVar_WindowPadding
|
||||||
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowRounding) }, // ImGuiStyleVar_WindowRounding
|
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowRounding) }, // ImGuiStyleVar_WindowRounding
|
||||||
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowBorderSize) }, // ImGuiStyleVar_WindowBorderSize
|
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowBorderSize) }, // ImGuiStyleVar_WindowBorderSize
|
||||||
{ ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowMinSize) }, // ImGuiStyleVar_WindowMinSize
|
{ ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowMinSize) }, // ImGuiStyleVar_WindowMinSize
|
||||||
{ ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowTitleAlign) }, // ImGuiStyleVar_WindowTitleAlign
|
{ ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowTitleAlign) }, // ImGuiStyleVar_WindowTitleAlign
|
||||||
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ChildRounding) }, // ImGuiStyleVar_ChildRounding
|
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ChildRounding) }, // ImGuiStyleVar_ChildRounding
|
||||||
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ChildBorderSize) }, // ImGuiStyleVar_ChildBorderSize
|
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ChildBorderSize) }, // ImGuiStyleVar_ChildBorderSize
|
||||||
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, PopupRounding) }, // ImGuiStyleVar_PopupRounding
|
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, PopupRounding) }, // ImGuiStyleVar_PopupRounding
|
||||||
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, PopupBorderSize) }, // ImGuiStyleVar_PopupBorderSize
|
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, PopupBorderSize) }, // ImGuiStyleVar_PopupBorderSize
|
||||||
{ ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, FramePadding) }, // ImGuiStyleVar_FramePadding
|
{ ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, FramePadding) }, // ImGuiStyleVar_FramePadding
|
||||||
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, FrameRounding) }, // ImGuiStyleVar_FrameRounding
|
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, FrameRounding) }, // ImGuiStyleVar_FrameRounding
|
||||||
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, FrameBorderSize) }, // ImGuiStyleVar_FrameBorderSize
|
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, FrameBorderSize) }, // ImGuiStyleVar_FrameBorderSize
|
||||||
{ ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, ItemSpacing) }, // ImGuiStyleVar_ItemSpacing
|
{ ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, ItemSpacing) }, // ImGuiStyleVar_ItemSpacing
|
||||||
{ ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, ItemInnerSpacing) }, // ImGuiStyleVar_ItemInnerSpacing
|
{ ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, ItemInnerSpacing) }, // ImGuiStyleVar_ItemInnerSpacing
|
||||||
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, IndentSpacing) }, // ImGuiStyleVar_IndentSpacing
|
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, IndentSpacing) }, // ImGuiStyleVar_IndentSpacing
|
||||||
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ScrollbarSize) }, // ImGuiStyleVar_ScrollbarSize
|
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ScrollbarSize) }, // ImGuiStyleVar_ScrollbarSize
|
||||||
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ScrollbarRounding) }, // ImGuiStyleVar_ScrollbarRounding
|
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ScrollbarRounding) }, // ImGuiStyleVar_ScrollbarRounding
|
||||||
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, GrabMinSize) }, // ImGuiStyleVar_GrabMinSize
|
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, GrabMinSize) }, // ImGuiStyleVar_GrabMinSize
|
||||||
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, GrabRounding) }, // ImGuiStyleVar_GrabRounding
|
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, GrabRounding) }, // ImGuiStyleVar_GrabRounding
|
||||||
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, TabRounding) }, // ImGuiStyleVar_TabRounding
|
{ ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, TabRounding) }, // ImGuiStyleVar_TabRounding
|
||||||
{ ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, ButtonTextAlign) }, // ImGuiStyleVar_ButtonTextAlign
|
{ ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, ButtonTextAlign) }, // ImGuiStyleVar_ButtonTextAlign
|
||||||
|
{ ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, SelectableTextAlign) }, // ImGuiStyleVar_SelectableTextAlign
|
||||||
};
|
};
|
||||||
|
|
||||||
static const ImGuiStyleVarInfo* GetStyleVarInfo(ImGuiStyleVar idx)
|
static const ImGuiStyleVarInfo* GetStyleVarInfo(ImGuiStyleVar idx)
|
||||||
@ -13789,7 +13788,7 @@ void ImGui::ShowMetricsWindow(bool* p_open)
|
|||||||
if (draw_list == ImGui::GetWindowDrawList())
|
if (draw_list == ImGui::GetWindowDrawList())
|
||||||
{
|
{
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
ImGui::TextColored(ImColor(255,100,100), "CURRENTLY APPENDING"); // Can't display stats for active draw list! (we don't have the data double-buffered)
|
ImGui::TextColored(ImVec4(1.0f,0.4f,0.4f,1.0f), "CURRENTLY APPENDING"); // Can't display stats for active draw list! (we don't have the data double-buffered)
|
||||||
if (node_open) ImGui::TreePop();
|
if (node_open) ImGui::TreePop();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
38
imgui.h
38
imgui.h
@ -1151,6 +1151,7 @@ enum ImGuiStyleVar_
|
|||||||
ImGuiStyleVar_GrabRounding, // float GrabRounding
|
ImGuiStyleVar_GrabRounding, // float GrabRounding
|
||||||
ImGuiStyleVar_TabRounding, // float TabRounding
|
ImGuiStyleVar_TabRounding, // float TabRounding
|
||||||
ImGuiStyleVar_ButtonTextAlign, // ImVec2 ButtonTextAlign
|
ImGuiStyleVar_ButtonTextAlign, // ImVec2 ButtonTextAlign
|
||||||
|
ImGuiStyleVar_SelectableTextAlign, // ImVec2 SelectableTextAlign
|
||||||
ImGuiStyleVar_COUNT
|
ImGuiStyleVar_COUNT
|
||||||
|
|
||||||
// Obsolete names (will be removed)
|
// Obsolete names (will be removed)
|
||||||
@ -1325,7 +1326,8 @@ struct ImGuiStyle
|
|||||||
float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs.
|
float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs.
|
||||||
float TabRounding; // Radius of upper corners of a tab. Set to 0.0f to have rectangular tabs.
|
float TabRounding; // Radius of upper corners of a tab. Set to 0.0f to have rectangular tabs.
|
||||||
float TabBorderSize; // Thickness of border around tabs.
|
float TabBorderSize; // Thickness of border around tabs.
|
||||||
ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered.
|
ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f, 0.5f) (centered).
|
||||||
|
ImVec2 SelectableTextAlign; // Alignment of selectable text when selectable is larger than text. Defaults to (0.0f, 0.0f) (top-left aligned).
|
||||||
ImVec2 DisplayWindowPadding; // Window position are clamped to be visible within the display area or monitors by at least this amount. Only applies to regular windows.
|
ImVec2 DisplayWindowPadding; // Window position are clamped to be visible within the display area or monitors by at least this amount. Only applies to regular windows.
|
||||||
ImVec2 DisplaySafeAreaPadding; // If you cannot see the edges of your screen (e.g. on a TV) increase the safe area padding. Apply to popups/tooltips as well regular windows. NB: Prefer configuring your TV sets correctly!
|
ImVec2 DisplaySafeAreaPadding; // If you cannot see the edges of your screen (e.g. on a TV) increase the safe area padding. Apply to popups/tooltips as well regular windows. NB: Prefer configuring your TV sets correctly!
|
||||||
float MouseCursorScale; // Scale software rendered mouse cursor (when io.MouseDrawCursor is enabled). May be removed later.
|
float MouseCursorScale; // Scale software rendered mouse cursor (when io.MouseDrawCursor is enabled). May be removed later.
|
||||||
@ -2004,8 +2006,8 @@ struct ImFontConfig
|
|||||||
bool FontDataOwnedByAtlas; // true // TTF/OTF data ownership taken by the container ImFontAtlas (will delete memory itself).
|
bool FontDataOwnedByAtlas; // true // TTF/OTF data ownership taken by the container ImFontAtlas (will delete memory itself).
|
||||||
int FontNo; // 0 // Index of font within TTF/OTF file
|
int FontNo; // 0 // Index of font within TTF/OTF file
|
||||||
float SizePixels; // // Size in pixels for rasterizer (more or less maps to the resulting font height).
|
float SizePixels; // // Size in pixels for rasterizer (more or less maps to the resulting font height).
|
||||||
int OversampleH; // 3 // Rasterize at higher quality for sub-pixel positioning. We don't use sub-pixel positions on the Y axis.
|
int OversampleH; // 3 // Rasterize at higher quality for sub-pixel positioning. Read https://github.com/nothings/stb/blob/master/tests/oversample/README.md for details.
|
||||||
int OversampleV; // 1 // Rasterize at higher quality for sub-pixel positioning. We don't use sub-pixel positions on the Y axis.
|
int OversampleV; // 1 // Rasterize at higher quality for sub-pixel positioning. We don't use sub-pixel positions on the Y axis.
|
||||||
bool PixelSnapH; // false // Align every glyph to pixel boundary. Useful e.g. if you are merging a non-pixel aligned font with the default font. If enabled, you can set OversampleH/V to 1.
|
bool PixelSnapH; // false // Align every glyph to pixel boundary. Useful e.g. if you are merging a non-pixel aligned font with the default font. If enabled, you can set OversampleH/V to 1.
|
||||||
ImVec2 GlyphExtraSpacing; // 0, 0 // Extra spacing (in pixels) between glyphs. Only X axis is supported for now.
|
ImVec2 GlyphExtraSpacing; // 0, 0 // Extra spacing (in pixels) between glyphs. Only X axis is supported for now.
|
||||||
ImVec2 GlyphOffset; // 0, 0 // Offset all glyphs from this font input.
|
ImVec2 GlyphOffset; // 0, 0 // Offset all glyphs from this font input.
|
||||||
@ -2038,12 +2040,12 @@ struct ImFontGlyphRangesBuilder
|
|||||||
ImVector<int> UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used)
|
ImVector<int> UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used)
|
||||||
|
|
||||||
ImFontGlyphRangesBuilder() { UsedChars.resize(0x10000 / sizeof(int)); memset(UsedChars.Data, 0, 0x10000 / sizeof(int)); }
|
ImFontGlyphRangesBuilder() { UsedChars.resize(0x10000 / sizeof(int)); memset(UsedChars.Data, 0, 0x10000 / sizeof(int)); }
|
||||||
bool GetBit(int n) const { int off = (n >> 5); int mask = 1 << (n & 31); return (UsedChars[off] & mask) != 0; } // Get bit n in the array
|
bool GetBit(int n) const { int off = (n >> 5); int mask = 1 << (n & 31); return (UsedChars[off] & mask) != 0; } // Get bit n in the array
|
||||||
void SetBit(int n) { int off = (n >> 5); int mask = 1 << (n & 31); UsedChars[off] |= mask; } // Set bit n in the array
|
void SetBit(int n) { int off = (n >> 5); int mask = 1 << (n & 31); UsedChars[off] |= mask; } // Set bit n in the array
|
||||||
void AddChar(ImWchar c) { SetBit(c); } // Add character
|
void AddChar(ImWchar c) { SetBit(c); } // Add character
|
||||||
IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added)
|
IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added)
|
||||||
IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault()) to force add all of ASCII/Latin+Ext
|
IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault()) to force add all of ASCII/Latin+Ext
|
||||||
IMGUI_API void BuildRanges(ImVector<ImWchar>* out_ranges); // Output new ranges
|
IMGUI_API void BuildRanges(ImVector<ImWchar>* out_ranges); // Output new ranges
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ImFontAtlasFlags_
|
enum ImFontAtlasFlags_
|
||||||
@ -2170,7 +2172,7 @@ struct ImFontAtlas
|
|||||||
struct ImFont
|
struct ImFont
|
||||||
{
|
{
|
||||||
// Members: Hot ~24/32 bytes (for CalcTextSize)
|
// Members: Hot ~24/32 bytes (for CalcTextSize)
|
||||||
ImVector<float> IndexAdvanceX; // 12/16 // out // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI).
|
ImVector<float> IndexAdvanceX; // 12/16 // out // // Sparse. Glyphs->AdvanceX in a directly indexable way (cache-friendly for CalcTextSize functions which only this this info, and are often bottleneck in large UI).
|
||||||
float FontSize; // 4 // in // <user set> // Height of characters, set during loading (don't change after loading)
|
float FontSize; // 4 // in // <user set> // Height of characters, set during loading (don't change after loading)
|
||||||
float FallbackAdvanceX; // 4 // out // = FallbackGlyph->AdvanceX
|
float FallbackAdvanceX; // 4 // out // = FallbackGlyph->AdvanceX
|
||||||
ImWchar FallbackChar; // 2 // in // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar()
|
ImWchar FallbackChar; // 2 // in // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar()
|
||||||
@ -2183,21 +2185,18 @@ struct ImFont
|
|||||||
|
|
||||||
// Members: Cold ~28/40 bytes
|
// Members: Cold ~28/40 bytes
|
||||||
ImFontAtlas* ContainerAtlas; // 4-8 // out // // What we has been loaded into
|
ImFontAtlas* ContainerAtlas; // 4-8 // out // // What we has been loaded into
|
||||||
ImFontConfig* ConfigData; // 4-8 // in // // Pointer within ContainerAtlas->ConfigData
|
const ImFontConfig* ConfigData; // 4-8 // in // // Pointer within ContainerAtlas->ConfigData
|
||||||
short ConfigDataCount; // 2 // in // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont.
|
short ConfigDataCount; // 2 // in // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont.
|
||||||
bool DirtyLookupTables; // 1 // out //
|
bool DirtyLookupTables; // 1 // out //
|
||||||
float Scale; // 4 // in // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetWindowFontScale()
|
float Scale; // 4 // in // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetWindowFontScale()
|
||||||
float Ascent, Descent; // 8 // out // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize]
|
float Ascent, Descent; // 8 // out // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize]
|
||||||
int MetricsTotalSurface;// 4 // out // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs)
|
int MetricsTotalSurface;// 4 // out // // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs)
|
||||||
|
|
||||||
// Methods
|
// Methods
|
||||||
IMGUI_API ImFont();
|
IMGUI_API ImFont();
|
||||||
IMGUI_API ~ImFont();
|
IMGUI_API ~ImFont();
|
||||||
IMGUI_API void ClearOutputData();
|
|
||||||
IMGUI_API void BuildLookupTable();
|
|
||||||
IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const;
|
IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const;
|
||||||
IMGUI_API const ImFontGlyph*FindGlyphNoFallback(ImWchar c) const;
|
IMGUI_API const ImFontGlyph*FindGlyphNoFallback(ImWchar c) const;
|
||||||
IMGUI_API void SetFallbackChar(ImWchar c);
|
|
||||||
float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; }
|
float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; }
|
||||||
bool IsLoaded() const { return ContainerAtlas != NULL; }
|
bool IsLoaded() const { return ContainerAtlas != NULL; }
|
||||||
const char* GetDebugName() const { return ConfigData ? ConfigData->Name : "<unknown>"; }
|
const char* GetDebugName() const { return ConfigData ? ConfigData->Name : "<unknown>"; }
|
||||||
@ -2209,10 +2208,13 @@ struct ImFont
|
|||||||
IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, ImWchar c) const;
|
IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, ImWchar c) const;
|
||||||
IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const;
|
IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const;
|
||||||
|
|
||||||
// [Internal]
|
// [Internal] Don't use!
|
||||||
|
IMGUI_API void BuildLookupTable();
|
||||||
|
IMGUI_API void ClearOutputData();
|
||||||
IMGUI_API void GrowIndex(int new_size);
|
IMGUI_API void GrowIndex(int new_size);
|
||||||
IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x);
|
IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x);
|
||||||
IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built.
|
IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built.
|
||||||
|
IMGUI_API void SetFallbackChar(ImWchar c);
|
||||||
|
|
||||||
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
||||||
typedef ImFontGlyph Glyph; // OBSOLETE 1.52+
|
typedef ImFontGlyph Glyph; // OBSOLETE 1.52+
|
||||||
|
115
imgui_demo.cpp
115
imgui_demo.cpp
@ -63,7 +63,6 @@ Index of this file:
|
|||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
#pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen
|
#pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen
|
||||||
#define vsnprintf _vsnprintf
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef __clang__
|
#ifdef __clang__
|
||||||
#pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse.
|
#pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse.
|
||||||
@ -71,6 +70,7 @@ Index of this file:
|
|||||||
#pragma clang diagnostic ignored "-Wint-to-void-pointer-cast" // warning : cast to 'void *' from smaller integer type 'int'
|
#pragma clang diagnostic ignored "-Wint-to-void-pointer-cast" // warning : cast to 'void *' from smaller integer type 'int'
|
||||||
#pragma clang diagnostic ignored "-Wformat-security" // warning : warning: format string is not a string literal
|
#pragma clang diagnostic ignored "-Wformat-security" // warning : warning: format string is not a string literal
|
||||||
#pragma clang diagnostic ignored "-Wexit-time-destructors" // warning : declaration requires an exit-time destructor // exit-time destruction order is undefined. if MemFree() leads to users code that has been disabled before exit it might cause problems. ImGui coding style welcomes static/globals.
|
#pragma clang diagnostic ignored "-Wexit-time-destructors" // warning : declaration requires an exit-time destructor // exit-time destruction order is undefined. if MemFree() leads to users code that has been disabled before exit it might cause problems. ImGui coding style welcomes static/globals.
|
||||||
|
#pragma clang diagnostic ignored "-Wunused-macros" // warning : warning: macro is not used // we define snprintf/vsnprintf on Windows so they are available, but not always used.
|
||||||
#if __has_warning("-Wzero-as-null-pointer-constant")
|
#if __has_warning("-Wzero-as-null-pointer-constant")
|
||||||
#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" // warning : zero as null pointer constant // some standard header variations use #define NULL 0
|
#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" // warning : zero as null pointer constant // some standard header variations use #define NULL 0
|
||||||
#endif
|
#endif
|
||||||
@ -92,9 +92,11 @@ Index of this file:
|
|||||||
|
|
||||||
// Play it nice with Windows users. Notepad in 2017 still doesn't display text data with Unix-style \n.
|
// Play it nice with Windows users. Notepad in 2017 still doesn't display text data with Unix-style \n.
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#define IM_NEWLINE "\r\n"
|
#define IM_NEWLINE "\r\n"
|
||||||
|
#define snprintf _snprintf
|
||||||
|
#define vsnprintf _vsnprintf
|
||||||
#else
|
#else
|
||||||
#define IM_NEWLINE "\n"
|
#define IM_NEWLINE "\n"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define IM_MAX(_A,_B) (((_A) >= (_B)) ? (_A) : (_B))
|
#define IM_MAX(_A,_B) (((_A) >= (_B)) ? (_A) : (_B))
|
||||||
@ -948,6 +950,25 @@ static void ShowDemoWindowWidgets()
|
|||||||
}
|
}
|
||||||
ImGui::TreePop();
|
ImGui::TreePop();
|
||||||
}
|
}
|
||||||
|
if (ImGui::TreeNode("Alignment"))
|
||||||
|
{
|
||||||
|
ShowHelpMarker("Alignment applies when a selectable is larger than its text content.\nBy default, Selectables uses style.SelectableTextAlign but it can be overriden on a per-item basis using PushStyleVar().");
|
||||||
|
static bool selected[3*3] = { true, false, true, false, true, false, true, false, true };
|
||||||
|
for (int y = 0; y < 3; y++)
|
||||||
|
{
|
||||||
|
for (int x = 0; x < 3; x++)
|
||||||
|
{
|
||||||
|
ImVec2 alignment = ImVec2((float)x / 2.0f, (float)y / 2.0f);
|
||||||
|
char name[32];
|
||||||
|
sprintf(name, "(%.1f,%.1f)", alignment.x, alignment.y);
|
||||||
|
if (x > 0) ImGui::SameLine();
|
||||||
|
ImGui::PushStyleVar(ImGuiStyleVar_SelectableTextAlign, alignment);
|
||||||
|
ImGui::Selectable(name, &selected[3*y+x], ImGuiSelectableFlags_None, ImVec2(80,80));
|
||||||
|
ImGui::PopStyleVar();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ImGui::TreePop();
|
||||||
|
}
|
||||||
ImGui::TreePop();
|
ImGui::TreePop();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1060,7 +1081,7 @@ static void ShowDemoWindowWidgets()
|
|||||||
|
|
||||||
if (ImGui::TreeNode("Color/Picker Widgets"))
|
if (ImGui::TreeNode("Color/Picker Widgets"))
|
||||||
{
|
{
|
||||||
static ImVec4 color = ImColor(114, 144, 154, 200);
|
static ImVec4 color = ImVec4(114.0f/255.0f, 144.0f/255.0f, 154.0f/255.0f, 200.0f/255.0f);
|
||||||
|
|
||||||
static bool alpha_preview = true;
|
static bool alpha_preview = true;
|
||||||
static bool alpha_half_preview = false;
|
static bool alpha_half_preview = false;
|
||||||
@ -2905,6 +2926,7 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
|
|||||||
ImGui::Text("Alignment");
|
ImGui::Text("Alignment");
|
||||||
ImGui::SliderFloat2("WindowTitleAlign", (float*)&style.WindowTitleAlign, 0.0f, 1.0f, "%.2f");
|
ImGui::SliderFloat2("WindowTitleAlign", (float*)&style.WindowTitleAlign, 0.0f, 1.0f, "%.2f");
|
||||||
ImGui::SliderFloat2("ButtonTextAlign", (float*)&style.ButtonTextAlign, 0.0f, 1.0f, "%.2f"); ImGui::SameLine(); ShowHelpMarker("Alignment applies when a button is larger than its text content.");
|
ImGui::SliderFloat2("ButtonTextAlign", (float*)&style.ButtonTextAlign, 0.0f, 1.0f, "%.2f"); ImGui::SameLine(); ShowHelpMarker("Alignment applies when a button is larger than its text content.");
|
||||||
|
ImGui::SliderFloat2("SelectableTextAlign", (float*)&style.SelectableTextAlign, 0.0f, 1.0f, "%.2f"); ImGui::SameLine(); ShowHelpMarker("Alignment applies when a selectable is larger than its text content.");
|
||||||
ImGui::Text("Safe Area Padding"); ImGui::SameLine(); ShowHelpMarker("Adjust if you cannot see the edges of your screen (e.g. on a TV where scaling has not been configured).");
|
ImGui::Text("Safe Area Padding"); ImGui::SameLine(); ShowHelpMarker("Adjust if you cannot see the edges of your screen (e.g. on a TV where scaling has not been configured).");
|
||||||
ImGui::SliderFloat2("DisplaySafeAreaPadding", (float*)&style.DisplaySafeAreaPadding, 0.0f, 30.0f, "%.0f");
|
ImGui::SliderFloat2("DisplaySafeAreaPadding", (float*)&style.DisplaySafeAreaPadding, 0.0f, 30.0f, "%.0f");
|
||||||
ImGui::EndTabItem();
|
ImGui::EndTabItem();
|
||||||
@ -2993,7 +3015,7 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
|
|||||||
const float surface_sqrt = sqrtf((float)font->MetricsTotalSurface);
|
const float surface_sqrt = sqrtf((float)font->MetricsTotalSurface);
|
||||||
ImGui::Text("Texture surface: %d pixels (approx) ~ %dx%d", font->MetricsTotalSurface, (int)surface_sqrt, (int)surface_sqrt);
|
ImGui::Text("Texture surface: %d pixels (approx) ~ %dx%d", font->MetricsTotalSurface, (int)surface_sqrt, (int)surface_sqrt);
|
||||||
for (int config_i = 0; config_i < font->ConfigDataCount; config_i++)
|
for (int config_i = 0; config_i < font->ConfigDataCount; config_i++)
|
||||||
if (ImFontConfig* cfg = &font->ConfigData[config_i])
|
if (const ImFontConfig* cfg = &font->ConfigData[config_i])
|
||||||
ImGui::BulletText("Input %d: \'%s\', Oversample: (%d,%d), PixelSnapH: %d", config_i, cfg->Name, cfg->OversampleH, cfg->OversampleV, cfg->PixelSnapH);
|
ImGui::BulletText("Input %d: \'%s\', Oversample: (%d,%d), PixelSnapH: %d", config_i, cfg->Name, cfg->OversampleH, cfg->OversampleV, cfg->PixelSnapH);
|
||||||
if (ImGui::TreeNode("Glyphs", "Glyphs (%d)", font->Glyphs.Size))
|
if (ImGui::TreeNode("Glyphs", "Glyphs (%d)", font->Glyphs.Size))
|
||||||
{
|
{
|
||||||
@ -3175,10 +3197,12 @@ struct ExampleAppConsole
|
|||||||
{
|
{
|
||||||
char InputBuf[256];
|
char InputBuf[256];
|
||||||
ImVector<char*> Items;
|
ImVector<char*> Items;
|
||||||
bool ScrollToBottom;
|
ImVector<const char*> Commands;
|
||||||
ImVector<char*> History;
|
ImVector<char*> History;
|
||||||
int HistoryPos; // -1: new line, 0..History.Size-1 browsing history.
|
int HistoryPos; // -1: new line, 0..History.Size-1 browsing history.
|
||||||
ImVector<const char*> Commands;
|
ImGuiTextFilter Filter;
|
||||||
|
bool AutoScroll;
|
||||||
|
bool ScrollToBottom;
|
||||||
|
|
||||||
ExampleAppConsole()
|
ExampleAppConsole()
|
||||||
{
|
{
|
||||||
@ -3189,6 +3213,8 @@ struct ExampleAppConsole
|
|||||||
Commands.push_back("HISTORY");
|
Commands.push_back("HISTORY");
|
||||||
Commands.push_back("CLEAR");
|
Commands.push_back("CLEAR");
|
||||||
Commands.push_back("CLASSIFY"); // "classify" is only here to provide an example of "C"+[tab] completing to "CL" and displaying matches.
|
Commands.push_back("CLASSIFY"); // "classify" is only here to provide an example of "C"+[tab] completing to "CL" and displaying matches.
|
||||||
|
AutoScroll = true;
|
||||||
|
ScrollToBottom = true;
|
||||||
AddLog("Welcome to Dear ImGui!");
|
AddLog("Welcome to Dear ImGui!");
|
||||||
}
|
}
|
||||||
~ExampleAppConsole()
|
~ExampleAppConsole()
|
||||||
@ -3222,7 +3248,8 @@ struct ExampleAppConsole
|
|||||||
buf[IM_ARRAYSIZE(buf)-1] = 0;
|
buf[IM_ARRAYSIZE(buf)-1] = 0;
|
||||||
va_end(args);
|
va_end(args);
|
||||||
Items.push_back(Strdup(buf));
|
Items.push_back(Strdup(buf));
|
||||||
ScrollToBottom = true;
|
if (AutoScroll)
|
||||||
|
ScrollToBottom = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Draw(const char* title, bool* p_open)
|
void Draw(const char* title, bool* p_open)
|
||||||
@ -3248,7 +3275,7 @@ struct ExampleAppConsole
|
|||||||
|
|
||||||
// TODO: display items starting from the bottom
|
// TODO: display items starting from the bottom
|
||||||
|
|
||||||
if (ImGui::SmallButton("Add Dummy Text")) { AddLog("%d some text", Items.Size); AddLog("some more text"); AddLog("display very important message here!"); } ImGui::SameLine();
|
if (ImGui::SmallButton("Add Dummy Text")) { AddLog("%d some text", Items.Size); AddLog("some more text"); AddLog("display very important message here!"); } ImGui::SameLine();
|
||||||
if (ImGui::SmallButton("Add Dummy Error")) { AddLog("[error] something went wrong"); } ImGui::SameLine();
|
if (ImGui::SmallButton("Add Dummy Error")) { AddLog("[error] something went wrong"); } ImGui::SameLine();
|
||||||
if (ImGui::SmallButton("Clear")) { ClearLog(); } ImGui::SameLine();
|
if (ImGui::SmallButton("Clear")) { ClearLog(); } ImGui::SameLine();
|
||||||
bool copy_to_clipboard = ImGui::SmallButton("Copy"); ImGui::SameLine();
|
bool copy_to_clipboard = ImGui::SmallButton("Copy"); ImGui::SameLine();
|
||||||
@ -3257,10 +3284,20 @@ struct ExampleAppConsole
|
|||||||
|
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
|
|
||||||
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0,0));
|
// Options menu
|
||||||
static ImGuiTextFilter filter;
|
if (ImGui::BeginPopup("Options"))
|
||||||
filter.Draw("Filter (\"incl,-excl\") (\"error\")", 180);
|
{
|
||||||
ImGui::PopStyleVar();
|
if (ImGui::Checkbox("Auto-scroll", &AutoScroll))
|
||||||
|
if (AutoScroll)
|
||||||
|
ScrollToBottom = true;
|
||||||
|
ImGui::EndPopup();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Options, Filter
|
||||||
|
if (ImGui::Button("Options"))
|
||||||
|
ImGui::OpenPopup("Options");
|
||||||
|
ImGui::SameLine();
|
||||||
|
Filter.Draw("Filter (\"incl,-excl\") (\"error\")", 180);
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
|
|
||||||
const float footer_height_to_reserve = ImGui::GetStyle().ItemSpacing.y + ImGui::GetFrameHeightWithSpacing(); // 1 separator, 1 input text
|
const float footer_height_to_reserve = ImGui::GetStyle().ItemSpacing.y + ImGui::GetFrameHeightWithSpacing(); // 1 separator, 1 input text
|
||||||
@ -3285,18 +3322,19 @@ struct ExampleAppConsole
|
|||||||
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(4,1)); // Tighten spacing
|
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(4,1)); // Tighten spacing
|
||||||
if (copy_to_clipboard)
|
if (copy_to_clipboard)
|
||||||
ImGui::LogToClipboard();
|
ImGui::LogToClipboard();
|
||||||
ImVec4 col_default_text = ImGui::GetStyleColorVec4(ImGuiCol_Text);
|
|
||||||
for (int i = 0; i < Items.Size; i++)
|
for (int i = 0; i < Items.Size; i++)
|
||||||
{
|
{
|
||||||
const char* item = Items[i];
|
const char* item = Items[i];
|
||||||
if (!filter.PassFilter(item))
|
if (!Filter.PassFilter(item))
|
||||||
continue;
|
continue;
|
||||||
ImVec4 col = col_default_text;
|
|
||||||
if (strstr(item, "[error]")) col = ImColor(1.0f,0.4f,0.4f,1.0f);
|
// Normally you would store more information in your item (e.g. make Items[] an array of structure, store color/type etc.)
|
||||||
else if (strncmp(item, "# ", 2) == 0) col = ImColor(1.0f,0.78f,0.58f,1.0f);
|
bool pop_color = false;
|
||||||
ImGui::PushStyleColor(ImGuiCol_Text, col);
|
if (strstr(item, "[error]")) { ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 0.4f, 0.4f, 1.0f)); pop_color = true; }
|
||||||
|
else if (strncmp(item, "# ", 2) == 0) { ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 0.8f, 0.6f, 1.0f)); pop_color = true; }
|
||||||
ImGui::TextUnformatted(item);
|
ImGui::TextUnformatted(item);
|
||||||
ImGui::PopStyleColor();
|
if (pop_color)
|
||||||
|
ImGui::PopStyleColor();
|
||||||
}
|
}
|
||||||
if (copy_to_clipboard)
|
if (copy_to_clipboard)
|
||||||
ImGui::LogFinish();
|
ImGui::LogFinish();
|
||||||
@ -3363,6 +3401,9 @@ struct ExampleAppConsole
|
|||||||
{
|
{
|
||||||
AddLog("Unknown command: '%s'\n", command_line);
|
AddLog("Unknown command: '%s'\n", command_line);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// On commad input, we scroll to bottom even if AutoScroll==false
|
||||||
|
ScrollToBottom = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int TextEditCallbackStub(ImGuiInputTextCallbackData* data) // In C++11 you are better off using lambdas for this sort of forwarding callbacks
|
static int TextEditCallbackStub(ImGuiInputTextCallbackData* data) // In C++11 you are better off using lambdas for this sort of forwarding callbacks
|
||||||
@ -3491,10 +3532,12 @@ struct ExampleAppLog
|
|||||||
ImGuiTextBuffer Buf;
|
ImGuiTextBuffer Buf;
|
||||||
ImGuiTextFilter Filter;
|
ImGuiTextFilter Filter;
|
||||||
ImVector<int> LineOffsets; // Index to lines offset. We maintain this with AddLog() calls, allowing us to have a random access on lines
|
ImVector<int> LineOffsets; // Index to lines offset. We maintain this with AddLog() calls, allowing us to have a random access on lines
|
||||||
|
bool AutoScroll;
|
||||||
bool ScrollToBottom;
|
bool ScrollToBottom;
|
||||||
|
|
||||||
ExampleAppLog()
|
ExampleAppLog()
|
||||||
{
|
{
|
||||||
|
AutoScroll = true;
|
||||||
ScrollToBottom = false;
|
ScrollToBottom = false;
|
||||||
Clear();
|
Clear();
|
||||||
}
|
}
|
||||||
@ -3516,7 +3559,8 @@ struct ExampleAppLog
|
|||||||
for (int new_size = Buf.size(); old_size < new_size; old_size++)
|
for (int new_size = Buf.size(); old_size < new_size; old_size++)
|
||||||
if (Buf[old_size] == '\n')
|
if (Buf[old_size] == '\n')
|
||||||
LineOffsets.push_back(old_size + 1);
|
LineOffsets.push_back(old_size + 1);
|
||||||
ScrollToBottom = true;
|
if (AutoScroll)
|
||||||
|
ScrollToBottom = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Draw(const char* title, bool* p_open = NULL)
|
void Draw(const char* title, bool* p_open = NULL)
|
||||||
@ -3526,13 +3570,31 @@ struct ExampleAppLog
|
|||||||
ImGui::End();
|
ImGui::End();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (ImGui::Button("Clear")) Clear();
|
|
||||||
|
// Options menu
|
||||||
|
if (ImGui::BeginPopup("Options"))
|
||||||
|
{
|
||||||
|
if (ImGui::Checkbox("Auto-scroll", &AutoScroll))
|
||||||
|
if (AutoScroll)
|
||||||
|
ScrollToBottom = true;
|
||||||
|
ImGui::EndPopup();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Main window
|
||||||
|
if (ImGui::Button("Options"))
|
||||||
|
ImGui::OpenPopup("Options");
|
||||||
|
ImGui::SameLine();
|
||||||
|
bool clear = ImGui::Button("Clear");
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
bool copy = ImGui::Button("Copy");
|
bool copy = ImGui::Button("Copy");
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
Filter.Draw("Filter", -100.0f);
|
Filter.Draw("Filter", -100.0f);
|
||||||
|
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
ImGui::BeginChild("scrolling", ImVec2(0,0), false, ImGuiWindowFlags_HorizontalScrollbar);
|
ImGui::BeginChild("scrolling", ImVec2(0,0), false, ImGuiWindowFlags_HorizontalScrollbar);
|
||||||
|
|
||||||
|
if (clear)
|
||||||
|
Clear();
|
||||||
if (copy)
|
if (copy)
|
||||||
ImGui::LogToClipboard();
|
ImGui::LogToClipboard();
|
||||||
|
|
||||||
@ -3541,6 +3603,10 @@ struct ExampleAppLog
|
|||||||
const char* buf_end = Buf.end();
|
const char* buf_end = Buf.end();
|
||||||
if (Filter.IsActive())
|
if (Filter.IsActive())
|
||||||
{
|
{
|
||||||
|
// In this example we don't use the clipper when Filter is enabled.
|
||||||
|
// This is because we don't have a random access on the result on our filter.
|
||||||
|
// A real application processing logs with ten of thousands of entries may want to store the result of search/filter.
|
||||||
|
// especially if the filtering function is not trivial (e.g. reg-exp).
|
||||||
for (int line_no = 0; line_no < LineOffsets.Size; line_no++)
|
for (int line_no = 0; line_no < LineOffsets.Size; line_no++)
|
||||||
{
|
{
|
||||||
const char* line_start = buf + LineOffsets[line_no];
|
const char* line_start = buf + LineOffsets[line_no];
|
||||||
@ -3588,11 +3654,12 @@ static void ShowExampleAppLog(bool* p_open)
|
|||||||
{
|
{
|
||||||
static ExampleAppLog log;
|
static ExampleAppLog log;
|
||||||
|
|
||||||
// For the demo: add a debug button before the normal log window contents
|
// For the demo: add a debug button _BEFORE_ the normal log window contents
|
||||||
// We take advantage of the fact that multiple calls to Begin()/End() are appending to the same window.
|
// We take advantage of the fact that multiple calls to Begin()/End() are appending to the same window.
|
||||||
|
// Most of the contents of the window will be added by the log.Draw() call.
|
||||||
ImGui::SetNextWindowSize(ImVec2(500, 400), ImGuiCond_FirstUseEver);
|
ImGui::SetNextWindowSize(ImVec2(500, 400), ImGuiCond_FirstUseEver);
|
||||||
ImGui::Begin("Example: Log", p_open);
|
ImGui::Begin("Example: Log", p_open);
|
||||||
if (ImGui::SmallButton("Add 5 entries"))
|
if (ImGui::SmallButton("[Debug] Add 5 entries"))
|
||||||
{
|
{
|
||||||
static int counter = 0;
|
static int counter = 0;
|
||||||
for (int n = 0; n < 5; n++)
|
for (int n = 0; n < 5; n++)
|
||||||
|
@ -1367,7 +1367,7 @@ ImFontConfig::ImFontConfig()
|
|||||||
FontDataOwnedByAtlas = true;
|
FontDataOwnedByAtlas = true;
|
||||||
FontNo = 0;
|
FontNo = 0;
|
||||||
SizePixels = 0.0f;
|
SizePixels = 0.0f;
|
||||||
OversampleH = 3;
|
OversampleH = 3; // FIXME: 2 may be a better default?
|
||||||
OversampleV = 1;
|
OversampleV = 1;
|
||||||
PixelSnapH = false;
|
PixelSnapH = false;
|
||||||
GlyphExtraSpacing = ImVec2(0.0f, 0.0f);
|
GlyphExtraSpacing = ImVec2(0.0f, 0.0f);
|
||||||
|
@ -357,13 +357,13 @@ enum ImGuiSeparatorFlags_
|
|||||||
// This is going to be exposed in imgui.h when stabilized enough.
|
// This is going to be exposed in imgui.h when stabilized enough.
|
||||||
enum ImGuiItemFlags_
|
enum ImGuiItemFlags_
|
||||||
{
|
{
|
||||||
ImGuiItemFlags_NoTabStop = 1 << 0, // false
|
ImGuiItemFlags_NoTabStop = 1 << 0, // false
|
||||||
ImGuiItemFlags_ButtonRepeat = 1 << 1, // false // Button() will return true multiple times based on io.KeyRepeatDelay and io.KeyRepeatRate settings.
|
ImGuiItemFlags_ButtonRepeat = 1 << 1, // false // Button() will return true multiple times based on io.KeyRepeatDelay and io.KeyRepeatRate settings.
|
||||||
ImGuiItemFlags_Disabled = 1 << 2, // false // [BETA] Disable interactions but doesn't affect visuals yet. See github.com/ocornut/imgui/issues/211
|
ImGuiItemFlags_Disabled = 1 << 2, // false // [BETA] Disable interactions but doesn't affect visuals yet. See github.com/ocornut/imgui/issues/211
|
||||||
ImGuiItemFlags_NoNav = 1 << 3, // false
|
ImGuiItemFlags_NoNav = 1 << 3, // false
|
||||||
ImGuiItemFlags_NoNavDefaultFocus = 1 << 4, // false
|
ImGuiItemFlags_NoNavDefaultFocus = 1 << 4, // false
|
||||||
ImGuiItemFlags_SelectableDontClosePopup = 1 << 5, // false // MenuItem/Selectable() automatically closes current Popup window
|
ImGuiItemFlags_SelectableDontClosePopup = 1 << 5, // false // MenuItem/Selectable() automatically closes current Popup window
|
||||||
ImGuiItemFlags_Default_ = 0
|
ImGuiItemFlags_Default_ = 0
|
||||||
};
|
};
|
||||||
|
|
||||||
// Storage for LastItem data
|
// Storage for LastItem data
|
||||||
@ -1679,6 +1679,7 @@ namespace ImGui
|
|||||||
IMGUI_API bool CollapseButton(ImGuiID id, const ImVec2& pos, ImGuiDockNode* dock_node);
|
IMGUI_API bool CollapseButton(ImGuiID id, const ImVec2& pos, ImGuiDockNode* dock_node);
|
||||||
IMGUI_API bool ArrowButtonEx(const char* str_id, ImGuiDir dir, ImVec2 size_arg, ImGuiButtonFlags flags);
|
IMGUI_API bool ArrowButtonEx(const char* str_id, ImGuiDir dir, ImVec2 size_arg, ImGuiButtonFlags flags);
|
||||||
IMGUI_API void Scrollbar(ImGuiLayoutType direction);
|
IMGUI_API void Scrollbar(ImGuiLayoutType direction);
|
||||||
|
IMGUI_API ImGuiID GetScrollbarID(ImGuiLayoutType direction);
|
||||||
IMGUI_API void VerticalSeparator(); // Vertical separator, for menu bars (use current line height). Not exposed because it is misleading and it doesn't have an effect on regular layout.
|
IMGUI_API void VerticalSeparator(); // Vertical separator, for menu bars (use current line height). Not exposed because it is misleading and it doesn't have an effect on regular layout.
|
||||||
|
|
||||||
// Widgets low-level behaviors
|
// Widgets low-level behaviors
|
||||||
|
@ -741,6 +741,13 @@ bool ImGui::CollapseButton(ImGuiID id, const ImVec2& pos, ImGuiDockNode* dock_no
|
|||||||
return pressed;
|
return pressed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ImGuiID ImGui::GetScrollbarID(ImGuiLayoutType direction)
|
||||||
|
{
|
||||||
|
ImGuiContext& g = *GImGui;
|
||||||
|
ImGuiWindow* window = g.CurrentWindow;
|
||||||
|
return window->GetID((direction == ImGuiLayoutType_Horizontal) ? "#SCROLLX" : "#SCROLLY");
|
||||||
|
}
|
||||||
|
|
||||||
// Vertical/Horizontal scrollbar
|
// Vertical/Horizontal scrollbar
|
||||||
// The entire piece of code below is rather confusing because:
|
// The entire piece of code below is rather confusing because:
|
||||||
// - We handle absolute seeking (when first clicking outside the grab) and relative manipulation (afterward or when clicking inside the grab)
|
// - We handle absolute seeking (when first clicking outside the grab) and relative manipulation (afterward or when clicking inside the grab)
|
||||||
@ -753,8 +760,8 @@ void ImGui::Scrollbar(ImGuiLayoutType direction)
|
|||||||
|
|
||||||
const bool horizontal = (direction == ImGuiLayoutType_Horizontal);
|
const bool horizontal = (direction == ImGuiLayoutType_Horizontal);
|
||||||
const ImGuiStyle& style = g.Style;
|
const ImGuiStyle& style = g.Style;
|
||||||
const ImGuiID id = window->GetID(horizontal ? "#SCROLLX" : "#SCROLLY");
|
const ImGuiID id = GetScrollbarID(direction);
|
||||||
|
|
||||||
// Render background
|
// Render background
|
||||||
bool other_scrollbar = (horizontal ? window->ScrollbarY : window->ScrollbarX);
|
bool other_scrollbar = (horizontal ? window->ScrollbarY : window->ScrollbarX);
|
||||||
float other_scrollbar_size_w = other_scrollbar ? style.ScrollbarSize : 0.0f;
|
float other_scrollbar_size_w = other_scrollbar ? style.ScrollbarSize : 0.0f;
|
||||||
@ -765,9 +772,21 @@ void ImGui::Scrollbar(ImGuiLayoutType direction)
|
|||||||
: ImRect(window_rect.Max.x - style.ScrollbarSize, window->Pos.y + border_size, window_rect.Max.x - border_size, window_rect.Max.y - other_scrollbar_size_w - border_size);
|
: ImRect(window_rect.Max.x - style.ScrollbarSize, window->Pos.y + border_size, window_rect.Max.x - border_size, window_rect.Max.y - other_scrollbar_size_w - border_size);
|
||||||
if (!horizontal)
|
if (!horizontal)
|
||||||
bb.Min.y += window->TitleBarHeight() + ((window->Flags & ImGuiWindowFlags_MenuBar) ? window->MenuBarHeight() : 0.0f);
|
bb.Min.y += window->TitleBarHeight() + ((window->Flags & ImGuiWindowFlags_MenuBar) ? window->MenuBarHeight() : 0.0f);
|
||||||
if (bb.GetWidth() <= 0.0f || bb.GetHeight() <= 0.0f)
|
|
||||||
|
const float bb_height = bb.GetHeight();
|
||||||
|
if (bb.GetWidth() <= 0.0f || bb_height <= 0.0f)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// When we are too small, start hiding and disabling the grab (this reduce visual noise on very small window and facilitate using the resize grab)
|
||||||
|
float alpha = 1.0f;
|
||||||
|
if ((direction == ImGuiLayoutType_Vertical) && bb_height < g.FontSize + g.Style.FramePadding.y * 2.0f)
|
||||||
|
{
|
||||||
|
alpha = ImSaturate((bb_height - g.FontSize) / (g.Style.FramePadding.y * 2.0f));
|
||||||
|
if (alpha <= 0.0f)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const bool allow_interaction = (alpha >= 1.0f);
|
||||||
|
|
||||||
int window_rounding_corners;
|
int window_rounding_corners;
|
||||||
if (horizontal)
|
if (horizontal)
|
||||||
window_rounding_corners = ImDrawCornerFlags_BotLeft | (other_scrollbar ? 0 : ImDrawCornerFlags_BotRight);
|
window_rounding_corners = ImDrawCornerFlags_BotLeft | (other_scrollbar ? 0 : ImDrawCornerFlags_BotRight);
|
||||||
@ -798,7 +817,7 @@ void ImGui::Scrollbar(ImGuiLayoutType direction)
|
|||||||
float scroll_max = ImMax(1.0f, win_size_contents_v - win_size_avail_v);
|
float scroll_max = ImMax(1.0f, win_size_contents_v - win_size_avail_v);
|
||||||
float scroll_ratio = ImSaturate(scroll_v / scroll_max);
|
float scroll_ratio = ImSaturate(scroll_v / scroll_max);
|
||||||
float grab_v_norm = scroll_ratio * (scrollbar_size_v - grab_h_pixels) / scrollbar_size_v;
|
float grab_v_norm = scroll_ratio * (scrollbar_size_v - grab_h_pixels) / scrollbar_size_v;
|
||||||
if (held && grab_h_norm < 1.0f)
|
if (held && allow_interaction && grab_h_norm < 1.0f)
|
||||||
{
|
{
|
||||||
float scrollbar_pos_v = horizontal ? bb.Min.x : bb.Min.y;
|
float scrollbar_pos_v = horizontal ? bb.Min.x : bb.Min.y;
|
||||||
float mouse_pos_v = horizontal ? g.IO.MousePos.x : g.IO.MousePos.y;
|
float mouse_pos_v = horizontal ? g.IO.MousePos.x : g.IO.MousePos.y;
|
||||||
@ -841,8 +860,8 @@ void ImGui::Scrollbar(ImGuiLayoutType direction)
|
|||||||
*click_delta_to_grab_center_v = clicked_v_norm - grab_v_norm - grab_h_norm*0.5f;
|
*click_delta_to_grab_center_v = clicked_v_norm - grab_v_norm - grab_h_norm*0.5f;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Render
|
// Render grab
|
||||||
const ImU32 grab_col = GetColorU32(held ? ImGuiCol_ScrollbarGrabActive : hovered ? ImGuiCol_ScrollbarGrabHovered : ImGuiCol_ScrollbarGrab);
|
const ImU32 grab_col = GetColorU32(held ? ImGuiCol_ScrollbarGrabActive : hovered ? ImGuiCol_ScrollbarGrabHovered : ImGuiCol_ScrollbarGrab, alpha);
|
||||||
ImRect grab_rect;
|
ImRect grab_rect;
|
||||||
if (horizontal)
|
if (horizontal)
|
||||||
grab_rect = ImRect(ImLerp(bb.Min.x, bb.Max.x, grab_v_norm), bb.Min.y, ImMin(ImLerp(bb.Min.x, bb.Max.x, grab_v_norm) + grab_h_pixels, window_rect.Max.x), bb.Max.y);
|
grab_rect = ImRect(ImLerp(bb.Min.x, bb.Max.x, grab_v_norm), bb.Min.y, ImMin(ImLerp(bb.Min.x, bb.Max.x, grab_v_norm) + grab_h_pixels, window_rect.Max.x), bb.Max.y);
|
||||||
@ -2863,8 +2882,9 @@ static int InputTextCalcTextLenAndLineCount(const char* text_begin, const char**
|
|||||||
|
|
||||||
static ImVec2 InputTextCalcTextSizeW(const ImWchar* text_begin, const ImWchar* text_end, const ImWchar** remaining, ImVec2* out_offset, bool stop_on_new_line)
|
static ImVec2 InputTextCalcTextSizeW(const ImWchar* text_begin, const ImWchar* text_end, const ImWchar** remaining, ImVec2* out_offset, bool stop_on_new_line)
|
||||||
{
|
{
|
||||||
ImFont* font = GImGui->Font;
|
ImGuiContext& g = *GImGui;
|
||||||
const float line_height = GImGui->FontSize;
|
ImFont* font = g.Font;
|
||||||
|
const float line_height = g.FontSize;
|
||||||
const float scale = line_height / font->FontSize;
|
const float scale = line_height / font->FontSize;
|
||||||
|
|
||||||
ImVec2 text_size = ImVec2(0,0);
|
ImVec2 text_size = ImVec2(0,0);
|
||||||
@ -5114,7 +5134,7 @@ bool ImGui::Selectable(const char* label, bool selected, ImGuiSelectableFlags fl
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (flags & ImGuiSelectableFlags_Disabled) PushStyleColor(ImGuiCol_Text, g.Style.Colors[ImGuiCol_TextDisabled]);
|
if (flags & ImGuiSelectableFlags_Disabled) PushStyleColor(ImGuiCol_Text, g.Style.Colors[ImGuiCol_TextDisabled]);
|
||||||
RenderTextClipped(bb_inner.Min, bb.Max, label, NULL, &label_size, ImVec2(0.0f,0.0f));
|
RenderTextClipped(bb_inner.Min, bb_inner.Max, label, NULL, &label_size, style.SelectableTextAlign, &bb);
|
||||||
if (flags & ImGuiSelectableFlags_Disabled) PopStyleColor();
|
if (flags & ImGuiSelectableFlags_Disabled) PopStyleColor();
|
||||||
|
|
||||||
// Automatically close popups
|
// Automatically close popups
|
||||||
|
@ -253,7 +253,7 @@
|
|||||||
// Documentation & header file 520 LOC \___ 660 LOC documentation
|
// Documentation & header file 520 LOC \___ 660 LOC documentation
|
||||||
// Sample code 140 LOC /
|
// Sample code 140 LOC /
|
||||||
// Truetype parsing 620 LOC ---- 620 LOC TrueType
|
// Truetype parsing 620 LOC ---- 620 LOC TrueType
|
||||||
// Software rasterization 240 LOC \
|
// Software rasterization 240 LOC \.
|
||||||
// Curve tessellation 120 LOC \__ 550 LOC Bitmap creation
|
// Curve tessellation 120 LOC \__ 550 LOC Bitmap creation
|
||||||
// Bitmap management 100 LOC /
|
// Bitmap management 100 LOC /
|
||||||
// Baked bitmap interface 70 LOC /
|
// Baked bitmap interface 70 LOC /
|
||||||
|
@ -25,7 +25,7 @@ If you have other loading/merging/adding fonts, you can post on the Dear ImGui "
|
|||||||
- Building Custom Glyph Ranges
|
- Building Custom Glyph Ranges
|
||||||
- Embedding Fonts in Source Code
|
- Embedding Fonts in Source Code
|
||||||
- Credits/Licences for fonts included in this folder
|
- Credits/Licences for fonts included in this folder
|
||||||
- Links, Other fonts
|
- Fonts Links
|
||||||
|
|
||||||
|
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
@ -106,11 +106,14 @@ Load .TTF/.OTF file with:
|
|||||||
For advanced options create a ImFontConfig structure and pass it to the AddFont function (it will be copied internally):
|
For advanced options create a ImFontConfig structure and pass it to the AddFont function (it will be copied internally):
|
||||||
|
|
||||||
ImFontConfig config;
|
ImFontConfig config;
|
||||||
config.OversampleH = 3;
|
config.OversampleH = 2;
|
||||||
config.OversampleV = 1;
|
config.OversampleV = 1;
|
||||||
config.GlyphExtraSpacing.x = 1.0f;
|
config.GlyphExtraSpacing.x = 1.0f;
|
||||||
ImFont* font = io.Fonts->AddFontFromFileTTF("font.ttf", size_pixels, &config);
|
ImFont* font = io.Fonts->AddFontFromFileTTF("font.ttf", size_pixels, &config);
|
||||||
|
|
||||||
|
Read about oversampling here:
|
||||||
|
https://github.com/nothings/stb/blob/master/tests/oversample
|
||||||
|
|
||||||
If you have very large number of glyphs or multiple fonts, the texture may become too big for your graphics API.
|
If you have very large number of glyphs or multiple fonts, the texture may become too big for your graphics API.
|
||||||
The typical result of failing to upload a texture is if every glyphs appears as white rectangles.
|
The typical result of failing to upload a texture is if every glyphs appears as white rectangles.
|
||||||
In particular, using a large range such as GetGlyphRangesChineseSimplifiedCommon() is not recommended unless you
|
In particular, using a large range such as GetGlyphRangesChineseSimplifiedCommon() is not recommended unless you
|
||||||
|
Loading…
Reference in New Issue
Block a user