mirror of
https://github.com/Drezil/imgui.git
synced 2024-12-20 14:56:35 +00:00
Merge branch 'master' into docking
# Conflicts: # docs/CHANGELOG.txt
This commit is contained in:
commit
1b435ae3e0
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
// CHANGELOG
|
// CHANGELOG
|
||||||
// (minor and older changes stripped away, please see git history for details)
|
// (minor and older changes stripped away, please see git history for details)
|
||||||
|
// 2021-05-24: Add support for draw_data->FramebufferScale.
|
||||||
// 2021-05-19: Replaced direct access to ImDrawCmd::TextureId with a call to ImDrawCmd::GetTexID(). (will become a requirement)
|
// 2021-05-19: Replaced direct access to ImDrawCmd::TextureId with a call to ImDrawCmd::GetTexID(). (will become a requirement)
|
||||||
// 2021-05-16: Update to latest WebGPU specs (compatible with Emscripten 2.0.20 and Chrome Canary 92).
|
// 2021-05-16: Update to latest WebGPU specs (compatible with Emscripten 2.0.20 and Chrome Canary 92).
|
||||||
// 2021-02-18: Change blending equation to preserve alpha in output buffer.
|
// 2021-02-18: Change blending equation to preserve alpha in output buffer.
|
||||||
@ -307,7 +308,7 @@ static void ImGui_ImplWGPU_SetupRenderState(ImDrawData* draw_data, WGPURenderPas
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Setup viewport
|
// Setup viewport
|
||||||
wgpuRenderPassEncoderSetViewport(ctx, 0, 0, draw_data->DisplaySize.x, draw_data->DisplaySize.y, 0, 1);
|
wgpuRenderPassEncoderSetViewport(ctx, 0, 0, draw_data->FramebufferScale.x * draw_data->DisplaySize.x, draw_data->FramebufferScale.y * draw_data->DisplaySize.y, 0, 1);
|
||||||
|
|
||||||
// Bind shader and vertex buffers
|
// Bind shader and vertex buffers
|
||||||
wgpuRenderPassEncoderSetVertexBuffer(ctx, 0, fr->VertexBuffer, 0, 0);
|
wgpuRenderPassEncoderSetVertexBuffer(ctx, 0, fr->VertexBuffer, 0, 0);
|
||||||
@ -406,6 +407,7 @@ void ImGui_ImplWGPU_RenderDrawData(ImDrawData* draw_data, WGPURenderPassEncoder
|
|||||||
// (Because we merged all buffers into a single one, we maintain our own offset into them)
|
// (Because we merged all buffers into a single one, we maintain our own offset into them)
|
||||||
int global_vtx_offset = 0;
|
int global_vtx_offset = 0;
|
||||||
int global_idx_offset = 0;
|
int global_idx_offset = 0;
|
||||||
|
ImVec2 clip_scale = draw_data->FramebufferScale;
|
||||||
ImVec2 clip_off = draw_data->DisplayPos;
|
ImVec2 clip_off = draw_data->DisplayPos;
|
||||||
for (int n = 0; n < draw_data->CmdListsCount; n++)
|
for (int n = 0; n < draw_data->CmdListsCount; n++)
|
||||||
{
|
{
|
||||||
@ -441,10 +443,10 @@ void ImGui_ImplWGPU_RenderDrawData(ImDrawData* draw_data, WGPURenderPassEncoder
|
|||||||
|
|
||||||
// Apply Scissor, Bind texture, Draw
|
// Apply Scissor, Bind texture, Draw
|
||||||
uint32_t clip_rect[4];
|
uint32_t clip_rect[4];
|
||||||
clip_rect[0] = static_cast<uint32_t>(pcmd->ClipRect.x - clip_off.x);
|
clip_rect[0] = (uint32_t)(clip_scale.x * (pcmd->ClipRect.x - clip_off.x));
|
||||||
clip_rect[1] = static_cast<uint32_t>(pcmd->ClipRect.y - clip_off.y);
|
clip_rect[1] = (uint32_t)(clip_scale.y * (pcmd->ClipRect.y - clip_off.y));
|
||||||
clip_rect[2] = static_cast<uint32_t>(pcmd->ClipRect.z - clip_off.x);
|
clip_rect[2] = (uint32_t)(clip_scale.x * (pcmd->ClipRect.z - clip_off.x));
|
||||||
clip_rect[3] = static_cast<uint32_t>(pcmd->ClipRect.w - clip_off.y);
|
clip_rect[3] = (uint32_t)(clip_scale.y * (pcmd->ClipRect.w - clip_off.y));
|
||||||
wgpuRenderPassEncoderSetScissorRect(pass_encoder, clip_rect[0], clip_rect[1], clip_rect[2] - clip_rect[0], clip_rect[3] - clip_rect[1]);
|
wgpuRenderPassEncoderSetScissorRect(pass_encoder, clip_rect[0], clip_rect[1], clip_rect[2] - clip_rect[0], clip_rect[3] - clip_rect[1]);
|
||||||
wgpuRenderPassEncoderDrawIndexed(pass_encoder, pcmd->ElemCount, 1, pcmd->IdxOffset + global_idx_offset, pcmd->VtxOffset + global_vtx_offset, 0);
|
wgpuRenderPassEncoderDrawIndexed(pass_encoder, pcmd->ElemCount, 1, pcmd->IdxOffset + global_idx_offset, pcmd->VtxOffset + global_vtx_offset, 0);
|
||||||
}
|
}
|
||||||
@ -498,7 +500,7 @@ static void ImGui_ImplWGPU_CreateFontsTexture()
|
|||||||
layout.offset = 0;
|
layout.offset = 0;
|
||||||
layout.bytesPerRow = width * size_pp;
|
layout.bytesPerRow = width * size_pp;
|
||||||
layout.rowsPerImage = height;
|
layout.rowsPerImage = height;
|
||||||
WGPUExtent3D size = { static_cast<uint32_t>(width), static_cast<uint32_t>(height), 1 };
|
WGPUExtent3D size = { (uint32_t)width, (uint32_t)height, 1 };
|
||||||
wgpuQueueWriteTexture(g_defaultQueue, &dst_view, pixels, (uint32_t)(width * size_pp * height), &layout, &size);
|
wgpuQueueWriteTexture(g_defaultQueue, &dst_view, pixels, (uint32_t)(width * size_pp * height), &layout, &size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,9 +100,11 @@ Other changes:
|
|||||||
|
|
||||||
|
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
VERSION 1.83 WIP (In Progress)
|
VERSION 1.83 (Released 2011-05-24)
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Decorated log: https://github.com/ocornut/imgui/releases/tag/v1.83
|
||||||
|
|
||||||
Breaking Changes:
|
Breaking Changes:
|
||||||
|
|
||||||
- Backends: Obsoleted direct access to ImDrawCmd::TextureId in favor of calling ImDrawCmd::GetTexID(). (#3761) [@thedmd]
|
- Backends: Obsoleted direct access to ImDrawCmd::TextureId in favor of calling ImDrawCmd::GetTexID(). (#3761) [@thedmd]
|
||||||
@ -123,11 +125,14 @@ Other Changes:
|
|||||||
- Nav, InputText: Fixed accidental menu toggling while typing non-ascii characters using AltGR. [@rokups] (#370)
|
- Nav, InputText: Fixed accidental menu toggling while typing non-ascii characters using AltGR. [@rokups] (#370)
|
||||||
- Nav: Fixed using SetItemDefaultFocus() on windows with _NavFlattened flag. (#787)
|
- Nav: Fixed using SetItemDefaultFocus() on windows with _NavFlattened flag. (#787)
|
||||||
- Nav: Fixed Tabbing initial activation from skipping the first item if it is tabbable through. (#787)
|
- Nav: Fixed Tabbing initial activation from skipping the first item if it is tabbable through. (#787)
|
||||||
|
- Nav: Fixed fast CTRL+Tab (where keys are only held for one single frame) from properly enabling the
|
||||||
|
menu layer of target window if it doesn't have other active layers.
|
||||||
- Tables: Expose TableSetColumnEnabled() in public api. (#3935)
|
- Tables: Expose TableSetColumnEnabled() in public api. (#3935)
|
||||||
- Tables: Better preserve widths when columns count changes. (#4046)
|
- Tables: Better preserve widths when columns count changes. (#4046)
|
||||||
- Tables: Sharing more memory buffers between tables, reducing general memory footprints. (#3740)
|
- Tables: Sharing more memory buffers between tables, reducing general memory footprints. (#3740)
|
||||||
- TabBar: Fixed mouse reordering with very fast movements (e.g. crossing multiple tabs in a single
|
- TabBar: Fixed mouse reordering with very fast movements (e.g. crossing multiple tabs in a single
|
||||||
frame and then immediately standling still (would only affect automation/bots). [@rokups]
|
frame and then immediately standing still (would only affect automation/bots). [@rokups]
|
||||||
|
- Menus: made MenuItem() in a menu bar reflect the 'selected' argument with a highlight. (#4128) [@mattelegende]
|
||||||
- Drags, Sliders, Inputs: Specifying a NULL format to Float functions default them to "%.3f" to be
|
- Drags, Sliders, Inputs: Specifying a NULL format to Float functions default them to "%.3f" to be
|
||||||
consistent with the compile-time default. (#3922)
|
consistent with the compile-time default. (#3922)
|
||||||
- DragScalar: Add default value for v_speed argument to match higher-level functions. (#3922) [@eliasdaler]
|
- DragScalar: Add default value for v_speed argument to match higher-level functions. (#3922) [@eliasdaler]
|
||||||
@ -138,6 +143,8 @@ Other Changes:
|
|||||||
is used. (#4155, #4156) [@michael-swan]
|
is used. (#4155, #4156) [@michael-swan]
|
||||||
- LabelText: Fixed clipping of multi-line value text when label is single-line. (#4004)
|
- LabelText: Fixed clipping of multi-line value text when label is single-line. (#4004)
|
||||||
- LabelText: Fixed vertical alignment of single-line value text when label is multi-line. (#4004)
|
- LabelText: Fixed vertical alignment of single-line value text when label is multi-line. (#4004)
|
||||||
|
- Combos: Changed the combo popup to use a different id to also using a context menu with the default item id.
|
||||||
|
Fixed using BeginPopupContextItem() with no parameter after a combo. (#4167)
|
||||||
- Popups: Added 'OpenPopup(ImGuiID id)' overload to facilitate calling from nested stacks. (#3993, #331) [@zlash]
|
- Popups: Added 'OpenPopup(ImGuiID id)' overload to facilitate calling from nested stacks. (#3993, #331) [@zlash]
|
||||||
- Tweak computation of io.Framerate so it is less biased toward high-values in the first 120 frames. (#4138)
|
- Tweak computation of io.Framerate so it is less biased toward high-values in the first 120 frames. (#4138)
|
||||||
- Optimization: Disabling some of MSVC most aggressive Debug runtime checks for some simple/low-level functions
|
- Optimization: Disabling some of MSVC most aggressive Debug runtime checks for some simple/low-level functions
|
||||||
@ -148,13 +155,14 @@ Other Changes:
|
|||||||
par with original version. Now incorporating the correct revert.
|
par with original version. Now incorporating the correct revert.
|
||||||
- ImDrawList: Fixed PathArcTo() regression from 1.82 preventing use of counter-clockwise angles. (#4030, #3491) [@thedmd]
|
- ImDrawList: Fixed PathArcTo() regression from 1.82 preventing use of counter-clockwise angles. (#4030, #3491) [@thedmd]
|
||||||
- Demo: Improved popups demo and comments.
|
- Demo: Improved popups demo and comments.
|
||||||
|
- Metrics: Added "Fonts" section with same information as available in "Style Editor">"Fonts".
|
||||||
- Backends: SDL: Rework global mouse pos availability check listing supported platforms explicitly,
|
- Backends: SDL: Rework global mouse pos availability check listing supported platforms explicitly,
|
||||||
effectively fixing mouse access on Raspberry Pi. (#2837, #3950) [@lethal-guitar, @hinxx]
|
effectively fixing mouse access on Raspberry Pi. (#2837, #3950) [@lethal-guitar, @hinxx]
|
||||||
- Backends: Win32: Clearing keyboard down array when losing focus (WM_KILLFOCUS). (#2062, #3532, #3961)
|
- Backends: Win32: Clearing keyboard down array when losing focus (WM_KILLFOCUS). (#2062, #3532, #3961)
|
||||||
[@1025798851]
|
[@1025798851]
|
||||||
- Backends: OSX: Fix keys remaining stuck when CMD-tabbing to a different application. (#3832) [@rokups]
|
- Backends: OSX: Fix keys remaining stuck when CMD-tabbing to a different application. (#3832) [@rokups]
|
||||||
- Backends: DirectX9: calling IDirect3DStateBlock9::Capture() after CreateStateBlock() which appears to
|
- Backends: DirectX9: calling IDirect3DStateBlock9::Capture() after CreateStateBlock() which appears to
|
||||||
workaround/fix state restoring issues. Unknown exactly why so, but bit of a cargo-cult fix. (#3857)
|
workaround/fix state restoring issues. Unknown exactly why so, bit of a cargo-cult fix. (#3857)
|
||||||
- Backends: DirectX9: explicitly setting up more graphics states to increase compatibility with unusual
|
- Backends: DirectX9: explicitly setting up more graphics states to increase compatibility with unusual
|
||||||
non-default states. (#4063)
|
non-default states. (#4063)
|
||||||
- Backends: DirectX10, DirectX11: fixed a crash when backing/restoring state if nothing is bound when
|
- Backends: DirectX10, DirectX11: fixed a crash when backing/restoring state if nothing is bound when
|
||||||
@ -169,6 +177,7 @@ Other Changes:
|
|||||||
- Examples: Vulkan: Prefer using discrete GPU if there are more than one available. (#4012) [@rokups]
|
- Examples: Vulkan: Prefer using discrete GPU if there are more than one available. (#4012) [@rokups]
|
||||||
- Examples: SDL2: Link with shell32.lib required by SDL2main.lib since SDL 2.0.12. [#3988]
|
- Examples: SDL2: Link with shell32.lib required by SDL2main.lib since SDL 2.0.12. [#3988]
|
||||||
- Examples: Android: Make Android example build compatible with Gradle 7.0. (#3446)
|
- Examples: Android: Make Android example build compatible with Gradle 7.0. (#3446)
|
||||||
|
- Docs: Improvements to description of using colored glyphs/emojis. (#4169, #3369)
|
||||||
- Docs: Improvements to minor mistakes in documentation comments (#3923) [@ANF-Studios]
|
- Docs: Improvements to minor mistakes in documentation comments (#3923) [@ANF-Studios]
|
||||||
|
|
||||||
Docking+Viewports Branch:
|
Docking+Viewports Branch:
|
||||||
@ -495,6 +504,7 @@ Other Changes:
|
|||||||
- Examples: DirectX12: Move ImGui::Render() call above the first barrier to clarify its lack of effect on the graphics pipe.
|
- Examples: DirectX12: Move ImGui::Render() call above the first barrier to clarify its lack of effect on the graphics pipe.
|
||||||
- CI: Fix testing for Windows DLL builds. (#3603, #3601) [@iboB]
|
- CI: Fix testing for Windows DLL builds. (#3603, #3601) [@iboB]
|
||||||
- Docs: Improved the wiki and added a https://github.com/ocornut/imgui/wiki/Useful-Widgets page. [@Xipiryon]
|
- Docs: Improved the wiki and added a https://github.com/ocornut/imgui/wiki/Useful-Widgets page. [@Xipiryon]
|
||||||
|
[2021/05/20: moved to https://github.com/ocornut/imgui/wiki/Useful-Extensions]
|
||||||
- Docs: Split examples/README.txt into docs/BACKENDS.md and docs/EXAMPLES.md, and improved them.
|
- Docs: Split examples/README.txt into docs/BACKENDS.md and docs/EXAMPLES.md, and improved them.
|
||||||
- Docs: Consistently renamed all occurrences of "binding" and "back-end" to "backend" in comments and docs.
|
- Docs: Consistently renamed all occurrences of "binding" and "back-end" to "backend" in comments and docs.
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ _(You may browse this at https://github.com/ocornut/imgui/blob/master/docs/FONTS
|
|||||||
The code in imgui.cpp embeds a copy of 'ProggyClean.ttf' (by Tristan Grimmer),
|
The code in imgui.cpp embeds a copy of 'ProggyClean.ttf' (by Tristan Grimmer),
|
||||||
a 13 pixels high, pixel-perfect font used by default. We embed it in the source code so you can use Dear ImGui without any file system access. ProggyClean does not scale smoothly, therefore it is recommended that you load your own file when using Dear ImGui in an application aiming to look nice and wanting to support multiple resolutions.
|
a 13 pixels high, pixel-perfect font used by default. We embed it in the source code so you can use Dear ImGui without any file system access. ProggyClean does not scale smoothly, therefore it is recommended that you load your own file when using Dear ImGui in an application aiming to look nice and wanting to support multiple resolutions.
|
||||||
|
|
||||||
You may also load external .TTF/.OTF files.
|
You may also load external .TTF/.OTF files.
|
||||||
In the [misc/fonts/](https://github.com/ocornut/imgui/tree/master/misc/fonts) folder you can find a few suggested fonts, provided as a convenience.
|
In the [misc/fonts/](https://github.com/ocornut/imgui/tree/master/misc/fonts) folder you can find a few suggested fonts, provided as a convenience.
|
||||||
|
|
||||||
**Also read the FAQ:** https://www.dearimgui.org/faq (there is a Fonts section!)
|
**Also read the FAQ:** https://www.dearimgui.org/faq (there is a Fonts section!)
|
||||||
@ -14,8 +14,9 @@ In the [misc/fonts/](https://github.com/ocornut/imgui/tree/master/misc/fonts) fo
|
|||||||
- [Readme First](#readme-first)
|
- [Readme First](#readme-first)
|
||||||
- [How should I handle DPI in my application?](#how-should-i-handle-dpi-in-my-application)
|
- [How should I handle DPI in my application?](#how-should-i-handle-dpi-in-my-application)
|
||||||
- [Fonts Loading Instructions](#font-loading-instructions)
|
- [Fonts Loading Instructions](#font-loading-instructions)
|
||||||
- [Using Icons](#using-icons)
|
- [Using Icon Fonts](#using-icon-fonts)
|
||||||
- [Using FreeType Rasterizer](#using-freetype-rasterizer)
|
- [Using FreeType Rasterizer (imgui_freetype)](#using-freetype-rasterizer-imgui_freetype)
|
||||||
|
- [Using Colorful Glyphs/Emojis](#using-colorful-glyphsemojis)
|
||||||
- [Using Custom Glyph Ranges](#using-custom-glyph-ranges)
|
- [Using Custom Glyph Ranges](#using-custom-glyph-ranges)
|
||||||
- [Using Custom Colorful Icons](#using-custom-colorful-icons)
|
- [Using Custom Colorful Icons](#using-custom-colorful-icons)
|
||||||
- [Using Font Data Embedded In Source Code](#using-font-data-embedded-in-source-code)
|
- [Using Font Data Embedded In Source Code](#using-font-data-embedded-in-source-code)
|
||||||
@ -26,7 +27,7 @@ In the [misc/fonts/](https://github.com/ocornut/imgui/tree/master/misc/fonts) fo
|
|||||||
---------------------------------------
|
---------------------------------------
|
||||||
## Readme First
|
## Readme First
|
||||||
|
|
||||||
- All loaded fonts glyphs are rendered into a single texture atlas ahead of time. Calling either of `io.Fonts->GetTexDataAsAlpha8()`, `io.Fonts->GetTexDataAsRGBA32()` or `io.Fonts->Build()` will build the atlas.
|
- All loaded fonts glyphs are rendered into a single texture atlas ahead of time. Calling either of `io.Fonts->GetTexDataAsAlpha8()`, `io.Fonts->GetTexDataAsRGBA32()` or `io.Fonts->Build()` will build the atlas.
|
||||||
|
|
||||||
- You can use the style editor `ImGui::ShowStyleEditor()` in the "Fonts" section to browse your fonts and understand what's going on if you have an issue. You can also reach it in `Demo->Tools->Style Editor->Fonts`:
|
- You can use the style editor `ImGui::ShowStyleEditor()` in the "Fonts" section to browse your fonts and understand what's going on if you have an issue. You can also reach it in `Demo->Tools->Style Editor->Fonts`:
|
||||||
|
|
||||||
@ -160,13 +161,13 @@ Some solutions:
|
|||||||
|
|
||||||
##### [Return to Index](#index)
|
##### [Return to Index](#index)
|
||||||
|
|
||||||
## Using Icons
|
## Using Icon Fonts
|
||||||
|
|
||||||
Using an icon font (such as [FontAwesome](http://fontawesome.io) or [OpenFontIcons](https://github.com/traverseda/OpenFontIcons)) is an easy and practical way to use icons in your Dear ImGui application.
|
Using an icon font (such as [FontAwesome](http://fontawesome.io) or [OpenFontIcons](https://github.com/traverseda/OpenFontIcons)) is an easy and practical way to use icons in your Dear ImGui application.
|
||||||
A common pattern is to merge the icon font within your main font, so you can embed icons directly from your strings without having to change fonts back and forth.
|
A common pattern is to merge the icon font within your main font, so you can embed icons directly from your strings without having to change fonts back and forth.
|
||||||
|
|
||||||
To refer to the icon UTF-8 codepoints from your C++ code, you may use those headers files created by Juliette Foucaut: https://github.com/juliettef/IconFontCppHeaders.
|
To refer to the icon UTF-8 codepoints from your C++ code, you may use those headers files created by Juliette Foucaut: https://github.com/juliettef/IconFontCppHeaders.
|
||||||
|
|
||||||
So you can use `ICON_FA_SEARCH` as a string that will render as a "Search" icon.
|
So you can use `ICON_FA_SEARCH` as a string that will render as a "Search" icon.
|
||||||
|
|
||||||
Example Setup:
|
Example Setup:
|
||||||
@ -197,7 +198,7 @@ Here's an application using icons ("Avoyd", https://www.avoyd.com):
|
|||||||
|
|
||||||
##### [Return to Index](#index)
|
##### [Return to Index](#index)
|
||||||
|
|
||||||
## Using FreeType Rasterizer
|
## Using FreeType Rasterizer (imgui_freetype)
|
||||||
|
|
||||||
- Dear ImGui uses imstb\_truetype.h to rasterize fonts (with optional oversampling). This technique and its implementation are not ideal for fonts rendered at small sizes, which may appear a little blurry or hard to read.
|
- Dear ImGui uses imstb\_truetype.h to rasterize fonts (with optional oversampling). This technique and its implementation are not ideal for fonts rendered at small sizes, which may appear a little blurry or hard to read.
|
||||||
- There is an implementation of the ImFontAtlas builder using FreeType that you can use in the [misc/freetype/](https://github.com/ocornut/imgui/tree/master/misc/freetype) folder.
|
- There is an implementation of the ImFontAtlas builder using FreeType that you can use in the [misc/freetype/](https://github.com/ocornut/imgui/tree/master/misc/freetype) folder.
|
||||||
@ -207,6 +208,28 @@ Here's an application using icons ("Avoyd", https://www.avoyd.com):
|
|||||||
|
|
||||||
##### [Return to Index](#index)
|
##### [Return to Index](#index)
|
||||||
|
|
||||||
|
## Using Colorful Glyphs/Emojis
|
||||||
|
|
||||||
|
- Rendering of colored emojis is only supported by imgui_freetype with FreeType 2.10+.
|
||||||
|
- You will need to load fonts with the `ImGuiFreeTypeBuilderFlags_LoadColor` flag.
|
||||||
|
- Emojis are frequently encoded in upper Unicode layers (character codes >0x10000) and will need dear imgui compiled with `IMGUI_USE_WCHAR32`.
|
||||||
|
- Not all types of color fonts are supported by FreeType at the moment.
|
||||||
|
- Stateful Unicode features such as skin tone modifiers are not supported by the text renderer.
|
||||||
|
|
||||||
|
![colored glyphs](https://user-images.githubusercontent.com/8225057/106171241-9dc4ba80-6191-11eb-8a69-ca1467b206d1.png)
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
io.Fonts->AddFontFromFileTTF("../../../imgui_dev/data/fonts/NotoSans-Regular.ttf", 16.0f);
|
||||||
|
static ImWchar ranges[] = { 0x1, 0x1FFFF, 0 };
|
||||||
|
static ImFontConfig cfg;
|
||||||
|
cfg.OversampleH = cfg.OversampleV = 1;
|
||||||
|
cfg.MergeMode = true;
|
||||||
|
cfg.FontBuilderFlags |= ImGuiFreeTypeBuilderFlags_LoadColor;
|
||||||
|
io.Fonts->AddFontFromFileTTF("C:\\Windows\\Fonts\\seguiemj.ttf", 16.0f, &cfg, ranges);
|
||||||
|
```
|
||||||
|
|
||||||
|
##### [Return to Index](#index)
|
||||||
|
|
||||||
## Using Custom Glyph Ranges
|
## Using Custom Glyph Ranges
|
||||||
|
|
||||||
You can use the `ImFontGlyphRangesBuilder` helper to create glyph ranges based on text input. For example: for a game where your script is known, if you can feed your entire script to it and only build the characters the game needs.
|
You can use the `ImFontGlyphRangesBuilder` helper to create glyph ranges based on text input. For example: for a game where your script is known, if you can feed your entire script to it and only build the characters the game needs.
|
||||||
@ -226,7 +249,7 @@ io.Fonts->Build(); // Build the atlas while
|
|||||||
|
|
||||||
## Using Custom Colorful Icons
|
## Using Custom Colorful Icons
|
||||||
|
|
||||||
**(This is a BETA api, use if you are familiar with dear imgui and with your rendering backend)**
|
As an alternative to rendering colorful glyphs using imgui_freetype with `ImGuiFreeTypeBuilderFlags_LoadColor`, you may allocate your own space in the texture atlas and write yourself into it. **(This is a BETA api, use if you are familiar with dear imgui and with your rendering backend)**
|
||||||
|
|
||||||
- You can use the `ImFontAtlas::AddCustomRect()` and `ImFontAtlas::AddCustomRectFontGlyph()` api to register rectangles that will be packed into the font atlas texture. Register them before building the atlas, then call Build()`.
|
- You can use the `ImFontAtlas::AddCustomRect()` and `ImFontAtlas::AddCustomRectFontGlyph()` api to register rectangles that will be packed into the font atlas texture. Register them before building the atlas, then call Build()`.
|
||||||
- You can then use `ImFontAtlas::GetCustomRectByIndex(int)` to query the position/size of your rectangle within the texture, and blit/copy any graphics data of your choice into those rectangles.
|
- You can then use `ImFontAtlas::GetCustomRectByIndex(int)` to query the position/size of your rectangle within the texture, and blit/copy any graphics data of your choice into those rectangles.
|
||||||
@ -315,7 +338,7 @@ Some fonts files are available in the `misc/fonts/` folder:
|
|||||||
<br>https://fonts.google.com/specimen/Roboto
|
<br>https://fonts.google.com/specimen/Roboto
|
||||||
|
|
||||||
**Cousine-Regular.ttf**, by Steve Matteson
|
**Cousine-Regular.ttf**, by Steve Matteson
|
||||||
<br>Digitized data copyright (c) 2010 Google Corporation.
|
<br>Digitized data copyright (c) 2010 Google Corporation.
|
||||||
<br>Licensed under the SIL Open Font License, Version 1.1
|
<br>Licensed under the SIL Open Font License, Version 1.1
|
||||||
<br>https://fonts.google.com/specimen/Cousine
|
<br>https://fonts.google.com/specimen/Cousine
|
||||||
|
|
||||||
|
@ -125,7 +125,7 @@ Officially maintained backends/bindings (in repository):
|
|||||||
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder, Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot, GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer, SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
|
- Frameworks: AGS/Adventure Game Studio, Amethyst, Blender, bsf, Cinder, Cocos2d-x, Diligent Engine, Flexium, GML/Game Maker Studio2, GLEQ, Godot, GTK3+OpenGL3, Irrlicht Engine, LÖVE+LUA, Magnum, Monogame, NanoRT, nCine, Nim Game Lib, Nintendo 3DS & Switch (homebrew), Ogre, openFrameworks, OSG/OpenSceneGraph, Orx, Photoshop, px_render, Qt/QtDirect3D, SDL_Renderer, SFML, Sokol, Unity, Unreal Engine 4, vtk, VulkanHpp, VulkanSceneGraph, Win32 GDI, WxWidgets.
|
||||||
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are auto-generated, you can use its json/lua output to generate bindings for other languages.
|
- Note that C bindings ([cimgui](https://github.com/cimgui/cimgui)) are auto-generated, you can use its json/lua output to generate bindings for other languages.
|
||||||
|
|
||||||
[Useful widgets and extensions](https://github.com/ocornut/imgui/wiki/Useful-Widgets) wiki page:
|
[Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions) wiki page:
|
||||||
- Text editors, node editors, timeline editors, plotting, software renderers, remote network access, memory editors, gizmos etc.
|
- Text editors, node editors, timeline editors, plotting, software renderers, remote network access, memory editors, gizmos etc.
|
||||||
|
|
||||||
Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and ideas.
|
Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and ideas.
|
||||||
@ -143,7 +143,7 @@ Some of the goals for 2021 are:
|
|||||||
|
|
||||||
For more user-submitted screenshots of projects using Dear ImGui, check out the [Gallery Threads](https://github.com/ocornut/imgui/issues/3488)!
|
For more user-submitted screenshots of projects using Dear ImGui, check out the [Gallery Threads](https://github.com/ocornut/imgui/issues/3488)!
|
||||||
|
|
||||||
For a list of third-party widgets and extensions, check out the [Useful Widgets](https://github.com/ocornut/imgui/wiki/Useful-Widgets) wiki page.
|
For a list of third-party widgets and extensions, check out the [Useful Extensions/Widgets](https://github.com/ocornut/imgui/wiki/Useful-Extensions) wiki page.
|
||||||
|
|
||||||
Custom engine
|
Custom engine
|
||||||
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)
|
[![screenshot game](https://raw.githubusercontent.com/wiki/ocornut/imgui/web/v149/gallery_TheDragonsTrap-01-thumb.jpg)](https://cloud.githubusercontent.com/assets/8225057/20628927/33e14cac-b329-11e6-80f6-9524e93b048a.png)
|
||||||
@ -196,13 +196,13 @@ Sponsors
|
|||||||
Ongoing Dear ImGui development is currently financially supported by users and private sponsors:
|
Ongoing Dear ImGui development is currently financially supported by users and private sponsors:
|
||||||
|
|
||||||
*Platinum-chocolate sponsors*
|
*Platinum-chocolate sponsors*
|
||||||
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/all/1), [Google](https://github.com/google/filament), [Nvidia](https://developer.nvidia.com/nvidia-omniverse), [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-library-for-c-dear-imgui/)
|
- [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/all/1), [Google](https://github.com/google/filament), [Nvidia](https://developer.nvidia.com/nvidia-omniverse)
|
||||||
|
|
||||||
*Double-chocolate and Salty caramel sponsors*
|
*Double-chocolate and Salty caramel sponsors*
|
||||||
- [Activision](https://careers.activision.com/c/programmingsoftware-engineering-jobs), [Aras Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-studios.com), [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grindinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level Games](https://www.nextlevelgames.com), [RAD Game Tools](http://www.radgametools.com/), [Supercell](https://supercell.com)
|
- [Activision](https://careers.activision.com/c/programmingsoftware-engineering-jobs), [Aras Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-studios.com), [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grindinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level Games](https://www.nextlevelgames.com), [RAD Game Tools](http://www.radgametools.com/), [O-Net Communications (USA)](http://en.o-netcom.com), [Supercell](https://supercell.com), [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-library-for-c-dear-imgui)
|
||||||
|
|
||||||
Please see [detailed list of Dear ImGui supporters](https://github.com/ocornut/imgui/wiki/Sponsors) for past sponsors.
|
Please see [detailed list of Dear ImGui supporters](https://github.com/ocornut/imgui/wiki/Sponsors) for past sponsors.
|
||||||
From November 2014 to December 2019, ongoing development has also been financially supported by its users on Patreon and through individual donations.
|
From November 2014 to December 2019, ongoing development has also been financially supported by its users on Patreon and through individual donations.
|
||||||
|
|
||||||
**THANK YOU to all past and present supporters for helping to keep this project alive and thriving!**
|
**THANK YOU to all past and present supporters for helping to keep this project alive and thriving!**
|
||||||
|
|
||||||
@ -219,6 +219,8 @@ Developed by [Omar Cornut](https://www.miracleworld.net) and every direct or ind
|
|||||||
Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocornut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter [@ShironekoBen](https://github.com/ShironekoBen).
|
Recurring contributors (2020): Omar Cornut [@ocornut](https://github.com/ocornut), Rokas Kupstys [@rokups](https://github.com/rokups), Ben Carter [@ShironekoBen](https://github.com/ShironekoBen).
|
||||||
A large portion of work on automation systems, regression tests and other features are currently unpublished.
|
A large portion of work on automation systems, regression tests and other features are currently unpublished.
|
||||||
|
|
||||||
|
Sponsoring, support contracts and other B2B transactions are hosted and handled by [Lizardcube](https://www.lizardcube.com).
|
||||||
|
|
||||||
Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games.com) where Atman Binstock had dropped his own simple implementation in the codebase, which I spent quite some time improving and thinking about. It turned out that Atman was exposed to the concept directly by working with Casey. When I moved to Media Molecule I rewrote a new library trying to overcome the flaws and limitations of the first one I've worked with. It became this library and since then I have spent an unreasonable amount of time iterating and improving it."
|
Omar: "I first discovered the IMGUI paradigm at [Q-Games](https://www.q-games.com) where Atman Binstock had dropped his own simple implementation in the codebase, which I spent quite some time improving and thinking about. It turned out that Atman was exposed to the concept directly by working with Casey. When I moved to Media Molecule I rewrote a new library trying to overcome the flaws and limitations of the first one I've worked with. It became this library and since then I have spent an unreasonable amount of time iterating and improving it."
|
||||||
|
|
||||||
Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT license).
|
Embeds [ProggyClean.ttf](http://upperbounds.net) font by Tristan Grimmer (MIT license).
|
||||||
|
@ -42,7 +42,8 @@
|
|||||||
//#define IMGUI_ENABLE_OSX_DEFAULT_CLIPBOARD_FUNCTIONS // [OSX] Implement default OSX clipboard handler (need to link with '-framework ApplicationServices', this is why this is not the default).
|
//#define IMGUI_ENABLE_OSX_DEFAULT_CLIPBOARD_FUNCTIONS // [OSX] Implement default OSX clipboard handler (need to link with '-framework ApplicationServices', this is why this is not the default).
|
||||||
//#define IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS // Don't implement ImFormatString/ImFormatStringV so you can implement them yourself (e.g. if you don't want to link with vsnprintf)
|
//#define IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS // Don't implement ImFormatString/ImFormatStringV so you can implement them yourself (e.g. if you don't want to link with vsnprintf)
|
||||||
//#define IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS // Don't implement ImFabs/ImSqrt/ImPow/ImFmod/ImCos/ImSin/ImAcos/ImAtan2 so you can implement them yourself.
|
//#define IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS // Don't implement ImFabs/ImSqrt/ImPow/ImFmod/ImCos/ImSin/ImAcos/ImAtan2 so you can implement them yourself.
|
||||||
//#define IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS // Don't implement ImFileOpen/ImFileClose/ImFileRead/ImFileWrite so you can implement them yourself if you don't want to link with fopen/fclose/fread/fwrite. This will also disable the LogToTTY() function.
|
//#define IMGUI_DISABLE_FILE_FUNCTIONS // Don't implement ImFileOpen/ImFileClose/ImFileRead/ImFileWrite and ImFileHandle at all (replace them with dummies)
|
||||||
|
//#define IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS // Don't implement ImFileOpen/ImFileClose/ImFileRead/ImFileWrite and ImFileHandle so you can implement them yourself if you don't want to link with fopen/fclose/fread/fwrite. This will also disable the LogToTTY() function.
|
||||||
//#define IMGUI_DISABLE_DEFAULT_ALLOCATORS // Don't implement default allocators calling malloc()/free() to avoid linking with them. You will need to call ImGui::SetAllocatorFunctions().
|
//#define IMGUI_DISABLE_DEFAULT_ALLOCATORS // Don't implement default allocators calling malloc()/free() to avoid linking with them. You will need to call ImGui::SetAllocatorFunctions().
|
||||||
|
|
||||||
//---- Include imgui_user.h at the end of imgui.h as a convenience
|
//---- Include imgui_user.h at the end of imgui.h as a convenience
|
||||||
|
53
imgui.cpp
53
imgui.cpp
@ -1,4 +1,4 @@
|
|||||||
// dear imgui, v1.83 WIP
|
// dear imgui, v1.83
|
||||||
// (main code and documentation)
|
// (main code and documentation)
|
||||||
|
|
||||||
// Help:
|
// Help:
|
||||||
@ -4244,20 +4244,20 @@ void ImGui::UpdateDebugToolItemPicker()
|
|||||||
if (g.DebugItemPickerActive)
|
if (g.DebugItemPickerActive)
|
||||||
{
|
{
|
||||||
const ImGuiID hovered_id = g.HoveredIdPreviousFrame;
|
const ImGuiID hovered_id = g.HoveredIdPreviousFrame;
|
||||||
ImGui::SetMouseCursor(ImGuiMouseCursor_Hand);
|
SetMouseCursor(ImGuiMouseCursor_Hand);
|
||||||
if (ImGui::IsKeyPressedMap(ImGuiKey_Escape))
|
if (IsKeyPressedMap(ImGuiKey_Escape))
|
||||||
g.DebugItemPickerActive = false;
|
g.DebugItemPickerActive = false;
|
||||||
if (ImGui::IsMouseClicked(0) && hovered_id)
|
if (IsMouseClicked(0) && hovered_id)
|
||||||
{
|
{
|
||||||
g.DebugItemPickerBreakId = hovered_id;
|
g.DebugItemPickerBreakId = hovered_id;
|
||||||
g.DebugItemPickerActive = false;
|
g.DebugItemPickerActive = false;
|
||||||
}
|
}
|
||||||
ImGui::SetNextWindowBgAlpha(0.60f);
|
SetNextWindowBgAlpha(0.60f);
|
||||||
ImGui::BeginTooltip();
|
BeginTooltip();
|
||||||
ImGui::Text("HoveredId: 0x%08X", hovered_id);
|
Text("HoveredId: 0x%08X", hovered_id);
|
||||||
ImGui::Text("Press ESC to abort picking.");
|
Text("Press ESC to abort picking.");
|
||||||
ImGui::TextColored(GetStyleColorVec4(hovered_id ? ImGuiCol_Text : ImGuiCol_TextDisabled), "Click to break in debugger!");
|
TextColored(GetStyleColorVec4(hovered_id ? ImGuiCol_Text : ImGuiCol_TextDisabled), "Click to break in debugger!");
|
||||||
ImGui::EndTooltip();
|
EndTooltip();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4279,10 +4279,8 @@ void ImGui::Initialize(ImGuiContext* context)
|
|||||||
g.SettingsHandlers.push_back(ini_handler);
|
g.SettingsHandlers.push_back(ini_handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef IMGUI_HAS_TABLE
|
|
||||||
// Add .ini handle for ImGuiTable type
|
// Add .ini handle for ImGuiTable type
|
||||||
TableSettingsInstallHandler(context);
|
TableSettingsInstallHandler(context);
|
||||||
#endif // #ifdef IMGUI_HAS_TABLE
|
|
||||||
|
|
||||||
// Create default viewport
|
// Create default viewport
|
||||||
ImGuiViewportP* viewport = IM_NEW(ImGuiViewportP)();
|
ImGuiViewportP* viewport = IM_NEW(ImGuiViewportP)();
|
||||||
@ -7886,13 +7884,11 @@ void ImGui::ErrorCheckEndFrameRecover(ImGuiErrorLogCallback log_callback, voi
|
|||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
while (g.CurrentWindowStack.Size > 0)
|
while (g.CurrentWindowStack.Size > 0)
|
||||||
{
|
{
|
||||||
#ifdef IMGUI_HAS_TABLE
|
|
||||||
while (g.CurrentTable && (g.CurrentTable->OuterWindow == g.CurrentWindow || g.CurrentTable->InnerWindow == g.CurrentWindow))
|
while (g.CurrentTable && (g.CurrentTable->OuterWindow == g.CurrentWindow || g.CurrentTable->InnerWindow == g.CurrentWindow))
|
||||||
{
|
{
|
||||||
if (log_callback) log_callback(user_data, "Recovered from missing EndTable() in '%s'", g.CurrentTable->OuterWindow->Name);
|
if (log_callback) log_callback(user_data, "Recovered from missing EndTable() in '%s'", g.CurrentTable->OuterWindow->Name);
|
||||||
EndTable();
|
EndTable();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
ImGuiWindow* window = g.CurrentWindow;
|
ImGuiWindow* window = g.CurrentWindow;
|
||||||
IM_ASSERT(window != NULL);
|
IM_ASSERT(window != NULL);
|
||||||
while (g.CurrentTabBar != NULL) //-V1044
|
while (g.CurrentTabBar != NULL) //-V1044
|
||||||
@ -10354,8 +10350,13 @@ static void ImGui::NavUpdateWindowing()
|
|||||||
NavInitWindow(apply_focus_window, false);
|
NavInitWindow(apply_focus_window, false);
|
||||||
|
|
||||||
// If the window has ONLY a menu layer (no main layer), select it directly
|
// If the window has ONLY a menu layer (no main layer), select it directly
|
||||||
// FIXME-NAV: This should be done in NavInit.. or in FocusWindow..
|
// Use NavLayersActiveMaskNext since windows didn't have a chance to be Begin()-ed on this frame,
|
||||||
if (apply_focus_window->DC.NavLayersActiveMask == (1 << ImGuiNavLayer_Menu))
|
// so CTRL+Tab where the keys are only held for 1 frame will be able to use correct layers mask since
|
||||||
|
// the target window as already been previewed once.
|
||||||
|
// FIXME-NAV: This should be done in NavInit.. or in FocusWindow... However in both of those cases,
|
||||||
|
// we won't have a guarantee that windows has been visible before and therefore NavLayersActiveMask*
|
||||||
|
// won't be valid.
|
||||||
|
if (apply_focus_window->DC.NavLayersActiveMaskNext == (1 << ImGuiNavLayer_Menu))
|
||||||
g.NavLayer = ImGuiNavLayer_Menu;
|
g.NavLayer = ImGuiNavLayer_Menu;
|
||||||
|
|
||||||
// Request OS level focus
|
// Request OS level focus
|
||||||
@ -16115,6 +16116,10 @@ static void MetricsHelpMarker(const char* desc)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef IMGUI_DISABLE_DEMO_WINDOWS
|
||||||
|
namespace ImGui { void ShowFontAtlas(ImFontAtlas* atlas); }
|
||||||
|
#endif
|
||||||
|
|
||||||
void ImGui::ShowMetricsWindow(bool* p_open)
|
void ImGui::ShowMetricsWindow(bool* p_open)
|
||||||
{
|
{
|
||||||
if (!Begin("Dear ImGui Metrics/Debugger", p_open))
|
if (!Begin("Dear ImGui Metrics/Debugger", p_open))
|
||||||
@ -16350,14 +16355,22 @@ void ImGui::ShowMetricsWindow(bool* p_open)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Details for Tables
|
// Details for Tables
|
||||||
#ifdef IMGUI_HAS_TABLE
|
|
||||||
if (TreeNode("Tables", "Tables (%d)", g.Tables.GetSize()))
|
if (TreeNode("Tables", "Tables (%d)", g.Tables.GetSize()))
|
||||||
{
|
{
|
||||||
for (int n = 0; n < g.Tables.GetSize(); n++)
|
for (int n = 0; n < g.Tables.GetSize(); n++)
|
||||||
DebugNodeTable(g.Tables.GetByIndex(n));
|
DebugNodeTable(g.Tables.GetByIndex(n));
|
||||||
TreePop();
|
TreePop();
|
||||||
}
|
}
|
||||||
#endif // #ifdef IMGUI_HAS_TABLE
|
|
||||||
|
// Details for Fonts
|
||||||
|
#ifndef IMGUI_DISABLE_DEMO_WINDOWS
|
||||||
|
ImFontAtlas* atlas = g.IO.Fonts;
|
||||||
|
if (TreeNode("Fonts", "Fonts (%d)", atlas->Fonts.Size))
|
||||||
|
{
|
||||||
|
ShowFontAtlas(atlas);
|
||||||
|
TreePop();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Details for Docking
|
// Details for Docking
|
||||||
#ifdef IMGUI_HAS_DOCK
|
#ifdef IMGUI_HAS_DOCK
|
||||||
@ -16408,14 +16421,12 @@ void ImGui::ShowMetricsWindow(bool* p_open)
|
|||||||
TreePop();
|
TreePop();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef IMGUI_HAS_TABLE
|
|
||||||
if (TreeNode("SettingsTables", "Settings packed data: Tables: %d bytes", g.SettingsTables.size()))
|
if (TreeNode("SettingsTables", "Settings packed data: Tables: %d bytes", g.SettingsTables.size()))
|
||||||
{
|
{
|
||||||
for (ImGuiTableSettings* settings = g.SettingsTables.begin(); settings != NULL; settings = g.SettingsTables.next_chunk(settings))
|
for (ImGuiTableSettings* settings = g.SettingsTables.begin(); settings != NULL; settings = g.SettingsTables.next_chunk(settings))
|
||||||
DebugNodeTableSettings(settings);
|
DebugNodeTableSettings(settings);
|
||||||
TreePop();
|
TreePop();
|
||||||
}
|
}
|
||||||
#endif // #ifdef IMGUI_HAS_TABLE
|
|
||||||
|
|
||||||
#ifdef IMGUI_HAS_DOCK
|
#ifdef IMGUI_HAS_DOCK
|
||||||
if (TreeNode("SettingsDocking", "Settings packed data: Docking"))
|
if (TreeNode("SettingsDocking", "Settings packed data: Docking"))
|
||||||
@ -16514,7 +16525,6 @@ void ImGui::ShowMetricsWindow(bool* p_open)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef IMGUI_HAS_TABLE
|
|
||||||
// Overlay: Display Tables Rectangles
|
// Overlay: Display Tables Rectangles
|
||||||
if (cfg->ShowTablesRects)
|
if (cfg->ShowTablesRects)
|
||||||
{
|
{
|
||||||
@ -16541,7 +16551,6 @@ void ImGui::ShowMetricsWindow(bool* p_open)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // #ifdef IMGUI_HAS_TABLE
|
|
||||||
|
|
||||||
#ifdef IMGUI_HAS_DOCK
|
#ifdef IMGUI_HAS_DOCK
|
||||||
// Overlay: Display Docking info
|
// Overlay: Display Docking info
|
||||||
|
6
imgui.h
6
imgui.h
@ -1,4 +1,4 @@
|
|||||||
// dear imgui, v1.83 WIP
|
// dear imgui, v1.83
|
||||||
// (headers)
|
// (headers)
|
||||||
|
|
||||||
// Help:
|
// Help:
|
||||||
@ -61,8 +61,8 @@ Index of this file:
|
|||||||
|
|
||||||
// Version
|
// Version
|
||||||
// (Integer encoded as XYYZZ for use in #if preprocessor conditionals. Work in progress versions typically starts at XYY99 then bounce up to XYY00, XYY01 etc. when release tagging happens)
|
// (Integer encoded as XYYZZ for use in #if preprocessor conditionals. Work in progress versions typically starts at XYY99 then bounce up to XYY00, XYY01 etc. when release tagging happens)
|
||||||
#define IMGUI_VERSION "1.83 WIP"
|
#define IMGUI_VERSION "1.83"
|
||||||
#define IMGUI_VERSION_NUM 18210
|
#define IMGUI_VERSION_NUM 18300
|
||||||
#define IMGUI_CHECKVERSION() ImGui::DebugCheckVersionAndDataLayout(IMGUI_VERSION, sizeof(ImGuiIO), sizeof(ImGuiStyle), sizeof(ImVec2), sizeof(ImVec4), sizeof(ImDrawVert), sizeof(ImDrawIdx))
|
#define IMGUI_CHECKVERSION() ImGui::DebugCheckVersionAndDataLayout(IMGUI_VERSION, sizeof(ImGuiIO), sizeof(ImGuiStyle), sizeof(ImVec2), sizeof(ImVec4), sizeof(ImDrawVert), sizeof(ImDrawIdx))
|
||||||
#define IMGUI_HAS_TABLE
|
#define IMGUI_HAS_TABLE
|
||||||
#define IMGUI_HAS_VIEWPORT // Viewport WIP branch
|
#define IMGUI_HAS_VIEWPORT // Viewport WIP branch
|
||||||
|
115
imgui_demo.cpp
115
imgui_demo.cpp
@ -1,4 +1,4 @@
|
|||||||
// dear imgui, v1.83 WIP
|
// dear imgui, v1.83
|
||||||
// (demo code)
|
// (demo code)
|
||||||
|
|
||||||
// Help:
|
// Help:
|
||||||
@ -54,6 +54,7 @@ Index of this file:
|
|||||||
// - sub section: ShowDemoWindowTables()
|
// - sub section: ShowDemoWindowTables()
|
||||||
// - sub section: ShowDemoWindowMisc()
|
// - sub section: ShowDemoWindowMisc()
|
||||||
// [SECTION] About Window / ShowAboutWindow()
|
// [SECTION] About Window / ShowAboutWindow()
|
||||||
|
// [SECTION] Font Viewer / ShowFontAtlas()
|
||||||
// [SECTION] Style Editor / ShowStyleEditor()
|
// [SECTION] Style Editor / ShowStyleEditor()
|
||||||
// [SECTION] Example App: Main Menu Bar / ShowExampleAppMainMenuBar()
|
// [SECTION] Example App: Main Menu Bar / ShowExampleAppMainMenuBar()
|
||||||
// [SECTION] Example App: Debug Console / ShowExampleAppConsole()
|
// [SECTION] Example App: Debug Console / ShowExampleAppConsole()
|
||||||
@ -1606,7 +1607,7 @@ static void ShowDemoWindowWidgets()
|
|||||||
// Plot/Graph widgets are not very good.
|
// Plot/Graph widgets are not very good.
|
||||||
// Consider writing your own, or using a third-party one, see:
|
// Consider writing your own, or using a third-party one, see:
|
||||||
// - ImPlot https://github.com/epezent/implot
|
// - ImPlot https://github.com/epezent/implot
|
||||||
// - others https://github.com/ocornut/imgui/wiki/Useful-Widgets
|
// - others https://github.com/ocornut/imgui/wiki/Useful-Extensions
|
||||||
if (ImGui::TreeNode("Plots Widgets"))
|
if (ImGui::TreeNode("Plots Widgets"))
|
||||||
{
|
{
|
||||||
static bool animate = true;
|
static bool animate = true;
|
||||||
@ -1655,7 +1656,7 @@ static void ShowDemoWindowWidgets()
|
|||||||
};
|
};
|
||||||
static int func_type = 0, display_count = 70;
|
static int func_type = 0, display_count = 70;
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
ImGui::SetNextItemWidth(100);
|
ImGui::SetNextItemWidth(ImGui::GetFontSize() * 8);
|
||||||
ImGui::Combo("func", &func_type, "Sin\0Saw\0");
|
ImGui::Combo("func", &func_type, "Sin\0Saw\0");
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
ImGui::SliderInt("Sample count", &display_count, 1, 400);
|
ImGui::SliderInt("Sample count", &display_count, 1, 400);
|
||||||
@ -2448,7 +2449,7 @@ static void ShowDemoWindowLayout()
|
|||||||
// the POV of the parent window). See 'Demo->Querying Status (Active/Focused/Hovered etc.)' for details.
|
// the POV of the parent window). See 'Demo->Querying Status (Active/Focused/Hovered etc.)' for details.
|
||||||
{
|
{
|
||||||
static int offset_x = 0;
|
static int offset_x = 0;
|
||||||
ImGui::SetNextItemWidth(100);
|
ImGui::SetNextItemWidth(ImGui::GetFontSize() * 8);
|
||||||
ImGui::DragInt("Offset X", &offset_x, 1.0f, -1000, 1000);
|
ImGui::DragInt("Offset X", &offset_x, 1.0f, -1000, 1000);
|
||||||
|
|
||||||
ImGui::SetCursorPosX(ImGui::GetCursorPosX() + (float)offset_x);
|
ImGui::SetCursorPosX(ImGui::GetCursorPosX() + (float)offset_x);
|
||||||
@ -2470,15 +2471,15 @@ static void ShowDemoWindowLayout()
|
|||||||
|
|
||||||
if (ImGui::TreeNode("Widgets Width"))
|
if (ImGui::TreeNode("Widgets Width"))
|
||||||
{
|
{
|
||||||
|
static float f = 0.0f;
|
||||||
|
static bool show_indented_items = true;
|
||||||
|
ImGui::Checkbox("Show indented items", &show_indented_items);
|
||||||
|
|
||||||
// Use SetNextItemWidth() to set the width of a single upcoming item.
|
// Use SetNextItemWidth() to set the width of a single upcoming item.
|
||||||
// Use PushItemWidth()/PopItemWidth() to set the width of a group of items.
|
// Use PushItemWidth()/PopItemWidth() to set the width of a group of items.
|
||||||
// In real code use you'll probably want to choose width values that are proportional to your font size
|
// In real code use you'll probably want to choose width values that are proportional to your font size
|
||||||
// e.g. Using '20.0f * GetFontSize()' as width instead of '200.0f', etc.
|
// e.g. Using '20.0f * GetFontSize()' as width instead of '200.0f', etc.
|
||||||
|
|
||||||
static float f = 0.0f;
|
|
||||||
static bool show_indented_items = true;
|
|
||||||
ImGui::Checkbox("Show indented items", &show_indented_items);
|
|
||||||
|
|
||||||
ImGui::Text("SetNextItemWidth/PushItemWidth(100)");
|
ImGui::Text("SetNextItemWidth/PushItemWidth(100)");
|
||||||
ImGui::SameLine(); HelpMarker("Fixed width.");
|
ImGui::SameLine(); HelpMarker("Fixed width.");
|
||||||
ImGui::PushItemWidth(100);
|
ImGui::PushItemWidth(100);
|
||||||
@ -5818,31 +5819,15 @@ void ImGui::ShowAboutWindow(bool* p_open)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// [SECTION] Style Editor / ShowStyleEditor()
|
// [SECTION] Font viewer / ShowFontAtlas()
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// - ShowStyleSelector()
|
|
||||||
// - ShowFontSelector()
|
// - ShowFontSelector()
|
||||||
// - ShowStyleEditor()
|
// - ShowFont()
|
||||||
|
// - ShowFontAtlas()
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
// Demo helper function to select among default colors. See ShowStyleEditor() for more advanced options.
|
// This isn't worth putting in public API but we want Metrics to use it
|
||||||
// Here we use the simplified Combo() api that packs items into a single literal string.
|
namespace ImGui { void ShowFontAtlas(ImFontAtlas* atlas); }
|
||||||
// Useful for quick combo boxes where the choices are known locally.
|
|
||||||
bool ImGui::ShowStyleSelector(const char* label)
|
|
||||||
{
|
|
||||||
static int style_idx = -1;
|
|
||||||
if (ImGui::Combo(label, &style_idx, "Dark\0Light\0Classic\0"))
|
|
||||||
{
|
|
||||||
switch (style_idx)
|
|
||||||
{
|
|
||||||
case 0: ImGui::StyleColorsDark(); break;
|
|
||||||
case 1: ImGui::StyleColorsLight(); break;
|
|
||||||
case 2: ImGui::StyleColorsClassic(); break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Demo helper function to select among loaded fonts.
|
// Demo helper function to select among loaded fonts.
|
||||||
// Here we use the regular BeginCombo()/EndCombo() api which is more the more flexible one.
|
// Here we use the regular BeginCombo()/EndCombo() api which is more the more flexible one.
|
||||||
@ -5871,7 +5856,7 @@ void ImGui::ShowFontSelector(const char* label)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// [Internal] Display details for a single font, called by ShowStyleEditor().
|
// [Internal] Display details for a single font, called by ShowStyleEditor().
|
||||||
static void NodeFont(ImFont* font)
|
static void ShowFont(ImFont* font)
|
||||||
{
|
{
|
||||||
ImGuiIO& io = ImGui::GetIO();
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
ImGuiStyle& style = ImGui::GetStyle();
|
ImGuiStyle& style = ImGui::GetStyle();
|
||||||
@ -5881,9 +5866,13 @@ static void NodeFont(ImFont* font)
|
|||||||
if (!font_details_opened)
|
if (!font_details_opened)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// Display preview text
|
||||||
ImGui::PushFont(font);
|
ImGui::PushFont(font);
|
||||||
ImGui::Text("The quick brown fox jumps over the lazy dog");
|
ImGui::Text("The quick brown fox jumps over the lazy dog");
|
||||||
ImGui::PopFont();
|
ImGui::PopFont();
|
||||||
|
|
||||||
|
// Display details
|
||||||
|
ImGui::SetNextItemWidth(ImGui::GetFontSize() * 8);
|
||||||
ImGui::DragFloat("Font scale", &font->Scale, 0.005f, 0.3f, 2.0f, "%.1f"); // Scale only this font
|
ImGui::DragFloat("Font scale", &font->Scale, 0.005f, 0.3f, 2.0f, "%.1f"); // Scale only this font
|
||||||
ImGui::SameLine(); HelpMarker(
|
ImGui::SameLine(); HelpMarker(
|
||||||
"Note than the default embedded font is NOT meant to be scaled.\n\n"
|
"Note than the default embedded font is NOT meant to be scaled.\n\n"
|
||||||
@ -5901,9 +5890,10 @@ static void NodeFont(ImFont* font)
|
|||||||
if (const ImFontConfig* cfg = &font->ConfigData[config_i])
|
if (const ImFontConfig* cfg = &font->ConfigData[config_i])
|
||||||
ImGui::BulletText("Input %d: \'%s\', Oversample: (%d,%d), PixelSnapH: %d, Offset: (%.1f,%.1f)",
|
ImGui::BulletText("Input %d: \'%s\', Oversample: (%d,%d), PixelSnapH: %d, Offset: (%.1f,%.1f)",
|
||||||
config_i, cfg->Name, cfg->OversampleH, cfg->OversampleV, cfg->PixelSnapH, cfg->GlyphOffset.x, cfg->GlyphOffset.y);
|
config_i, cfg->Name, cfg->OversampleH, cfg->OversampleV, cfg->PixelSnapH, cfg->GlyphOffset.x, cfg->GlyphOffset.y);
|
||||||
|
|
||||||
|
// Display all glyphs of the fonts in separate pages of 256 characters
|
||||||
if (ImGui::TreeNode("Glyphs", "Glyphs (%d)", font->Glyphs.Size))
|
if (ImGui::TreeNode("Glyphs", "Glyphs (%d)", font->Glyphs.Size))
|
||||||
{
|
{
|
||||||
// Display all glyphs of the fonts in separate pages of 256 characters
|
|
||||||
const ImU32 glyph_col = ImGui::GetColorU32(ImGuiCol_Text);
|
const ImU32 glyph_col = ImGui::GetColorU32(ImGuiCol_Text);
|
||||||
for (unsigned int base = 0; base <= IM_UNICODE_CODEPOINT_MAX; base += 256)
|
for (unsigned int base = 0; base <= IM_UNICODE_CODEPOINT_MAX; base += 256)
|
||||||
{
|
{
|
||||||
@ -5958,6 +5948,50 @@ static void NodeFont(ImFont* font)
|
|||||||
ImGui::TreePop();
|
ImGui::TreePop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ImGui::ShowFontAtlas(ImFontAtlas* atlas)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < atlas->Fonts.Size; i++)
|
||||||
|
{
|
||||||
|
ImFont* font = atlas->Fonts[i];
|
||||||
|
ImGui::PushID(font);
|
||||||
|
ShowFont(font);
|
||||||
|
ImGui::PopID();
|
||||||
|
}
|
||||||
|
if (ImGui::TreeNode("Atlas texture", "Atlas texture (%dx%d pixels)", atlas->TexWidth, atlas->TexHeight))
|
||||||
|
{
|
||||||
|
ImVec4 tint_col = ImVec4(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
|
ImVec4 border_col = ImVec4(1.0f, 1.0f, 1.0f, 0.5f);
|
||||||
|
ImGui::Image(atlas->TexID, ImVec2((float)atlas->TexWidth, (float)atlas->TexHeight), ImVec2(0, 0), ImVec2(1, 1), tint_col, border_col);
|
||||||
|
ImGui::TreePop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// [SECTION] Style Editor / ShowStyleEditor()
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// - ShowStyleSelector()
|
||||||
|
// - ShowStyleEditor()
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Demo helper function to select among default colors. See ShowStyleEditor() for more advanced options.
|
||||||
|
// Here we use the simplified Combo() api that packs items into a single literal string.
|
||||||
|
// Useful for quick combo boxes where the choices are known locally.
|
||||||
|
bool ImGui::ShowStyleSelector(const char* label)
|
||||||
|
{
|
||||||
|
static int style_idx = -1;
|
||||||
|
if (ImGui::Combo(label, &style_idx, "Dark\0Light\0Classic\0"))
|
||||||
|
{
|
||||||
|
switch (style_idx)
|
||||||
|
{
|
||||||
|
case 0: ImGui::StyleColorsDark(); break;
|
||||||
|
case 1: ImGui::StyleColorsLight(); break;
|
||||||
|
case 2: ImGui::StyleColorsClassic(); break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void ImGui::ShowStyleEditor(ImGuiStyle* ref)
|
void ImGui::ShowStyleEditor(ImGuiStyle* ref)
|
||||||
{
|
{
|
||||||
// You can pass in a reference ImGuiStyle structure to compare to, revert to and save to
|
// You can pass in a reference ImGuiStyle structure to compare to, revert to and save to
|
||||||
@ -6114,21 +6148,7 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
|
|||||||
ImGuiIO& io = ImGui::GetIO();
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
ImFontAtlas* atlas = io.Fonts;
|
ImFontAtlas* atlas = io.Fonts;
|
||||||
HelpMarker("Read FAQ and docs/FONTS.md for details on font loading.");
|
HelpMarker("Read FAQ and docs/FONTS.md for details on font loading.");
|
||||||
ImGui::PushItemWidth(120);
|
ImGui::ShowFontAtlas(atlas);
|
||||||
for (int i = 0; i < atlas->Fonts.Size; i++)
|
|
||||||
{
|
|
||||||
ImFont* font = atlas->Fonts[i];
|
|
||||||
ImGui::PushID(font);
|
|
||||||
NodeFont(font);
|
|
||||||
ImGui::PopID();
|
|
||||||
}
|
|
||||||
if (ImGui::TreeNode("Atlas texture", "Atlas texture (%dx%d pixels)", atlas->TexWidth, atlas->TexHeight))
|
|
||||||
{
|
|
||||||
ImVec4 tint_col = ImVec4(1.0f, 1.0f, 1.0f, 1.0f);
|
|
||||||
ImVec4 border_col = ImVec4(1.0f, 1.0f, 1.0f, 0.5f);
|
|
||||||
ImGui::Image(atlas->TexID, ImVec2((float)atlas->TexWidth, (float)atlas->TexHeight), ImVec2(0, 0), ImVec2(1, 1), tint_col, border_col);
|
|
||||||
ImGui::TreePop();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Post-baking font scaling. Note that this is NOT the nice way of scaling fonts, read below.
|
// Post-baking font scaling. Note that this is NOT the nice way of scaling fonts, read below.
|
||||||
// (we enforce hard clamping manually as by default DragFloat/SliderFloat allows CTRL+Click text to get out of bounds).
|
// (we enforce hard clamping manually as by default DragFloat/SliderFloat allows CTRL+Click text to get out of bounds).
|
||||||
@ -6140,6 +6160,7 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
|
|||||||
"rebuild the font atlas, and call style.ScaleAllSizes() on a reference ImGuiStyle structure.\n"
|
"rebuild the font atlas, and call style.ScaleAllSizes() on a reference ImGuiStyle structure.\n"
|
||||||
"Using those settings here will give you poor quality results.");
|
"Using those settings here will give you poor quality results.");
|
||||||
static float window_scale = 1.0f;
|
static float window_scale = 1.0f;
|
||||||
|
ImGui::PushItemWidth(ImGui::GetFontSize() * 8);
|
||||||
if (ImGui::DragFloat("window scale", &window_scale, 0.005f, MIN_SCALE, MAX_SCALE, "%.2f", ImGuiSliderFlags_AlwaysClamp)) // Scale only this window
|
if (ImGui::DragFloat("window scale", &window_scale, 0.005f, MIN_SCALE, MAX_SCALE, "%.2f", ImGuiSliderFlags_AlwaysClamp)) // Scale only this window
|
||||||
ImGui::SetWindowFontScale(window_scale);
|
ImGui::SetWindowFontScale(window_scale);
|
||||||
ImGui::DragFloat("global scale", &io.FontGlobalScale, 0.005f, MIN_SCALE, MAX_SCALE, "%.2f", ImGuiSliderFlags_AlwaysClamp); // Scale everything
|
ImGui::DragFloat("global scale", &io.FontGlobalScale, 0.005f, MIN_SCALE, MAX_SCALE, "%.2f", ImGuiSliderFlags_AlwaysClamp); // Scale everything
|
||||||
@ -6159,7 +6180,7 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
|
|||||||
HelpMarker("Faster lines using texture data. Require backend to render with bilinear filtering (not point/nearest filtering).");
|
HelpMarker("Faster lines using texture data. Require backend to render with bilinear filtering (not point/nearest filtering).");
|
||||||
|
|
||||||
ImGui::Checkbox("Anti-aliased fill", &style.AntiAliasedFill);
|
ImGui::Checkbox("Anti-aliased fill", &style.AntiAliasedFill);
|
||||||
ImGui::PushItemWidth(100);
|
ImGui::PushItemWidth(ImGui::GetFontSize() * 8);
|
||||||
ImGui::DragFloat("Curve Tessellation Tolerance", &style.CurveTessellationTol, 0.02f, 0.10f, 10.0f, "%.2f");
|
ImGui::DragFloat("Curve Tessellation Tolerance", &style.CurveTessellationTol, 0.02f, 0.10f, 10.0f, "%.2f");
|
||||||
if (style.CurveTessellationTol < 0.10f) style.CurveTessellationTol = 0.10f;
|
if (style.CurveTessellationTol < 0.10f) style.CurveTessellationTol = 0.10f;
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// dear imgui, v1.83 WIP
|
// dear imgui, v1.83
|
||||||
// (drawing and font code)
|
// (drawing and font code)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// dear imgui, v1.83 WIP
|
// dear imgui, v1.83
|
||||||
// (internal structures/api)
|
// (internal structures/api)
|
||||||
|
|
||||||
// You may use this file to debug, understand or extend ImGui features but we don't provide any guarantee of forward compatibility!
|
// You may use this file to debug, understand or extend ImGui features but we don't provide any guarantee of forward compatibility!
|
||||||
@ -2233,8 +2233,6 @@ struct IMGUI_API ImGuiTabBar
|
|||||||
// [SECTION] Table support
|
// [SECTION] Table support
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
#ifdef IMGUI_HAS_TABLE
|
|
||||||
|
|
||||||
#define IM_COL32_DISABLE IM_COL32(0,0,0,1) // Special sentinel code which cannot be used as a regular color.
|
#define IM_COL32_DISABLE IM_COL32(0,0,0,1) // Special sentinel code which cannot be used as a regular color.
|
||||||
#define IMGUI_TABLE_MAX_COLUMNS 64 // sizeof(ImU64) * 8. This is solely because we frequently encode columns set in a ImU64.
|
#define IMGUI_TABLE_MAX_COLUMNS 64 // sizeof(ImU64) * 8. This is solely because we frequently encode columns set in a ImU64.
|
||||||
#define IMGUI_TABLE_MAX_DRAW_CHANNELS (4 + 64 * 2) // See TableSetupDrawChannels()
|
#define IMGUI_TABLE_MAX_DRAW_CHANNELS (4 + 64 * 2) // See TableSetupDrawChannels()
|
||||||
@ -2484,8 +2482,6 @@ struct ImGuiTableSettings
|
|||||||
ImGuiTableColumnSettings* GetColumnSettings() { return (ImGuiTableColumnSettings*)(this + 1); }
|
ImGuiTableColumnSettings* GetColumnSettings() { return (ImGuiTableColumnSettings*)(this + 1); }
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // #ifdef IMGUI_HAS_TABLE
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// [SECTION] ImGui internal API
|
// [SECTION] ImGui internal API
|
||||||
// No guarantee of forward compatibility here!
|
// No guarantee of forward compatibility here!
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// dear imgui, v1.83 WIP
|
// dear imgui, v1.83
|
||||||
// (tables and columns code)
|
// (tables and columns code)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// dear imgui, v1.83 WIP
|
// dear imgui, v1.83
|
||||||
// (widgets code)
|
// (widgets code)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1584,7 +1584,9 @@ bool ImGui::BeginCombo(const char* label, const char* preview_value, ImGuiComboF
|
|||||||
|
|
||||||
bool hovered, held;
|
bool hovered, held;
|
||||||
bool pressed = ButtonBehavior(frame_bb, id, &hovered, &held);
|
bool pressed = ButtonBehavior(frame_bb, id, &hovered, &held);
|
||||||
bool popup_open = IsPopupOpen(id, ImGuiPopupFlags_None);
|
|
||||||
|
const ImGuiID popup_id = ImHashStr("##ComboPopup", 0, id);
|
||||||
|
bool popup_open = IsPopupOpen(popup_id, ImGuiPopupFlags_None);
|
||||||
|
|
||||||
const ImU32 frame_col = GetColorU32(hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg);
|
const ImU32 frame_col = GetColorU32(hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg);
|
||||||
const float value_x2 = ImMax(frame_bb.Min.x, frame_bb.Max.x - arrow_size);
|
const float value_x2 = ImMax(frame_bb.Min.x, frame_bb.Max.x - arrow_size);
|
||||||
@ -1614,7 +1616,7 @@ bool ImGui::BeginCombo(const char* label, const char* preview_value, ImGuiComboF
|
|||||||
{
|
{
|
||||||
if (window->DC.NavLayerCurrent == 0)
|
if (window->DC.NavLayerCurrent == 0)
|
||||||
window->NavLastIds[0] = id;
|
window->NavLastIds[0] = id;
|
||||||
OpenPopupEx(id, ImGuiPopupFlags_None);
|
OpenPopupEx(popup_id, ImGuiPopupFlags_None);
|
||||||
popup_open = true;
|
popup_open = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6307,7 +6309,7 @@ bool ImGui::ListBox(const char* label, int* current_item, bool (*items_getter)(v
|
|||||||
// Plot/Graph widgets are not very good.
|
// Plot/Graph widgets are not very good.
|
||||||
// Consider writing your own, or using a third-party one, see:
|
// Consider writing your own, or using a third-party one, see:
|
||||||
// - ImPlot https://github.com/epezent/implot
|
// - ImPlot https://github.com/epezent/implot
|
||||||
// - others https://github.com/ocornut/imgui/wiki/Useful-Widgets
|
// - others https://github.com/ocornut/imgui/wiki/Useful-Extensions
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
|
|
||||||
int ImGui::PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 frame_size)
|
int ImGui::PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 frame_size)
|
||||||
@ -6896,11 +6898,11 @@ bool ImGui::MenuItem(const char* label, const char* shortcut, bool selected, boo
|
|||||||
if (window->DC.LayoutType == ImGuiLayoutType_Horizontal)
|
if (window->DC.LayoutType == ImGuiLayoutType_Horizontal)
|
||||||
{
|
{
|
||||||
// Mimic the exact layout spacing of BeginMenu() to allow MenuItem() inside a menu bar, which is a little misleading but may be useful
|
// Mimic the exact layout spacing of BeginMenu() to allow MenuItem() inside a menu bar, which is a little misleading but may be useful
|
||||||
// Note that in this situation we render neither the shortcut neither the selected tick mark
|
// Note that in this situation: we don't render the shortcut, we render a highlight instead of the selected tick mark.
|
||||||
float w = label_size.x;
|
float w = label_size.x;
|
||||||
window->DC.CursorPos.x += IM_FLOOR(style.ItemSpacing.x * 0.5f);
|
window->DC.CursorPos.x += IM_FLOOR(style.ItemSpacing.x * 0.5f);
|
||||||
PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(style.ItemSpacing.x * 2.0f, style.ItemSpacing.y));
|
PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(style.ItemSpacing.x * 2.0f, style.ItemSpacing.y));
|
||||||
pressed = Selectable(label, false, flags, ImVec2(w, 0.0f));
|
pressed = Selectable(label, selected, flags, ImVec2(w, 0.0f));
|
||||||
PopStyleVar();
|
PopStyleVar();
|
||||||
window->DC.CursorPos.x += IM_FLOOR(style.ItemSpacing.x * (-1.0f + 0.5f)); // -1 spacing to compensate the spacing added when Selectable() did a SameLine(). It would also work to call SameLine() ourselves after the PopStyleVar().
|
window->DC.CursorPos.x += IM_FLOOR(style.ItemSpacing.x * (-1.0f + 0.5f)); // -1 spacing to compensate the spacing added when Selectable() did a SameLine(). It would also work to call SameLine() ourselves after the PopStyleVar().
|
||||||
}
|
}
|
||||||
|
@ -28,3 +28,10 @@ See https://gist.github.com/ocornut/b3a9ecf13502fd818799a452969649ad
|
|||||||
|
|
||||||
Small, thin anti-aliased fonts are typically benefiting a lots from Freetype's hinting:
|
Small, thin anti-aliased fonts are typically benefiting a lots from Freetype's hinting:
|
||||||
![comparing_font_rasterizers](https://user-images.githubusercontent.com/8225057/107550178-fef87f00-6bd0-11eb-8d09-e2edb2f0ccfc.gif)
|
![comparing_font_rasterizers](https://user-images.githubusercontent.com/8225057/107550178-fef87f00-6bd0-11eb-8d09-e2edb2f0ccfc.gif)
|
||||||
|
|
||||||
|
### Colorful glyphs/emojis
|
||||||
|
|
||||||
|
You can use the `ImGuiFreeTypeBuilderFlags_LoadColor` flag to load certain colorful glyphs. See
|
||||||
|
["Using Colorful Glyphs/Emojis"](https://github.com/ocornut/imgui/edit/master/docs/FONTS.md#using-colorful-glyphsemojis) section of FONTS.md.
|
||||||
|
|
||||||
|
![colored glyphs](https://user-images.githubusercontent.com/8225057/106171241-9dc4ba80-6191-11eb-8a69-ca1467b206d1.png)
|
||||||
|
Loading…
Reference in New Issue
Block a user