mirror of
https://github.com/Drezil/imgui.git
synced 2024-11-25 21:17:01 +00:00
Various comments + Doc: Examples readme. Moved main menu bar code below menu bar code.
This commit is contained in:
parent
7dbae8a198
commit
048b73dfaa
@ -62,10 +62,10 @@ You can find binaries of some of those example applications at:
|
|||||||
Most the example bindings are split in 2 parts:
|
Most the example bindings are split in 2 parts:
|
||||||
|
|
||||||
- The "Platform" bindings, in charge of: mouse/keyboard/gamepad inputs, cursor shape, timing, windowing.
|
- The "Platform" bindings, in charge of: mouse/keyboard/gamepad inputs, cursor shape, timing, windowing.
|
||||||
Examples: Windows (imgui_impl_win32.cpp), GLFW (imgui_impl_glfw.cpp), SDL2 (imgui_impl_sdl.cpp)
|
Examples: Windows (imgui_impl_win32.cpp), GLFW (imgui_impl_glfw.cpp), SDL2 (imgui_impl_sdl.cpp), etc.
|
||||||
|
|
||||||
- The "Renderer" bindings, in charge of: creating the main font texture, rendering imgui draw data.
|
- The "Renderer" bindings, in charge of: creating the main font texture, rendering imgui draw data.
|
||||||
Examples: DirectX11 (imgui_impl_dx11.cpp), GL3 (imgui_impl_opengl3.cpp), Vulkan (imgui_impl_vulkan.cpp)
|
Examples: DirectX11 (imgui_impl_dx11.cpp), GL3 (imgui_impl_opengl3.cpp), Vulkan (imgui_impl_vulkan.cpp), etc.
|
||||||
|
|
||||||
- The example _applications_ usually combine 1 platform + 1 renderer binding to create a working program.
|
- The example _applications_ usually combine 1 platform + 1 renderer binding to create a working program.
|
||||||
Examples: the example_win32_directx11/ application combines imgui_impl_win32.cpp + imgui_impl_dx11.cpp.
|
Examples: the example_win32_directx11/ application combines imgui_impl_win32.cpp + imgui_impl_dx11.cpp.
|
||||||
@ -122,16 +122,32 @@ List of high-level Frameworks Bindings in this repository: (combine Platform + R
|
|||||||
imgui_impl_allegro5.cpp
|
imgui_impl_allegro5.cpp
|
||||||
imgui_impl_marmalade.cpp
|
imgui_impl_marmalade.cpp
|
||||||
|
|
||||||
Note that Dear ImGui works with Emscripten.
|
Note that Dear ImGui works with Emscripten. The examples_emscripten/ app uses imgui_impl_sdl.cpp and
|
||||||
The examples_emscripten/ app uses sdl.cpp + opengl3.cpp but other combinations are possible.
|
imgui_impl_opengl3.cpp, but other combinations are possible.
|
||||||
|
|
||||||
Third-party framework, graphics API and languages bindings are listed at:
|
Third-party framework, graphics API and languages bindings are listed at:
|
||||||
|
|
||||||
https://github.com/ocornut/imgui/wiki/Bindings
|
https://github.com/ocornut/imgui/wiki/Bindings
|
||||||
|
|
||||||
Languages: C, C#, ChaiScript, D, Go, Haxe, Java, Lua, Odin, Pascal, PureBasic, Python, Rust, Swift...
|
Languages:
|
||||||
Frameworks: Cinder, Cocoa (OSX), Cocos2d-x, SFML, GML/GameMaker Studio, Irrlicht, Ogre, OpenSceneGraph,
|
C, C#, ChaiScript, CovScript, D, Go, Haxe/hxcpp, Java, JavaScript, Julia, Lua, Nim,
|
||||||
openFrameworks, LOVE, NanoRT, Nim Game Lib, Qt3d, SFML, Unreal Engine 4...
|
Odin, Pascal, PureBasic, Python, Ruby, Rust, Swift...
|
||||||
Miscellaneous: Software Renderer, RemoteImgui, etc.
|
|
||||||
|
Frameworks:
|
||||||
|
Amethyst, bsf, Cinder, Cocoa2d-x, Diligent Engine, Flexium, GML/GameMaker Studio,
|
||||||
|
GTK3 + OpenGL, Irrlicht, Ogre, OpenSceneGraph/OSG, openFrameworks, Orx, LÖVE+LUA,
|
||||||
|
Magnum, NanoRT, Nim Game Lib, px_render, Qt, Qt3d, SFML, Sokol, Unreal Engine 4, vtk...
|
||||||
|
|
||||||
|
Miscellaneous: Software Renderer, RemoteImgui, imgui-ws, etc.
|
||||||
|
|
||||||
|
Not sure which to use?
|
||||||
|
Recommended platform/frameworks:
|
||||||
|
|
||||||
|
GLFW https://github.com/glfw/glfw Use imgui_impl_glfw.cpp
|
||||||
|
SDL2 https://www.libsdl.org Use imgui_impl_sdl.cp
|
||||||
|
Sokol https://github.com/floooh/sokol Use util/sokol_imgui.h in Sokol repository.
|
||||||
|
|
||||||
|
Those will allow you to create portable applications and will solve and abstract away many issues.
|
||||||
|
|
||||||
|
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
|
47
imgui.h
47
imgui.h
@ -27,7 +27,7 @@ Index of this file:
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
// Configuration file with compile-time options (edit imconfig.h or define IMGUI_USER_CONFIG to your own filename)
|
// Configuration file with compile-time options (edit imconfig.h or #define IMGUI_USER_CONFIG to your own filename)
|
||||||
#ifdef IMGUI_USER_CONFIG
|
#ifdef IMGUI_USER_CONFIG
|
||||||
#include IMGUI_USER_CONFIG
|
#include IMGUI_USER_CONFIG
|
||||||
#endif
|
#endif
|
||||||
@ -39,8 +39,9 @@ Index of this file:
|
|||||||
// Header mess
|
// Header mess
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
#include <float.h> // FLT_MAX
|
// Includes
|
||||||
#include <stdarg.h> // va_list
|
#include <float.h> // FLT_MIN, FLT_MAX
|
||||||
|
#include <stdarg.h> // va_list, va_start, va_end
|
||||||
#include <stddef.h> // ptrdiff_t, NULL
|
#include <stddef.h> // ptrdiff_t, NULL
|
||||||
#include <string.h> // memset, memmove, memcpy, strlen, strchr, strcpy, strcmp
|
#include <string.h> // memset, memmove, memcpy, strlen, strchr, strcpy, strcmp
|
||||||
|
|
||||||
@ -66,13 +67,13 @@ Index of this file:
|
|||||||
#define IM_ASSERT(_EXPR) assert(_EXPR) // You can override the default assert handler by editing imconfig.h
|
#define IM_ASSERT(_EXPR) assert(_EXPR) // You can override the default assert handler by editing imconfig.h
|
||||||
#endif
|
#endif
|
||||||
#if defined(__clang__) || defined(__GNUC__)
|
#if defined(__clang__) || defined(__GNUC__)
|
||||||
#define IM_FMTARGS(FMT) __attribute__((format(printf, FMT, FMT+1))) // Apply printf-style warnings to user functions.
|
#define IM_FMTARGS(FMT) __attribute__((format(printf, FMT, FMT+1))) // To apply printf-style warnings to our functions.
|
||||||
#define IM_FMTLIST(FMT) __attribute__((format(printf, FMT, 0)))
|
#define IM_FMTLIST(FMT) __attribute__((format(printf, FMT, 0)))
|
||||||
#else
|
#else
|
||||||
#define IM_FMTARGS(FMT)
|
#define IM_FMTARGS(FMT)
|
||||||
#define IM_FMTLIST(FMT)
|
#define IM_FMTLIST(FMT)
|
||||||
#endif
|
#endif
|
||||||
#define IM_ARRAYSIZE(_ARR) ((int)(sizeof(_ARR)/sizeof(*_ARR))) // Size of a static C-style array. Don't use on pointers!
|
#define IM_ARRAYSIZE(_ARR) ((int)(sizeof(_ARR) / sizeof(*_ARR))) // Size of a static C-style array. Don't use on pointers!
|
||||||
#define IM_UNUSED(_VAR) ((void)_VAR) // Used to silence "unused variable warnings". Often useful as asserts may be stripped out from final builds.
|
#define IM_UNUSED(_VAR) ((void)_VAR) // Used to silence "unused variable warnings". Often useful as asserts may be stripped out from final builds.
|
||||||
#if (__cplusplus >= 201100)
|
#if (__cplusplus >= 201100)
|
||||||
#define IM_OFFSETOF(_TYPE,_MEMBER) offsetof(_TYPE, _MEMBER) // Offset of _MEMBER within _TYPE. Standardized as offsetof() in C++11
|
#define IM_OFFSETOF(_TYPE,_MEMBER) offsetof(_TYPE, _MEMBER) // Offset of _MEMBER within _TYPE. Standardized as offsetof() in C++11
|
||||||
@ -123,7 +124,7 @@ struct ImGuiTextBuffer; // Helper to hold and append into a text buf
|
|||||||
struct ImGuiTextFilter; // Helper to parse and apply text filters (e.g. "aaaaa[,bbbb][,ccccc]")
|
struct ImGuiTextFilter; // Helper to parse and apply text filters (e.g. "aaaaa[,bbbb][,ccccc]")
|
||||||
|
|
||||||
// Typedefs and Enums/Flags (declared as int for compatibility with old C++, to allow using as flags and to not pollute the top of this file)
|
// Typedefs and Enums/Flags (declared as int for compatibility with old C++, to allow using as flags and to not pollute the top of this file)
|
||||||
// Use your programming IDE "Go to definition" facility on the names of the center columns to find the actual flags/enum lists.
|
// Use your programming IDE "Go to definition" facility on the names in the central column below to find the actual flags/enum lists.
|
||||||
#ifndef ImTextureID
|
#ifndef ImTextureID
|
||||||
typedef void* ImTextureID; // User data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp)
|
typedef void* ImTextureID; // User data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp)
|
||||||
#endif
|
#endif
|
||||||
@ -157,7 +158,7 @@ typedef int (*ImGuiInputTextCallback)(ImGuiInputTextCallbackData *data);
|
|||||||
typedef void (*ImGuiSizeCallback)(ImGuiSizeCallbackData* data);
|
typedef void (*ImGuiSizeCallback)(ImGuiSizeCallbackData* data);
|
||||||
|
|
||||||
// Scalar data types
|
// Scalar data types
|
||||||
typedef signed char ImS8; // 8-bit signed integer == char
|
typedef signed char ImS8; // 8-bit signed integer
|
||||||
typedef unsigned char ImU8; // 8-bit unsigned integer
|
typedef unsigned char ImU8; // 8-bit unsigned integer
|
||||||
typedef signed short ImS16; // 16-bit signed integer
|
typedef signed short ImS16; // 16-bit signed integer
|
||||||
typedef unsigned short ImU16; // 16-bit unsigned integer
|
typedef unsigned short ImU16; // 16-bit unsigned integer
|
||||||
@ -201,14 +202,14 @@ struct ImVec4
|
|||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// ImGui: Dear ImGui end-user API
|
// ImGui: Dear ImGui end-user API
|
||||||
// (Inside a namespace so you can add extra functions in your own separate file. Please don't modify imgui.cpp/.h!)
|
// (Inside a namespace so you can add extra functions in your own separate file. Please don't modify imgui source files!)
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
namespace ImGui
|
namespace ImGui
|
||||||
{
|
{
|
||||||
// Context creation and access
|
// Context creation and access
|
||||||
// Each context create its own ImFontAtlas by default. You may instance one yourself and pass it to CreateContext() to share a font atlas between imgui contexts.
|
// Each context create its own ImFontAtlas by default. You may instance one yourself and pass it to CreateContext() to share a font atlas between imgui contexts.
|
||||||
// All those functions are not reliant on the current context.
|
// None of those functions is reliant on the current context.
|
||||||
IMGUI_API ImGuiContext* CreateContext(ImFontAtlas* shared_font_atlas = NULL);
|
IMGUI_API ImGuiContext* CreateContext(ImFontAtlas* shared_font_atlas = NULL);
|
||||||
IMGUI_API void DestroyContext(ImGuiContext* ctx = NULL); // NULL = destroy current context
|
IMGUI_API void DestroyContext(ImGuiContext* ctx = NULL); // NULL = destroy current context
|
||||||
IMGUI_API ImGuiContext* GetCurrentContext();
|
IMGUI_API ImGuiContext* GetCurrentContext();
|
||||||
@ -245,8 +246,9 @@ namespace ImGui
|
|||||||
// which clicking will set the boolean to false when clicked.
|
// which clicking will set the boolean to false when clicked.
|
||||||
// - Begin() return false to indicate the window is collapsed or fully clipped, so you may early out and omit submitting
|
// - Begin() return false to indicate the window is collapsed or fully clipped, so you may early out and omit submitting
|
||||||
// anything to the window. Always call a matching End() for each Begin() call, regardless of its return value!
|
// anything to the window. Always call a matching End() for each Begin() call, regardless of its return value!
|
||||||
// [this is due to legacy reason and is inconsistent with most other functions such as BeginMenu/EndMenu, BeginPopup/EndPopup, etc.
|
// [Important: due to legacy reason, this is inconsistent with most other functions such as BeginMenu/EndMenu,
|
||||||
// where the EndXXX call should only be called if the corresponding BeginXXX function returned true.]
|
// BeginPopup/EndPopup, etc. where the EndXXX call should only be called if the corresponding BeginXXX function
|
||||||
|
// returned true. Begin and BeginChild are the only odd ones out. Will be fixed in a future update.]
|
||||||
// - Note that the bottom of window stack always contains a window called "Debug".
|
// - Note that the bottom of window stack always contains a window called "Debug".
|
||||||
IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0);
|
IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0);
|
||||||
IMGUI_API void End();
|
IMGUI_API void End();
|
||||||
@ -255,13 +257,13 @@ namespace ImGui
|
|||||||
// - Use child windows to begin into a self-contained independent scrolling/clipping regions within a host window. Child windows can embed their own child.
|
// - Use child windows to begin into a self-contained independent scrolling/clipping regions within a host window. Child windows can embed their own child.
|
||||||
// - For each independent axis of 'size': ==0.0f: use remaining host window size / >0.0f: fixed size / <0.0f: use remaining window size minus abs(size) / Each axis can use a different mode, e.g. ImVec2(0,400).
|
// - For each independent axis of 'size': ==0.0f: use remaining host window size / >0.0f: fixed size / <0.0f: use remaining window size minus abs(size) / Each axis can use a different mode, e.g. ImVec2(0,400).
|
||||||
// - BeginChild() returns false to indicate the window is collapsed or fully clipped, so you may early out and omit submitting anything to the window.
|
// - BeginChild() returns false to indicate the window is collapsed or fully clipped, so you may early out and omit submitting anything to the window.
|
||||||
// Always call a matching EndChild() for each BeginChild() call, regardless of its return value [this is due to legacy reason and is inconsistent with most other functions such as BeginMenu/EndMenu, BeginPopup/EndPopup, etc. where the EndXXX call should only be called if the corresponding BeginXXX function returned true.]
|
// Always call a matching EndChild() for each BeginChild() call, regardless of its return value [as with Begin: this is due to legacy reason and inconsistent with most BeginXXX functions apart from the regular Begin() which behaves like BeginChild().]
|
||||||
IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags flags = 0);
|
IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags flags = 0);
|
||||||
IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags flags = 0);
|
IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags flags = 0);
|
||||||
IMGUI_API void EndChild();
|
IMGUI_API void EndChild();
|
||||||
|
|
||||||
// Windows Utilities
|
// Windows Utilities
|
||||||
// - "current window" = the window we are appending into while inside a Begin()/End() block. "next window" = next window we will Begin() into.
|
// - 'current window' = the window we are appending into while inside a Begin()/End() block. 'next window' = next window we will Begin() into.
|
||||||
IMGUI_API bool IsWindowAppearing();
|
IMGUI_API bool IsWindowAppearing();
|
||||||
IMGUI_API bool IsWindowCollapsed();
|
IMGUI_API bool IsWindowCollapsed();
|
||||||
IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags=0); // is current window focused? or its root/child, depending on flags. see flags for options.
|
IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags=0); // is current window focused? or its root/child, depending on flags. see flags for options.
|
||||||
@ -342,6 +344,7 @@ namespace ImGui
|
|||||||
// Cursor / Layout
|
// Cursor / Layout
|
||||||
// - By "cursor" we mean the current output position.
|
// - By "cursor" we mean the current output position.
|
||||||
// - The typical widget behavior is to output themselves at the current cursor position, then move the cursor one line down.
|
// - The typical widget behavior is to output themselves at the current cursor position, then move the cursor one line down.
|
||||||
|
// - You can call SameLine() between widgets to undo the last carriage return and output at the right of the preceeding widget.
|
||||||
IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator.
|
IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator.
|
||||||
IMGUI_API void SameLine(float offset_from_start_x=0.0f, float spacing=-1.0f); // call between widgets or groups to layout them horizontally. X position given in window coordinates.
|
IMGUI_API void SameLine(float offset_from_start_x=0.0f, float spacing=-1.0f); // call between widgets or groups to layout them horizontally. X position given in window coordinates.
|
||||||
IMGUI_API void NewLine(); // undo a SameLine() or force a new line when in an horizontal-layout context.
|
IMGUI_API void NewLine(); // undo a SameLine() or force a new line when in an horizontal-layout context.
|
||||||
@ -384,7 +387,7 @@ namespace ImGui
|
|||||||
|
|
||||||
// Widgets: Text
|
// Widgets: Text
|
||||||
IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text.
|
IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text.
|
||||||
IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text
|
IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // formatted text
|
||||||
IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1);
|
IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1);
|
||||||
IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor();
|
IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor();
|
||||||
IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2);
|
IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2);
|
||||||
@ -399,6 +402,7 @@ namespace ImGui
|
|||||||
|
|
||||||
// Widgets: Main
|
// Widgets: Main
|
||||||
// - Most widgets return true when the value has been changed or when pressed/selected
|
// - Most widgets return true when the value has been changed or when pressed/selected
|
||||||
|
// - You may also use one of the many IsItemXXX functions (e.g. IsItemActive, IsItemHovered, etc.) to query widget state.
|
||||||
IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button
|
IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button
|
||||||
IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text
|
IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text
|
||||||
IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, frequently useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.)
|
IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, frequently useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.)
|
||||||
@ -413,7 +417,7 @@ namespace ImGui
|
|||||||
IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses
|
IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses
|
||||||
|
|
||||||
// Widgets: Combo Box
|
// Widgets: Combo Box
|
||||||
// - The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it, by creating e.g. Selectable() items.
|
// - The BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it, by creating e.g. Selectable() items.
|
||||||
// - The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose.
|
// - The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose.
|
||||||
IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0);
|
IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0);
|
||||||
IMGUI_API void EndCombo(); // only call EndCombo() if BeginCombo() returns true!
|
IMGUI_API void EndCombo(); // only call EndCombo() if BeginCombo() returns true!
|
||||||
@ -509,7 +513,7 @@ namespace ImGui
|
|||||||
|
|
||||||
// Widgets: Selectables
|
// Widgets: Selectables
|
||||||
// - A selectable highlights when hovered, and can display another color when selected.
|
// - A selectable highlights when hovered, and can display another color when selected.
|
||||||
// - Neighbors selectable extend their highlight bounds in order to leave no gap between them.
|
// - Neighbors selectable extend their highlight bounds in order to leave no gap between them. This is so a series of selected Selectable appear contiguous.
|
||||||
IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // "bool selected" carry the selection state (read-only). Selectable() is clicked is returns true so you can modify your selection state. size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height
|
IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // "bool selected" carry the selection state (read-only). Selectable() is clicked is returns true so you can modify your selection state. size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height
|
||||||
IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // "bool* p_selected" point to the selection state (read-write), as a convenient helper.
|
IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // "bool* p_selected" point to the selection state (read-write), as a convenient helper.
|
||||||
|
|
||||||
@ -535,16 +539,19 @@ namespace ImGui
|
|||||||
IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL);
|
IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL);
|
||||||
|
|
||||||
// Widgets: Menus
|
// Widgets: Menus
|
||||||
IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar.
|
// - Use BeginMenuBar() on a window ImGuiWindowFlags_MenuBar to append to its menu bar.
|
||||||
IMGUI_API void EndMainMenuBar(); // only call EndMainMenuBar() if BeginMainMenuBar() returns true!
|
// - Use BeginMainMenuBar() to create a menu bar at the top of the screen.
|
||||||
IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window).
|
IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window).
|
||||||
IMGUI_API void EndMenuBar(); // only call EndMenuBar() if BeginMenuBar() returns true!
|
IMGUI_API void EndMenuBar(); // only call EndMenuBar() if BeginMenuBar() returns true!
|
||||||
|
IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar.
|
||||||
|
IMGUI_API void EndMainMenuBar(); // only call EndMainMenuBar() if BeginMainMenuBar() returns true!
|
||||||
IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true!
|
IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true!
|
||||||
IMGUI_API void EndMenu(); // only call EndMenu() if BeginMenu() returns true!
|
IMGUI_API void EndMenu(); // only call EndMenu() if BeginMenu() returns true!
|
||||||
IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment
|
IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment
|
||||||
IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL
|
IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL
|
||||||
|
|
||||||
// Tooltips
|
// Tooltips
|
||||||
|
// - Tooltip are windows following the mouse which do not take focus away.
|
||||||
IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of items).
|
IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of items).
|
||||||
IMGUI_API void EndTooltip();
|
IMGUI_API void EndTooltip();
|
||||||
IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set a text-only tooltip, typically use with ImGui::IsItemHovered(). override any previous call to SetTooltip().
|
IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set a text-only tooltip, typically use with ImGui::IsItemHovered(). override any previous call to SetTooltip().
|
||||||
@ -556,7 +563,7 @@ namespace ImGui
|
|||||||
// - Unless modal, they can be closed by clicking anywhere outside them, or by pressing ESCAPE.
|
// - Unless modal, they can be closed by clicking anywhere outside them, or by pressing ESCAPE.
|
||||||
// - Their visibility state (~bool) is held internally by imgui instead of being held by the programmer as we are used to with regular Begin() calls.
|
// - Their visibility state (~bool) is held internally by imgui instead of being held by the programmer as we are used to with regular Begin() calls.
|
||||||
// User can manipulate the visibility state by calling OpenPopup().
|
// User can manipulate the visibility state by calling OpenPopup().
|
||||||
// (*) One can use IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup) to bypass it and detect hovering even when normally blocked by a popup.
|
// (*) You can use IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup) to bypass it and detect hovering even when normally blocked by a popup.
|
||||||
// Those three properties are connected. The library needs to hold their visibility state because it can close popups at any time.
|
// Those three properties are connected. The library needs to hold their visibility state because it can close popups at any time.
|
||||||
IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level).
|
IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level).
|
||||||
IMGUI_API bool BeginPopup(const char* str_id, ImGuiWindowFlags flags = 0); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returns true!
|
IMGUI_API bool BeginPopup(const char* str_id, ImGuiWindowFlags flags = 0); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returns true!
|
||||||
@ -572,6 +579,7 @@ namespace ImGui
|
|||||||
// Columns
|
// Columns
|
||||||
// - You can also use SameLine(pos_x) to mimic simplified columns.
|
// - You can also use SameLine(pos_x) to mimic simplified columns.
|
||||||
// - The columns API is work-in-progress and rather lacking (columns are arguably the worst part of dear imgui at the moment!)
|
// - The columns API is work-in-progress and rather lacking (columns are arguably the worst part of dear imgui at the moment!)
|
||||||
|
// - By end of the 2019 we will expose a new 'Table' api which will replace columns.
|
||||||
IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true);
|
IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true);
|
||||||
IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished
|
IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished
|
||||||
IMGUI_API int GetColumnIndex(); // get current column index
|
IMGUI_API int GetColumnIndex(); // get current column index
|
||||||
@ -582,7 +590,6 @@ namespace ImGui
|
|||||||
IMGUI_API int GetColumnsCount();
|
IMGUI_API int GetColumnsCount();
|
||||||
|
|
||||||
// Tab Bars, Tabs
|
// Tab Bars, Tabs
|
||||||
// [BETA API] API may evolve!
|
|
||||||
IMGUI_API bool BeginTabBar(const char* str_id, ImGuiTabBarFlags flags = 0); // create and append into a TabBar
|
IMGUI_API bool BeginTabBar(const char* str_id, ImGuiTabBarFlags flags = 0); // create and append into a TabBar
|
||||||
IMGUI_API void EndTabBar(); // only call EndTabBar() if BeginTabBar() returns true!
|
IMGUI_API void EndTabBar(); // only call EndTabBar() if BeginTabBar() returns true!
|
||||||
IMGUI_API bool BeginTabItem(const char* label, bool* p_open = NULL, ImGuiTabItemFlags flags = 0);// create a Tab. Returns true if the Tab is selected.
|
IMGUI_API bool BeginTabItem(const char* label, bool* p_open = NULL, ImGuiTabItemFlags flags = 0);// create a Tab. Returns true if the Tab is selected.
|
||||||
|
@ -3263,7 +3263,7 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
|
|||||||
if (ImGui::Button("Revert Ref"))
|
if (ImGui::Button("Revert Ref"))
|
||||||
style = *ref;
|
style = *ref;
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
HelpMarker("Save/Revert in local non-persistent storage. Default Colors definition are not affected. Use \"Export Colors\" below to save them somewhere.");
|
HelpMarker("Save/Revert in local non-persistent storage. Default Colors definition are not affected. Use \"Export\" below to save them somewhere.");
|
||||||
|
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
|
|
||||||
@ -3311,7 +3311,7 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
|
|||||||
{
|
{
|
||||||
static int output_dest = 0;
|
static int output_dest = 0;
|
||||||
static bool output_only_modified = true;
|
static bool output_only_modified = true;
|
||||||
if (ImGui::Button("Export Unsaved"))
|
if (ImGui::Button("Export"))
|
||||||
{
|
{
|
||||||
if (output_dest == 0)
|
if (output_dest == 0)
|
||||||
ImGui::LogToClipboard();
|
ImGui::LogToClipboard();
|
||||||
|
@ -5943,10 +5943,10 @@ void ImGui::Value(const char* prefix, float v, const char* float_format)
|
|||||||
// [SECTION] MenuItem, BeginMenu, EndMenu, etc.
|
// [SECTION] MenuItem, BeginMenu, EndMenu, etc.
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
// - ImGuiMenuColumns [Internal]
|
// - ImGuiMenuColumns [Internal]
|
||||||
// - BeginMainMenuBar()
|
|
||||||
// - EndMainMenuBar()
|
|
||||||
// - BeginMenuBar()
|
// - BeginMenuBar()
|
||||||
// - EndMenuBar()
|
// - EndMenuBar()
|
||||||
|
// - BeginMainMenuBar()
|
||||||
|
// - EndMainMenuBar()
|
||||||
// - BeginMenu()
|
// - BeginMenu()
|
||||||
// - EndMenu()
|
// - EndMenu()
|
||||||
// - MenuItem()
|
// - MenuItem()
|
||||||
@ -5994,40 +5994,6 @@ float ImGuiMenuColumns::CalcExtraSpace(float avail_w)
|
|||||||
return ImMax(0.0f, avail_w - Width);
|
return ImMax(0.0f, avail_w - Width);
|
||||||
}
|
}
|
||||||
|
|
||||||
// For the main menu bar, which cannot be moved, we honor g.Style.DisplaySafeAreaPadding to ensure text can be visible on a TV set.
|
|
||||||
bool ImGui::BeginMainMenuBar()
|
|
||||||
{
|
|
||||||
ImGuiContext& g = *GImGui;
|
|
||||||
g.NextWindowData.MenuBarOffsetMinVal = ImVec2(g.Style.DisplaySafeAreaPadding.x, ImMax(g.Style.DisplaySafeAreaPadding.y - g.Style.FramePadding.y, 0.0f));
|
|
||||||
SetNextWindowPos(ImVec2(0.0f, 0.0f));
|
|
||||||
SetNextWindowSize(ImVec2(g.IO.DisplaySize.x, g.NextWindowData.MenuBarOffsetMinVal.y + g.FontBaseSize + g.Style.FramePadding.y));
|
|
||||||
PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
|
|
||||||
PushStyleVar(ImGuiStyleVar_WindowMinSize, ImVec2(0,0));
|
|
||||||
ImGuiWindowFlags window_flags = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_MenuBar;
|
|
||||||
bool is_open = Begin("##MainMenuBar", NULL, window_flags) && BeginMenuBar();
|
|
||||||
PopStyleVar(2);
|
|
||||||
g.NextWindowData.MenuBarOffsetMinVal = ImVec2(0.0f, 0.0f);
|
|
||||||
if (!is_open)
|
|
||||||
{
|
|
||||||
End();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true; //-V1020
|
|
||||||
}
|
|
||||||
|
|
||||||
void ImGui::EndMainMenuBar()
|
|
||||||
{
|
|
||||||
EndMenuBar();
|
|
||||||
|
|
||||||
// When the user has left the menu layer (typically: closed menus through activation of an item), we restore focus to the previous window
|
|
||||||
// FIXME: With this strategy we won't be able to restore a NULL focus.
|
|
||||||
ImGuiContext& g = *GImGui;
|
|
||||||
if (g.CurrentWindow == g.NavWindow && g.NavLayer == 0 && !g.NavAnyRequest)
|
|
||||||
FocusTopMostWindowUnderOne(g.NavWindow, NULL);
|
|
||||||
|
|
||||||
End();
|
|
||||||
}
|
|
||||||
|
|
||||||
// FIXME: Provided a rectangle perhaps e.g. a BeginMenuBarEx() could be used anywhere..
|
// FIXME: Provided a rectangle perhaps e.g. a BeginMenuBarEx() could be used anywhere..
|
||||||
// Currently the main responsibility of this function being to setup clip-rect + horizontal layout + menu navigation layer.
|
// Currently the main responsibility of this function being to setup clip-rect + horizontal layout + menu navigation layer.
|
||||||
// Ideally we also want this to be responsible for claiming space out of the main window scrolling rectangle, in which case ImGuiWindowFlags_MenuBar will become unnecessary.
|
// Ideally we also want this to be responsible for claiming space out of the main window scrolling rectangle, in which case ImGuiWindowFlags_MenuBar will become unnecessary.
|
||||||
@ -6101,6 +6067,40 @@ void ImGui::EndMenuBar()
|
|||||||
window->DC.MenuBarAppending = false;
|
window->DC.MenuBarAppending = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// For the main menu bar, which cannot be moved, we honor g.Style.DisplaySafeAreaPadding to ensure text can be visible on a TV set.
|
||||||
|
bool ImGui::BeginMainMenuBar()
|
||||||
|
{
|
||||||
|
ImGuiContext& g = *GImGui;
|
||||||
|
g.NextWindowData.MenuBarOffsetMinVal = ImVec2(g.Style.DisplaySafeAreaPadding.x, ImMax(g.Style.DisplaySafeAreaPadding.y - g.Style.FramePadding.y, 0.0f));
|
||||||
|
SetNextWindowPos(ImVec2(0.0f, 0.0f));
|
||||||
|
SetNextWindowSize(ImVec2(g.IO.DisplaySize.x, g.NextWindowData.MenuBarOffsetMinVal.y + g.FontBaseSize + g.Style.FramePadding.y));
|
||||||
|
PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
|
||||||
|
PushStyleVar(ImGuiStyleVar_WindowMinSize, ImVec2(0, 0));
|
||||||
|
ImGuiWindowFlags window_flags = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_MenuBar;
|
||||||
|
bool is_open = Begin("##MainMenuBar", NULL, window_flags) && BeginMenuBar();
|
||||||
|
PopStyleVar(2);
|
||||||
|
g.NextWindowData.MenuBarOffsetMinVal = ImVec2(0.0f, 0.0f);
|
||||||
|
if (!is_open)
|
||||||
|
{
|
||||||
|
End();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true; //-V1020
|
||||||
|
}
|
||||||
|
|
||||||
|
void ImGui::EndMainMenuBar()
|
||||||
|
{
|
||||||
|
EndMenuBar();
|
||||||
|
|
||||||
|
// When the user has left the menu layer (typically: closed menus through activation of an item), we restore focus to the previous window
|
||||||
|
// FIXME: With this strategy we won't be able to restore a NULL focus.
|
||||||
|
ImGuiContext& g = *GImGui;
|
||||||
|
if (g.CurrentWindow == g.NavWindow && g.NavLayer == 0 && !g.NavAnyRequest)
|
||||||
|
FocusTopMostWindowUnderOne(g.NavWindow, NULL);
|
||||||
|
|
||||||
|
End();
|
||||||
|
}
|
||||||
|
|
||||||
bool ImGui::BeginMenu(const char* label, bool enabled)
|
bool ImGui::BeginMenu(const char* label, bool enabled)
|
||||||
{
|
{
|
||||||
ImGuiWindow* window = GetCurrentWindow();
|
ImGuiWindow* window = GetCurrentWindow();
|
||||||
|
Loading…
Reference in New Issue
Block a user