Browse Source

Refactor: Tweaked and improved the sectioning to facilitate grepping/moving around and applied to all files. (#2036)

pull/2038/head
omar 6 years ago
parent
commit
e58bc3d5b7
  1. 1
      docs/CHANGELOG.txt
  2. 100
      imgui.cpp
  3. 55
      imgui_demo.cpp
  4. 64
      imgui_draw.cpp
  5. 95
      imgui_widgets.cpp

1
docs/CHANGELOG.txt

@ -38,6 +38,7 @@ Breaking Changes:
Other Changes: Other Changes:
- Clarified and improved the source code sectioning in all files (easier to search or browse sections).
- Nav: Removed the [Beta] tag from various descriptions of the gamepad/keyboard navigation system. - Nav: Removed the [Beta] tag from various descriptions of the gamepad/keyboard navigation system.
Although it is not perfect and will keep being improved, it is fairly functional and used by many. (#787) Although it is not perfect and will keep being improved, it is fairly functional and used by many. (#787)
- Fixed a build issue with non-Cygwin GCC under Windows. - Fixed a build issue with non-Cygwin GCC under Windows.

100
imgui.cpp

@ -22,12 +22,15 @@
Index of this file: Index of this file:
DOCUMENTATION DOCUMENTATION
- MISSION STATEMENT - MISSION STATEMENT
- END-USER GUIDE - END-USER GUIDE
- PROGRAMMER GUIDE (read me!) - PROGRAMMER GUIDE (read me!)
- Read first - Read first
- How to update to a newer version of Dear ImGui - How to update to a newer version of Dear ImGui
- Getting started with integrating Dear ImGui in your code/engine - Getting started with integrating Dear ImGui in your code/engine
- This is how a simple application may look like (2 variations)
- This is how a simple rendering function may look like
- Using gamepad/keyboard navigation controls - Using gamepad/keyboard navigation controls
- API BREAKING CHANGES (read me when you update!) - API BREAKING CHANGES (read me when you update!)
- FREQUENTLY ASKED QUESTIONS (FAQ), TIPS - FREQUENTLY ASKED QUESTIONS (FAQ), TIPS
@ -44,31 +47,35 @@ DOCUMENTATION
- I integrated Dear ImGui in my engine and some elements are clipping or disappearing when I move windows around.. - I integrated Dear ImGui in my engine and some elements are clipping or disappearing when I move windows around..
- How can I help? - How can I help?
CODE CODE
- Forward Declarations (search for "[SECTION]" in the code to find them)
- Context and Memory Allocators
- User facing structures (ImGuiStyle, ImGuiIO) // [SECTION] FORWARD DECLARATIONS
- Helper/Utilities (ImXXX functions, Color functions) // [SECTION] CONTEXT AND MEMORY ALLOCATORS
- ImGuiStorage // [SECTION] MAIN USER FACING STRUCTURES (ImGuiStyle, ImGuiIO)
- ImGuiTextFilter // [SECTION] MISC HELPER/UTILITIES (Maths, String, Format, Hash, File functions)
- ImGuiTextBuffer // [SECTION] MISC HELPER/UTILITIES (ImText* functions)
- ImGuiListClipper // [SECTION] MISC HELPER/UTILITIES (Color functions)
- Render Helpers // [SECTION] ImGuiStorage
- Main Code (most of the code! lots of stuff, needs tidying up) // [SECTION] ImGuiTextFilter
- Tooltips // [SECTION] ImGuiTextBuffer
- Popups // [SECTION] ImGuiListClipper
- Navigation // [SECTION] RENDER HELPERS
- Columns // [SECTION] MAIN CODE (most of the code! lots of stuff, needs tidying up!)
- Drag and Drop // [SECTION] TOOLTIPS
- Logging // [SECTION] POPUPS
- Settings // [SECTION] KEYBOARD/GAMEPAD NAVIGATION
- Platform Dependent Helpers // [SECTION] COLUMNS
- Metrics/Debug window // [SECTION] DRAG AND DROP
// [SECTION] LOGGING/CAPTURING
// [SECTION] SETTINGS
// [SECTION] PLATFORM DEPENDENT HELPERS
// [SECTION] METRICS/DEBUG WINDOW
*/ */
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Documentation // DOCUMENTATION
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
/* /*
@ -883,7 +890,7 @@ static const float NAV_WINDOWING_HIGHLIGHT_DELAY = 0.20f; // Time before the h
static const float NAV_WINDOWING_LIST_APPEAR_DELAY = 0.15f; // Time before the window list starts to appear static const float NAV_WINDOWING_LIST_APPEAR_DELAY = 0.15f; // Time before the window list starts to appear
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// Forward Declarations // [SECTION] FORWARD DECLARATIONS
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
static void SetCurrentWindow(ImGuiWindow* window); static void SetCurrentWindow(ImGuiWindow* window);
@ -934,7 +941,7 @@ static void UpdateManualResize(ImGuiWindow* window, const ImVec2& si
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Context and Memory Allocators // [SECTION] CONTEXT AND MEMORY ALLOCATORS
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Current context pointer. Implicitly used by all ImGui functions. Always assumed to be != NULL. // Current context pointer. Implicitly used by all ImGui functions. Always assumed to be != NULL.
@ -963,7 +970,7 @@ static void (*GImAllocatorFreeFunc)(void* ptr, void* user_data) = FreeWrapper;
static void* GImAllocatorUserData = NULL; static void* GImAllocatorUserData = NULL;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// User facing main structures // [SECTION] MAIN USER FACING STRUCTURES (ImGuiStyle, ImGuiIO)
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
ImGuiStyle::ImGuiStyle() ImGuiStyle::ImGuiStyle()
@ -1108,7 +1115,7 @@ void ImGuiIO::AddInputCharactersUTF8(const char* utf8_chars)
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// HELPERS/UTILITIES // [SECTION] MISC HELPER/UTILITIES (Maths, String, Format, Hash, File functions)
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
ImVec2 ImLineClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& p) ImVec2 ImLineClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& p)
@ -1385,7 +1392,7 @@ void* ImFileLoadToMemory(const char* filename, const char* file_open_mode, size_
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// HELPERS/UTILITIES (ImText* helpers) // [SECTION] MISC HELPERS/UTILITIES (ImText* functions)
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Convert UTF-8 to 32-bits character, process single character input. // Convert UTF-8 to 32-bits character, process single character input.
@ -1568,7 +1575,8 @@ int ImTextCountUtf8BytesFromStr(const ImWchar* in_text, const ImWchar* in_text_e
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// COLOR FUNCTIONS // [SECTION] MISC HELPER/UTILTIES (Color functions)
// Note: The Convert functions are early design which are not consistent with other API.
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
ImVec4 ImGui::ColorConvertU32ToFloat4(ImU32 in) ImVec4 ImGui::ColorConvertU32ToFloat4(ImU32 in)
@ -1675,7 +1683,7 @@ ImU32 ImGui::GetColorU32(ImU32 col)
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// ImGuiStorage // [SECTION] ImGuiStorage
// Helper: Key->value storage // Helper: Key->value storage
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -1824,7 +1832,7 @@ void ImGuiStorage::SetAllInt(int v)
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// ImGuiTextFilter // [SECTION] ImGuiTextFilter
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]" // Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]"
@ -1928,7 +1936,7 @@ bool ImGuiTextFilter::PassFilter(const char* text, const char* text_end) const
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// ImGuiTextBuffer // [SECTION] ImGuiTextBuffer
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// On some platform vsnprintf() takes va_list by reference and modifies it. // On some platform vsnprintf() takes va_list by reference and modifies it.
@ -1976,7 +1984,8 @@ void ImGuiTextBuffer::appendf(const char* fmt, ...)
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// ImGuiListClipper // [SECTION] ImGuiListClipper
// This is currently not as flexible/powerful as it should be, needs some rework (see TODO)
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
static void SetCursorPosYAndSetupDummyPrevLine(float pos_y, float line_height) static void SetCursorPosYAndSetupDummyPrevLine(float pos_y, float line_height)
@ -2060,8 +2069,8 @@ bool ImGuiListClipper::Step()
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// RENDER HELPERS // [SECTION] RENDER HELPERS
// Those [Internal] functions are a terrible mess - their signature and behavior will change. // Those (internal) functions are currently quite a legacy mess - their signature and behavior will change.
// Also see imgui_draw.cpp for some more which have been reworked to not rely on ImGui:: state. // Also see imgui_draw.cpp for some more which have been reworked to not rely on ImGui:: state.
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -2280,8 +2289,7 @@ void ImGui::RenderNavHighlight(const ImRect& bb, ImGuiID id, ImGuiNavHighlightFl
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// MAIN CODE // [SECTION] MAIN CODE (most of the code! lots of stuff, needs tidying up!)
// (this category is still too large and badly ordered, needs some tidying up)
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// ImGuiWindow is mostly a dumb struct. It merely has a constructor and a few helper methods // ImGuiWindow is mostly a dumb struct. It merely has a constructor and a few helper methods
@ -2731,8 +2739,6 @@ float ImGui::CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x)
return ImMax(wrap_pos_x - pos.x, 1.0f); return ImMax(wrap_pos_x - pos.x, 1.0f);
} }
//-----------------------------------------------------------------------------
void* ImGui::MemAlloc(size_t size) void* ImGui::MemAlloc(size_t size)
{ {
if (ImGuiContext* ctx = GImGui) if (ImGuiContext* ctx = GImGui)
@ -6076,7 +6082,6 @@ ImGuiID ImGui::GetID(const void* ptr_id)
return GImGui->CurrentWindow->GetID(ptr_id); return GImGui->CurrentWindow->GetID(ptr_id);
} }
bool ImGui::IsRectVisible(const ImVec2& size) bool ImGui::IsRectVisible(const ImVec2& size)
{ {
ImGuiWindow* window = GetCurrentWindowRead(); ImGuiWindow* window = GetCurrentWindowRead();
@ -6200,7 +6205,7 @@ void ImGui::Unindent(float indent_w)
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// TOOLTIPS // [SECTION] TOOLTIPS
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void ImGui::BeginTooltip() void ImGui::BeginTooltip()
@ -6269,7 +6274,7 @@ void ImGui::SetTooltip(const char* fmt, ...)
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// POPUPS // [SECTION] POPUPS
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
bool ImGui::IsPopupOpen(ImGuiID id) bool ImGui::IsPopupOpen(ImGuiID id)
@ -6636,7 +6641,7 @@ ImVec2 ImGui::FindBestWindowPosForPopup(ImGuiWindow* window)
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// NAVIGATION // [SECTION] KEYBOARD/GAMEPAD NAVIGATION
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
ImGuiDir ImGetDirQuadrantFromDelta(float dx, float dy) ImGuiDir ImGetDirQuadrantFromDelta(float dx, float dy)
@ -7631,7 +7636,8 @@ void ImGui::NavUpdateWindowingList()
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// COLUMNS // [SECTION] COLUMNS
// In the current version, Columns are very weak. Needs to be replaced with a more full-featured system.
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void ImGui::NextColumn() void ImGui::NextColumn()
@ -7953,7 +7959,7 @@ void ImGui::Columns(int columns_count, const char* id, bool border)
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// DRAG AND DROP // [SECTION] DRAG AND DROP
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void ImGui::ClearDragDrop() void ImGui::ClearDragDrop()
@ -8240,7 +8246,7 @@ void ImGui::EndDragDropTarget()
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// LOGGING // [SECTION] LOGGING/CAPTURING
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Pass text data straight to log (without being displayed) // Pass text data straight to log (without being displayed)
@ -8420,7 +8426,7 @@ void ImGui::LogButtons()
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// SETTINGS // [SECTION] SETTINGS
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void ImGui::MarkIniSettingsDirty() void ImGui::MarkIniSettingsDirty()
@ -8632,7 +8638,7 @@ static void SettingsHandlerWindow_WriteAll(ImGuiContext* imgui_ctx, ImGuiSetting
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// PLATFORM DEPENDENT HELPERS // [SECTION] PLATFORM DEPENDENT HELPERS
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
#if defined(_WIN32) && !defined(_WINDOWS_) && (!defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS) || !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS)) #if defined(_WIN32) && !defined(_WINDOWS_) && (!defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS) || !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS))
@ -8748,7 +8754,7 @@ static void ImeSetInputScreenPosFn_DefaultImpl(int, int) {}
#endif #endif
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// METRICS/DEBUG WINDOW // [SECTION] METRICS/DEBUG WINDOW
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void ImGui::ShowMetricsWindow(bool* p_open) void ImGui::ShowMetricsWindow(bool* p_open)

55
imgui_demo.cpp

@ -18,6 +18,27 @@
// It also happens to be a convenient way of storing simple UI related information as long as your function doesn't need to be reentrant or used in threads. // It also happens to be a convenient way of storing simple UI related information as long as your function doesn't need to be reentrant or used in threads.
// This might be a pattern you occasionally want to use in your code, but most of the real data you would be editing is likely to be stored outside your functions. // This might be a pattern you occasionally want to use in your code, but most of the real data you would be editing is likely to be stored outside your functions.
/*
Index of this file:
// [SECTION] Forward Declarations, Helpers
// [SECTION] Demo Window / ShowDemoWindow()
// [SECTION] Style Editor / ShowStyleEditor()
// [SECTION] Example App: Main Menu Bar / ShowExampleAppMainMenuBar()
// [SECTION] Example App: Debug Console / ShowExampleAppConsole()
// [SECTION] Example App: Debug Log / ShowExampleAppLog()
// [SECTION] Example App: Simple Layout / ShowExampleAppLayout()
// [SECTION] Example App: Property Editor / ShowExampleAppPropertyEditor()
// [SECTION] Example App: Long Text / ShowExampleAppLongText()
// [SECTION] Example App: Auto Resize / ShowExampleAppAutoResize()
// [SECTION] Example App: Constrained Resize / ShowExampleAppConstrainedResize()
// [SECTION] Example App: Simple Overlay / ShowExampleAppSimpleOverlay()
// [SECTION] Example App: Manipulating Window Titles / ShowExampleAppWindowTitles()
// [SECTION] Example App: Custom Rendering using ImDrawList API / ShowExampleAppCustomRendering()
*/
#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) #if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
#define _CRT_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS
#endif #endif
@ -67,7 +88,7 @@
#define IM_MAX(_A,_B) (((_A) >= (_B)) ? (_A) : (_B)) #define IM_MAX(_A,_B) (((_A) >= (_B)) ? (_A) : (_B))
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// DEMO CODE // [SECTION] Forward Declarations, Helpers
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
#if !defined(IMGUI_DISABLE_OBSOLETE_FUNCTIONS) && defined(IMGUI_DISABLE_TEST_WINDOWS) && !defined(IMGUI_DISABLE_DEMO_WINDOWS) // Obsolete name since 1.53, TEST->DEMO #if !defined(IMGUI_DISABLE_OBSOLETE_FUNCTIONS) && defined(IMGUI_DISABLE_TEST_WINDOWS) && !defined(IMGUI_DISABLE_DEMO_WINDOWS) // Obsolete name since 1.53, TEST->DEMO
@ -127,6 +148,10 @@ void ImGui::ShowUserGuide()
ImGui::Unindent(); ImGui::Unindent();
} }
//-----------------------------------------------------------------------------
// [SECTION] Demo Window / ShowDemoWindow()
//-----------------------------------------------------------------------------
// Demonstrate most Dear ImGui features (this is big function!) // Demonstrate most Dear ImGui features (this is big function!)
// You may execute this function to experiment with the UI and understand what it does. You may then search for keywords in the code when you are interested by a specific feature. // You may execute this function to experiment with the UI and understand what it does. You may then search for keywords in the code when you are interested by a specific feature.
void ImGui::ShowDemoWindow(bool* p_open) void ImGui::ShowDemoWindow(bool* p_open)
@ -2363,6 +2388,10 @@ void ImGui::ShowDemoWindow(bool* p_open)
ImGui::End(); ImGui::End();
} }
//-----------------------------------------------------------------------------
// [SECTION] Style Editor / ShowStyleEditor()
//-----------------------------------------------------------------------------
// Demo helper function to select among default colors. See ShowStyleEditor() for more advanced options. // 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. // 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) bool ImGui::ShowStyleSelector(const char* label)
@ -2626,7 +2655,7 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// EXAMPLE APP CODE: MAIN MENU BAR // [SECTION] Example App: Main Menu Bar / ShowExampleAppMainMenuBar()
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Demonstrate creating a fullscreen menu bar and populating it. // Demonstrate creating a fullscreen menu bar and populating it.
@ -2719,10 +2748,10 @@ static void ShowExampleMenuFile()
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// EXAMPLE APP CODE: CONSOLE // [SECTION] Example App: Debug Console / ShowExampleAppConsole()
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Demonstrating creating a simple console window, with scrolling, filtering, completion and history. // Demonstrate creating a simple console window, with scrolling, filtering, completion and history.
// For the console example, here we are using a more C++ like approach of declaring a class to hold the data and the functions. // For the console example, here we are using a more C++ like approach of declaring a class to hold the data and the functions.
struct ExampleAppConsole struct ExampleAppConsole
{ {
@ -3032,7 +3061,7 @@ static void ShowExampleAppConsole(bool* p_open)
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// EXAMPLE APP CODE: LOG // [SECTION] Example App: Debug Log / ShowExampleAppLog()
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Usage: // Usage:
@ -3122,7 +3151,7 @@ static void ShowExampleAppLog(bool* p_open)
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// EXAMPLE APP CODE: SIMPLE LAYOUT // [SECTION] Example App: Simple Layout / ShowExampleAppLayout()
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Demonstrate create a window with multiple child windows. // Demonstrate create a window with multiple child windows.
@ -3170,7 +3199,7 @@ static void ShowExampleAppLayout(bool* p_open)
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// EXAMPLE APP CODE: PROPERTY EDITOR // [SECTION] Example App: Property Editor / ShowExampleAppPropertyEditor()
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Demonstrate create a simple property editor. // Demonstrate create a simple property editor.
@ -3243,7 +3272,7 @@ static void ShowExampleAppPropertyEditor(bool* p_open)
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// EXAMPLE APP CODE: LONG TEXT // [SECTION] Example App: Long Text / ShowExampleAppLongText()
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Demonstrate/test rendering huge amount of text, and the incidence of clipping. // Demonstrate/test rendering huge amount of text, and the incidence of clipping.
@ -3301,7 +3330,7 @@ static void ShowExampleAppLongText(bool* p_open)
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// EXAMPLE APP CODE: AUTO RESIZE // [SECTION] Example App: Auto Resize / ShowExampleAppAutoResize()
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Demonstrate creating a window which gets auto-resized according to its content. // Demonstrate creating a window which gets auto-resized according to its content.
@ -3322,7 +3351,7 @@ static void ShowExampleAppAutoResize(bool* p_open)
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// EXAMPLE APP CODE: CONSTRAINED RESIZE // [SECTION] Example App: Constrained Resize / ShowExampleAppConstrainedResize()
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Demonstrate creating a window with custom resize constraints. // Demonstrate creating a window with custom resize constraints.
@ -3373,7 +3402,7 @@ static void ShowExampleAppConstrainedResize(bool* p_open)
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// EXAMPLE APP CODE: SIMPLE OVERLAY // [SECTION] Example App: Simple Overlay / ShowExampleAppSimpleOverlay()
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Demonstrate creating a simple static window with no decoration + a context-menu to choose which corner of the screen to use. // Demonstrate creating a simple static window with no decoration + a context-menu to choose which corner of the screen to use.
@ -3409,7 +3438,7 @@ static void ShowExampleAppSimpleOverlay(bool* p_open)
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// EXAMPLE APP CODE: WINDOW TITLES // [SECTION] Example App: Manipulating Window Titles / ShowExampleAppWindowTitles()
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Demonstrate using "##" and "###" in identifiers to manipulate ID generation. // Demonstrate using "##" and "###" in identifiers to manipulate ID generation.
@ -3440,7 +3469,7 @@ static void ShowExampleAppWindowTitles(bool*)
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// EXAMPLE APP CODE: CUSTOM RENDERING // [SECTION] Example App: Custom Rendering using ImDrawList API / ShowExampleAppCustomRendering()
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Demonstrate using the low-level ImDrawList to draw custom shapes. // Demonstrate using the low-level ImDrawList to draw custom shapes.

64
imgui_draw.cpp

@ -4,16 +4,19 @@
/* /*
Index of this file: Index of this file:
- Cruft for stb_truetype/stb_rectpack implementation
- Style functions (default style) // [SECTION] STB libraries implementation
- ImDrawList // [SECTION] Style functions
- ImDrawData // [SECTION] ImDrawList
- ShadeVertsXXX helpers functions // [SECTION] ImDrawData
- ImFontConfig // [SECTION] Helpers ShadeVertsXXX functions
- ImFontAtlas // [SECTION] ImFontConfig
- ImFont // [SECTION] ImFontAtlas
- Internal Render Helpers // [SECTION] ImFontAtlas glyph ranges helpers + GlyphRangesBuilder
- Default font data // [SECTION] ImFont
// [SECTION] Internal Render Helpers
// [SECTION] Decompression code
// [SECTION] Default font data (ProggyClean.ttf)
*/ */
@ -72,7 +75,7 @@ Index of this file:
#endif #endif
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// STB libraries implementation // [SECTION] STB libraries implementation
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// Compile time options: // Compile time options:
@ -161,7 +164,7 @@ using namespace IMGUI_STB_NAMESPACE;
#endif #endif
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Style functions // [SECTION] Style functions
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void ImGui::StyleColorsDark(ImGuiStyle* dst) void ImGui::StyleColorsDark(ImGuiStyle* dst)
@ -316,7 +319,7 @@ void ImGui::StyleColorsLight(ImGuiStyle* dst)
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// ImDrawListData // ImDrawList
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
ImDrawListSharedData::ImDrawListSharedData() ImDrawListSharedData::ImDrawListSharedData()
@ -334,10 +337,6 @@ ImDrawListSharedData::ImDrawListSharedData()
} }
} }
//-----------------------------------------------------------------------------
// ImDrawList
//-----------------------------------------------------------------------------
void ImDrawList::Clear() void ImDrawList::Clear()
{ {
CmdBuffer.resize(0); CmdBuffer.resize(0);
@ -1227,7 +1226,7 @@ void ImDrawList::AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, c
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// ImDrawData // [SECTION] ImDrawData
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// For backward compatibility: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! // For backward compatibility: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering!
@ -1264,7 +1263,7 @@ void ImDrawData::ScaleClipRects(const ImVec2& scale)
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Shade functions // [SECTION] Helpers ShadeVertsXXX functions
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Generic linear color gradient, write to RGB fields, leave A untouched. // Generic linear color gradient, write to RGB fields, leave A untouched.
@ -1311,7 +1310,7 @@ void ImGui::ShadeVertsLinearUV(ImDrawList* draw_list, int vert_start_idx, int ve
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// ImFontConfig // [SECTION] ImFontConfig
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
ImFontConfig::ImFontConfig() ImFontConfig::ImFontConfig()
@ -1337,7 +1336,7 @@ ImFontConfig::ImFontConfig()
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// ImFontAtlas // [SECTION] ImFontAtlas
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// A work of art lies ahead! (. = white layer, X = black layer, others are blank) // A work of art lies ahead! (. = white layer, X = black layer, others are blank)
@ -2074,6 +2073,10 @@ static void UnpackAccumulativeOffsetsIntoRanges(int base_codepoint, const short*
out_ranges[0] = 0; out_ranges[0] = 0;
} }
//-------------------------------------------------------------------------
// [SECTION] ImFontAtlas glyph ranges helpers + GlyphRangesBuilder
//-------------------------------------------------------------------------
const ImWchar* ImFontAtlas::GetGlyphRangesChineseSimplifiedCommon() const ImWchar* ImFontAtlas::GetGlyphRangesChineseSimplifiedCommon()
{ {
// Store 2500 regularly used characters for Simplified Chinese. // Store 2500 regularly used characters for Simplified Chinese.
@ -2223,10 +2226,6 @@ const ImWchar* ImFontAtlas::GetGlyphRangesThai()
return &ranges[0]; return &ranges[0];
} }
//-----------------------------------------------------------------------------
// ImFontAtlas::GlyphRangesBuilder
//-----------------------------------------------------------------------------
void ImFontAtlas::GlyphRangesBuilder::AddText(const char* text, const char* text_end) void ImFontAtlas::GlyphRangesBuilder::AddText(const char* text, const char* text_end)
{ {
while (text_end ? (text < text_end) : *text) while (text_end ? (text < text_end) : *text)
@ -2262,7 +2261,7 @@ void ImFontAtlas::GlyphRangesBuilder::BuildRanges(ImVector<ImWchar>* out_ranges)
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// ImFont // [SECTION] ImFont
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
ImFont::ImFont() ImFont::ImFont()
@ -2813,12 +2812,12 @@ void ImFont::RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Internals Render Helpers // [SECTION] Internal Render Helpers
// (progressively moved from imgui.cpp to here when they are redesigned to stop accessing ImGui global state) // (progressively moved from imgui.cpp to here when they are redesigned to stop accessing ImGui global state)
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// RenderMouseCursor() // - RenderMouseCursor()
// RenderArrowPointingAt() // - RenderArrowPointingAt()
// RenderRectFilledRangeH() // - RenderRectFilledRangeH()
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void ImGui::RenderMouseCursor(ImDrawList* draw_list, ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor) void ImGui::RenderMouseCursor(ImDrawList* draw_list, ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor)
@ -2927,8 +2926,9 @@ void ImGui::RenderRectFilledRangeH(ImDrawList* draw_list, const ImRect& rect, Im
draw_list->PathFillConvex(col); draw_list->PathFillConvex(col);
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// DEFAULT FONT DATA // [SECTION] Decompression code
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Compressed with stb_compress() then converted to a C array and encoded as base85. // Compressed with stb_compress() then converted to a C array and encoded as base85.
// Use the program in misc/fonts/binary_to_compressed_c.cpp to create the array from a TTF file. // Use the program in misc/fonts/binary_to_compressed_c.cpp to create the array from a TTF file.
@ -3047,6 +3047,8 @@ static unsigned int stb_decompress(unsigned char *output, const unsigned char *i
} }
} }
//-----------------------------------------------------------------------------
// [SECTION] Default font data (ProggyClean.ttf)
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// ProggyClean.ttf // ProggyClean.ttf
// Copyright (c) 2004, 2005 Tristan Grimmer // Copyright (c) 2004, 2005 Tristan Grimmer

95
imgui_widgets.cpp

@ -4,22 +4,24 @@
/* /*
Index of this file: Index of this file:
- Widgets: Text, etc.
- Widgets: Button, Image, Checkbox, RadioButton, ProgressBar, Bullet, etc. // [SECTION] Forward Declarations
- Widgets: Low-level Layout helpers: Spacing, Dummy, NewLine, Separator, etc. // [SECTION] Widgets: Text, etc.
- Widgets: ComboBox // [SECTION] Widgets: Main (Button, Image, Checkbox, RadioButton, ProgressBar, Bullet, etc.)
- Data Type and Data Formatting Helpers // [SECTION] Widgets: Low-level Layout helpers (Spacing, Dummy, NewLine, Separator, etc.)
- Widgets: DragScalar, DragFloat, DragInt, etc. // [SECTION] Widgets: ComboBox
- Widgets: SliderScalar, SliderFloat, SliderInt, etc. // [SECTION] Data Type and Data Formatting Helpers
- Widgets: InputScalar, InputFloat, InputInt, etc. // [SECTION] Widgets: DragScalar, DragFloat, DragInt, etc.
- Widgets: InputText, InputTextMultiline // [SECTION] Widgets: SliderScalar, SliderFloat, SliderInt, etc.
- Widgets: ColorEdit, ColorPicker, ColorButton, etc. // [SECTION] Widgets: InputScalar, InputFloat, InputInt, etc.
- Widgets: TreeNode, TreePush, TreePop, etc. // [SECTION] Widgets: InputText, InputTextMultiline
- Widgets: Selectable // [SECTION] Widgets: ColorEdit, ColorPicker, ColorButton, etc.
- Widgets: ListBox // [SECTION] Widgets: TreeNode, CollapsingHeader, etc.
- Widgets: PlotLines, PlotHistogram // [SECTION] Widgets: Selectable
- Widgets: Value // [SECTION] Widgets: ListBox
- Widgets: MenuItem, BeginMenu, EndMenu, etc. // [SECTION] Widgets: PlotLines, PlotHistogram
// [SECTION] Widgets: Value helpers
// [SECTION] Widgets: MenuItem, BeginMenu, EndMenu, etc.
*/ */
@ -81,7 +83,7 @@ static const ImU64 IM_U64_MAX = (2ULL * 9223372036854775807LL + 1);
#endif #endif
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// Forward Declarations // [SECTION] Forward Declarations
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// Data Type helpers // Data Type helpers
@ -95,7 +97,8 @@ static int InputTextCalcTextLenAndLineCount(const char* text_begin,
static ImVec2 InputTextCalcTextSizeW(const ImWchar* text_begin, const ImWchar* text_end, const ImWchar** remaining = NULL, ImVec2* out_offset = NULL, bool stop_on_new_line = false); static ImVec2 InputTextCalcTextSizeW(const ImWchar* text_begin, const ImWchar* text_end, const ImWchar** remaining = NULL, ImVec2* out_offset = NULL, bool stop_on_new_line = false);
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// WIDGETS: Text // [SECTION] Widgets: Text, etc.
//-------------------------------------------------------------------------
// - TextUnformatted() // - TextUnformatted()
// - Text() // - Text()
// - TextV() // - TextV()
@ -350,7 +353,8 @@ void ImGui::BulletTextV(const char* fmt, va_list args)
} }
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// WIDGETS: Main // [SECTION] Widgets: Main
//-------------------------------------------------------------------------
// - ButtonBehavior() [Internal] // - ButtonBehavior() [Internal]
// - Button() // - Button()
// - SmallButton() // - SmallButton()
@ -1053,7 +1057,8 @@ void ImGui::Bullet()
} }
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// WIDGETS: Low-level Layout helpers // [SECTION] Widgets: Low-level Layout helpers
//-------------------------------------------------------------------------
// - Spacing() // - Spacing()
// - Dummy() // - Dummy()
// - NewLine() // - NewLine()
@ -1235,7 +1240,8 @@ bool ImGui::SplitterBehavior(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// WIDGETS: Combo Box // [SECTION] Widgets: Combo Box
//-------------------------------------------------------------------------
// - BeginCombo() // - BeginCombo()
// - EndCombo() // - EndCombo()
// - Combo() // - Combo()
@ -1449,7 +1455,8 @@ bool ImGui::Combo(const char* label, int* current_item, const char* items_separa
} }
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// WIDGETS: Data Type and Data Formatting Helpers [Internal] // [SECTION] Data Type and Data Formatting Helpers [Internal]
//-------------------------------------------------------------------------
// - PatchFormatStringFloatToInt() // - PatchFormatStringFloatToInt()
// - DataTypeFormatString() // - DataTypeFormatString()
// - DataTypeApplyOp() // - DataTypeApplyOp()
@ -1678,7 +1685,8 @@ TYPE ImGui::RoundScalarWithFormatT(const char* format, ImGuiDataType data_type,
} }
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// WIDGETS: Drags // [SECTION] Widgets: DragScalar, DragFloat, DragInt, etc.
//-------------------------------------------------------------------------
// - DragBehaviorT<>() [Internal] // - DragBehaviorT<>() [Internal]
// - DragBehavior() [Internal] // - DragBehavior() [Internal]
// - DragScalar() // - DragScalar()
@ -2015,7 +2023,8 @@ bool ImGui::DragIntRange2(const char* label, int* v_current_min, int* v_current_
} }
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// WIDGETS: Sliders // [SECTION] Widgets: SliderScalar, SliderFloat, SliderInt, etc.
//-------------------------------------------------------------------------
// - SliderBehaviorT<>() [Internal] // - SliderBehaviorT<>() [Internal]
// - SliderBehavior() [Internal] // - SliderBehavior() [Internal]
// - SliderScalar() // - SliderScalar()
@ -2479,11 +2488,12 @@ bool ImGui::VSliderInt(const char* label, const ImVec2& size, int* v, int v_min,
} }
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// WIDGETS: Inputs (_excepted InputText_) // [SECTION] Widgets: InputScalar, InputFloat, InputInt, etc.
// - ImParseFormatFindStart() //-------------------------------------------------------------------------
// - ImParseFormatFindEnd() // - ImParseFormatFindStart() [Internal]
// - ImParseFormatTrimDecorations() // - ImParseFormatFindEnd() [Internal]
// - ImParseFormatPrecision() // - ImParseFormatTrimDecorations() [Internal]
// - ImParseFormatPrecision() [Internal]
// - InputScalarAsWidgetReplacement() [Internal] // - InputScalarAsWidgetReplacement() [Internal]
// - InputScalar() // - InputScalar()
// - InputScalarN() // - InputScalarN()
@ -2776,7 +2786,8 @@ bool ImGui::InputDouble(const char* label, double* v, double step, double step_f
} }
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// WIDGETS: InputText // [SECTION] Widgets: InputText, InputTextMultiline
//-------------------------------------------------------------------------
// - InputText() // - InputText()
// - InputTextMultiline() // - InputTextMultiline()
// - InputTextEx() [Internal] // - InputTextEx() [Internal]
@ -3750,7 +3761,8 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
} }
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// WIDGETS: Color Editor / Picker // [SECTION] Widgets: ColorEdit, ColorPicker, ColorButton, etc.
//-------------------------------------------------------------------------
// - ColorEdit3() // - ColorEdit3()
// - ColorEdit4() // - ColorEdit4()
// - ColorPicker3() // - ColorPicker3()
@ -4550,7 +4562,8 @@ void ImGui::ColorPickerOptionsPopup(const float* ref_col, ImGuiColorEditFlags fl
} }
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// WIDGETS: Trees // [SECTION] Widgets: TreeNode, CollapsingHeader, etc.
//-------------------------------------------------------------------------
// - TreeNode() // - TreeNode()
// - TreeNodeV() // - TreeNodeV()
// - TreeNodeEx() // - TreeNodeEx()
@ -4943,7 +4956,8 @@ bool ImGui::CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags
} }
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// WIDGETS: Selectables // [SECTION] Widgets: Selectable
//-------------------------------------------------------------------------
// - Selectable() // - Selectable()
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
@ -5051,7 +5065,8 @@ bool ImGui::Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags
} }
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// WIDGETS: List Box // [SECTION] Widgets: ListBox
//-------------------------------------------------------------------------
// - ListBox() // - ListBox()
// - ListBoxHeader() // - ListBoxHeader()
// - ListBoxFooter() // - ListBoxFooter()
@ -5160,7 +5175,8 @@ bool ImGui::ListBox(const char* label, int* current_item, bool (*items_getter)(v
} }
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// WIDGETS: Data Plotting // [SECTION] Widgets: PlotLines, PlotHistogram
//-------------------------------------------------------------------------
// - PlotEx() [Internal] // - PlotEx() [Internal]
// - PlotLines() // - PlotLines()
// - PlotHistogram() // - PlotHistogram()
@ -5314,7 +5330,9 @@ void ImGui::PlotHistogram(const char* label, float (*values_getter)(void* data,
} }
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// WIDGETS: Value() helpers // [SECTION] Widgets: Value helpers
// Those is not very useful, legacy API.
//-------------------------------------------------------------------------
// - Value() // - Value()
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
@ -5348,8 +5366,9 @@ void ImGui::Value(const char* prefix, float v, const char* float_format)
} }
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// WIDGETS: Menus // [SECTION] MenuItem, BeginMenu, EndMenu, etc.
// - ImGuiMenuColumns //-------------------------------------------------------------------------
// - ImGuiMenuColumns [Internal]
// - BeginMainMenuBar() // - BeginMainMenuBar()
// - EndMainMenuBar() // - EndMainMenuBar()
// - BeginMenuBar() // - BeginMenuBar()

Loading…
Cancel
Save