mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-03 22:51:06 +01:00 
			
		
		
		
	Merge branch 'master' into docking + remove two _PopUnusedDrawCmd() from docking branch, following 718daa1
				
					
				
			# Conflicts: # backends/imgui_impl_glfw.cpp # backends/imgui_impl_sdl.cpp # backends/imgui_impl_win32.cpp # imgui.cpp # imgui_internal.h
This commit is contained in:
		
							
								
								
									
										176
									
								
								imgui_internal.h
									
									
									
									
									
								
							
							
						
						
									
										176
									
								
								imgui_internal.h
									
									
									
									
									
								
							@@ -18,6 +18,7 @@ Index of this file:
 | 
			
		||||
// [SECTION] Generic helpers
 | 
			
		||||
// [SECTION] ImDrawList support
 | 
			
		||||
// [SECTION] Widgets support: flags, enums, data structures
 | 
			
		||||
// [SECTION] Inputs support
 | 
			
		||||
// [SECTION] Clipper support
 | 
			
		||||
// [SECTION] Navigation support
 | 
			
		||||
// [SECTION] Columns support
 | 
			
		||||
@@ -551,21 +552,19 @@ inline void     ImBitArraySetBitRange(ImU32* arr, int n, int n2) // Works on ran
 | 
			
		||||
 | 
			
		||||
// Helper: ImBitArray class (wrapper over ImBitArray functions)
 | 
			
		||||
// Store 1-bit per value.
 | 
			
		||||
template<int BITCOUNT>
 | 
			
		||||
template<int BITCOUNT, int OFFSET = 0>
 | 
			
		||||
struct IMGUI_API ImBitArray
 | 
			
		||||
{
 | 
			
		||||
    static const int Size = BITCOUNT;
 | 
			
		||||
    ImU32           Storage[(BITCOUNT + 31) >> 5];
 | 
			
		||||
    ImBitArray()                                { ClearAllBits(); }
 | 
			
		||||
    void            ClearAllBits()              { memset(Storage, 0, sizeof(Storage)); }
 | 
			
		||||
    void            SetAllBits()                { memset(Storage, 255, sizeof(Storage)); }
 | 
			
		||||
    bool            TestBit(int n) const        { IM_ASSERT(n < BITCOUNT); return ImBitArrayTestBit(Storage, n); }
 | 
			
		||||
    void            SetBit(int n)               { IM_ASSERT(n < BITCOUNT); ImBitArraySetBit(Storage, n); }
 | 
			
		||||
    void            ClearBit(int n)             { IM_ASSERT(n < BITCOUNT); ImBitArrayClearBit(Storage, n); }
 | 
			
		||||
    void            SetBitRange(int n, int n2)  { ImBitArraySetBitRange(Storage, n, n2); } // Works on range [n..n2)
 | 
			
		||||
    bool            TestBit(int n) const        { IM_ASSERT(n + OFFSET < BITCOUNT); return ImBitArrayTestBit(Storage, n + OFFSET); }
 | 
			
		||||
    void            SetBit(int n)               { IM_ASSERT(n + OFFSET < BITCOUNT); ImBitArraySetBit(Storage, n + OFFSET); }
 | 
			
		||||
    void            ClearBit(int n)             { IM_ASSERT(n + OFFSET < BITCOUNT); ImBitArrayClearBit(Storage, n + OFFSET); }
 | 
			
		||||
    void            SetBitRange(int n, int n2)  { ImBitArraySetBitRange(Storage, n + OFFSET, n2 + OFFSET); } // Works on range [n..n2)
 | 
			
		||||
    bool            operator[](int n) const     { IM_ASSERT(n + OFFSET < BITCOUNT); return ImBitArrayTestBit(Storage, n + OFFSET); }
 | 
			
		||||
};
 | 
			
		||||
template<int BITCOUNT>
 | 
			
		||||
const int ImBitArray<BITCOUNT>::Size;
 | 
			
		||||
 | 
			
		||||
// Helper: ImBitVector
 | 
			
		||||
// Store 1-bit per value.
 | 
			
		||||
@@ -911,73 +910,6 @@ enum ImGuiPlotType
 | 
			
		||||
    ImGuiPlotType_Histogram
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum ImGuiInputEventType
 | 
			
		||||
{
 | 
			
		||||
    ImGuiInputEventType_None = 0,
 | 
			
		||||
    ImGuiInputEventType_MousePos,
 | 
			
		||||
    ImGuiInputEventType_MouseWheel,
 | 
			
		||||
    ImGuiInputEventType_MouseButton,
 | 
			
		||||
    ImGuiInputEventType_MouseViewport,
 | 
			
		||||
    ImGuiInputEventType_Key,
 | 
			
		||||
    ImGuiInputEventType_KeyMods,
 | 
			
		||||
    ImGuiInputEventType_Char,
 | 
			
		||||
    ImGuiInputEventType_Focus,
 | 
			
		||||
    ImGuiInputEventType_COUNT
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum ImGuiInputSource
 | 
			
		||||
{
 | 
			
		||||
    ImGuiInputSource_None = 0,
 | 
			
		||||
    ImGuiInputSource_Mouse,
 | 
			
		||||
    ImGuiInputSource_Keyboard,
 | 
			
		||||
    ImGuiInputSource_Gamepad,
 | 
			
		||||
    ImGuiInputSource_Clipboard,     // Currently only used by InputText()
 | 
			
		||||
    ImGuiInputSource_Nav,           // Stored in g.ActiveIdSource only
 | 
			
		||||
    ImGuiInputSource_COUNT
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// FIXME: Structures in the union below need to be declared as anonymous unions appears to be an extension?
 | 
			
		||||
// Using ImVec2() would fail on Clang 'union member 'MousePos' has a non-trivial default constructor'
 | 
			
		||||
struct ImGuiInputEventMousePos      { float PosX, PosY; };
 | 
			
		||||
struct ImGuiInputEventMouseWheel    { float WheelX, WheelY; };
 | 
			
		||||
struct ImGuiInputEventMouseButton   { int Button; bool Down; };
 | 
			
		||||
struct ImGuiInputEventMouseViewport { ImGuiID HoveredViewportID; };
 | 
			
		||||
struct ImGuiInputEventKey           { ImGuiKey Key; bool Down; float AnalogValue; };
 | 
			
		||||
struct ImGuiInputEventKeyMods       { ImGuiKeyModFlags Mods; };
 | 
			
		||||
struct ImGuiInputEventText          { unsigned int Char; };
 | 
			
		||||
struct ImGuiInputEventAppFocused    { bool Focused; };
 | 
			
		||||
 | 
			
		||||
struct ImGuiInputEvent
 | 
			
		||||
{
 | 
			
		||||
    ImGuiInputEventType             Type;
 | 
			
		||||
    ImGuiInputSource                Source;
 | 
			
		||||
    union
 | 
			
		||||
    {
 | 
			
		||||
        ImGuiInputEventMousePos     MousePos;       // if Type == ImGuiInputEventType_MousePos
 | 
			
		||||
        ImGuiInputEventMouseWheel   MouseWheel;     // if Type == ImGuiInputEventType_MouseWheel
 | 
			
		||||
        ImGuiInputEventMouseButton  MouseButton;    // if Type == ImGuiInputEventType_MouseButton
 | 
			
		||||
        ImGuiInputEventMouseViewport MouseViewport; // if Type == ImGuiInputEventType_MouseViewport
 | 
			
		||||
        ImGuiInputEventKey          Key;            // if Type == ImGuiInputEventType_Key
 | 
			
		||||
        ImGuiInputEventKeyMods      KeyMods;        // if Type == ImGuiInputEventType_Modifiers
 | 
			
		||||
        ImGuiInputEventText         Text;           // if Type == ImGuiInputEventType_Text
 | 
			
		||||
        ImGuiInputEventAppFocused   AppFocused;     // if Type == ImGuiInputEventType_Focus
 | 
			
		||||
    };
 | 
			
		||||
    bool                            AddedByTestEngine;
 | 
			
		||||
 | 
			
		||||
    ImGuiInputEvent() { memset(this, 0, sizeof(*this)); }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// FIXME-NAV: Clarify/expose various repeat delay/rate
 | 
			
		||||
enum ImGuiInputReadMode
 | 
			
		||||
{
 | 
			
		||||
    ImGuiInputReadMode_Down,
 | 
			
		||||
    ImGuiInputReadMode_Pressed,
 | 
			
		||||
    ImGuiInputReadMode_Released,
 | 
			
		||||
    ImGuiInputReadMode_Repeat,
 | 
			
		||||
    ImGuiInputReadMode_RepeatSlow,
 | 
			
		||||
    ImGuiInputReadMode_RepeatFast
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum ImGuiPopupPositionPolicy
 | 
			
		||||
{
 | 
			
		||||
    ImGuiPopupPositionPolicy_Default,
 | 
			
		||||
@@ -1238,6 +1170,94 @@ struct ImGuiPtrOrIndex
 | 
			
		||||
    ImGuiPtrOrIndex(int index)  { Ptr = NULL; Index = index; }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// [SECTION] Inputs support
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
typedef ImBitArray<ImGuiKey_NamedKey_COUNT, -ImGuiKey_NamedKey_BEGIN>    ImBitArrayForNamedKeys;
 | 
			
		||||
 | 
			
		||||
enum ImGuiKeyPrivate_
 | 
			
		||||
{
 | 
			
		||||
    ImGuiKey_LegacyNativeKey_BEGIN  = 0,
 | 
			
		||||
    ImGuiKey_LegacyNativeKey_END    = 512,
 | 
			
		||||
    ImGuiKey_Gamepad_BEGIN          = ImGuiKey_GamepadStart,
 | 
			
		||||
    ImGuiKey_Gamepad_END            = ImGuiKey_GamepadRStickRight + 1
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Helper to store all mods easily. Stored in e.g. io.KeyMods.
 | 
			
		||||
enum ImGuiKeyModFlags_
 | 
			
		||||
{
 | 
			
		||||
    ImGuiKeyModFlags_None           = 0,
 | 
			
		||||
    ImGuiKeyModFlags_Ctrl           = 1 << 0,
 | 
			
		||||
    ImGuiKeyModFlags_Shift          = 1 << 1,
 | 
			
		||||
    ImGuiKeyModFlags_Alt            = 1 << 2,
 | 
			
		||||
    ImGuiKeyModFlags_Super          = 1 << 3    // Cmd/Super/Windows key
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum ImGuiInputEventType
 | 
			
		||||
{
 | 
			
		||||
    ImGuiInputEventType_None = 0,
 | 
			
		||||
    ImGuiInputEventType_MousePos,
 | 
			
		||||
    ImGuiInputEventType_MouseWheel,
 | 
			
		||||
    ImGuiInputEventType_MouseButton,
 | 
			
		||||
    ImGuiInputEventType_MouseViewport,
 | 
			
		||||
    ImGuiInputEventType_Key,
 | 
			
		||||
    ImGuiInputEventType_Char,
 | 
			
		||||
    ImGuiInputEventType_Focus,
 | 
			
		||||
    ImGuiInputEventType_COUNT
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum ImGuiInputSource
 | 
			
		||||
{
 | 
			
		||||
    ImGuiInputSource_None = 0,
 | 
			
		||||
    ImGuiInputSource_Mouse,
 | 
			
		||||
    ImGuiInputSource_Keyboard,
 | 
			
		||||
    ImGuiInputSource_Gamepad,
 | 
			
		||||
    ImGuiInputSource_Clipboard,     // Currently only used by InputText()
 | 
			
		||||
    ImGuiInputSource_Nav,           // Stored in g.ActiveIdSource only
 | 
			
		||||
    ImGuiInputSource_COUNT
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// FIXME: Structures in the union below need to be declared as anonymous unions appears to be an extension?
 | 
			
		||||
// Using ImVec2() would fail on Clang 'union member 'MousePos' has a non-trivial default constructor'
 | 
			
		||||
struct ImGuiInputEventMousePos      { float PosX, PosY; };
 | 
			
		||||
struct ImGuiInputEventMouseWheel    { float WheelX, WheelY; };
 | 
			
		||||
struct ImGuiInputEventMouseButton   { int Button; bool Down; };
 | 
			
		||||
struct ImGuiInputEventMouseViewport { ImGuiID HoveredViewportID; };
 | 
			
		||||
struct ImGuiInputEventKey           { ImGuiKey Key; bool Down; float AnalogValue; };
 | 
			
		||||
struct ImGuiInputEventText          { unsigned int Char; };
 | 
			
		||||
struct ImGuiInputEventAppFocused    { bool Focused; };
 | 
			
		||||
 | 
			
		||||
struct ImGuiInputEvent
 | 
			
		||||
{
 | 
			
		||||
    ImGuiInputEventType             Type;
 | 
			
		||||
    ImGuiInputSource                Source;
 | 
			
		||||
    union
 | 
			
		||||
    {
 | 
			
		||||
        ImGuiInputEventMousePos     MousePos;       // if Type == ImGuiInputEventType_MousePos
 | 
			
		||||
        ImGuiInputEventMouseWheel   MouseWheel;     // if Type == ImGuiInputEventType_MouseWheel
 | 
			
		||||
        ImGuiInputEventMouseButton  MouseButton;    // if Type == ImGuiInputEventType_MouseButton
 | 
			
		||||
        ImGuiInputEventMouseViewport MouseViewport; // if Type == ImGuiInputEventType_MouseViewport
 | 
			
		||||
        ImGuiInputEventKey          Key;            // if Type == ImGuiInputEventType_Key
 | 
			
		||||
        ImGuiInputEventText         Text;           // if Type == ImGuiInputEventType_Text
 | 
			
		||||
        ImGuiInputEventAppFocused   AppFocused;     // if Type == ImGuiInputEventType_Focus
 | 
			
		||||
    };
 | 
			
		||||
    bool                            AddedByTestEngine;
 | 
			
		||||
 | 
			
		||||
    ImGuiInputEvent() { memset(this, 0, sizeof(*this)); }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// FIXME-NAV: Clarify/expose various repeat delay/rate
 | 
			
		||||
enum ImGuiInputReadMode
 | 
			
		||||
{
 | 
			
		||||
    ImGuiInputReadMode_Down,
 | 
			
		||||
    ImGuiInputReadMode_Pressed,
 | 
			
		||||
    ImGuiInputReadMode_Released,
 | 
			
		||||
    ImGuiInputReadMode_Repeat,
 | 
			
		||||
    ImGuiInputReadMode_RepeatSlow,
 | 
			
		||||
    ImGuiInputReadMode_RepeatFast
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// [SECTION] Clipper support
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
@@ -1780,7 +1800,7 @@ struct ImGuiContext
 | 
			
		||||
    bool                    ActiveIdUsingMouseWheel;            // Active widget will want to read mouse wheel. Blocks scrolling the underlying window.
 | 
			
		||||
    ImU32                   ActiveIdUsingNavDirMask;            // Active widget will want to read those nav move requests (e.g. can activate a button and move away from it)
 | 
			
		||||
    ImU32                   ActiveIdUsingNavInputMask;          // Active widget will want to read those nav inputs.
 | 
			
		||||
    ImBitArray<ImGuiKey_NamedKey_COUNT> ActiveIdUsingKeyInputMask; // Active widget will want to read those key inputs. When we grow the ImGuiKey enum we'll need to either to order the enum to make useful keys come first, either redesign this into e.g. a small array.
 | 
			
		||||
    ImBitArrayForNamedKeys  ActiveIdUsingKeyInputMask;          // Active widget will want to read those key inputs. When we grow the ImGuiKey enum we'll need to either to order the enum to make useful keys come first, either redesign this into e.g. a small array.
 | 
			
		||||
    ImVec2                  ActiveIdClickOffset;                // Clicked offset from upper-left corner, if applicable (currently only set by ButtonBehavior)
 | 
			
		||||
    ImGuiWindow*            ActiveIdWindow;
 | 
			
		||||
    ImGuiInputSource        ActiveIdSource;                     // Activating with mouse or nav (gamepad/keyboard)
 | 
			
		||||
@@ -2883,8 +2903,8 @@ namespace ImGui
 | 
			
		||||
    IMGUI_API void          SetActiveIdUsingNavAndKeys();
 | 
			
		||||
    inline bool             IsActiveIdUsingNavDir(ImGuiDir dir)                         { ImGuiContext& g = *GImGui; return (g.ActiveIdUsingNavDirMask & (1 << dir)) != 0; }
 | 
			
		||||
    inline bool             IsActiveIdUsingNavInput(ImGuiNavInput input)                { ImGuiContext& g = *GImGui; return (g.ActiveIdUsingNavInputMask & (1 << input)) != 0; }
 | 
			
		||||
    inline bool             IsActiveIdUsingKey(ImGuiKey key)                            { IM_ASSERT(IsNamedKey(key)); ImGuiContext& g = *GImGui; return g.ActiveIdUsingKeyInputMask.TestBit(key - ImGuiKey_NamedKey_BEGIN); }
 | 
			
		||||
    inline void             SetActiveIdUsingKey(ImGuiKey key)                           { IM_ASSERT(IsNamedKey(key)); ImGuiContext& g = *GImGui; g.ActiveIdUsingKeyInputMask.SetBit(key - ImGuiKey_NamedKey_BEGIN); }
 | 
			
		||||
    inline bool             IsActiveIdUsingKey(ImGuiKey key)                            { ImGuiContext& g = *GImGui; return g.ActiveIdUsingKeyInputMask[key]; }
 | 
			
		||||
    inline void             SetActiveIdUsingKey(ImGuiKey key)                           { ImGuiContext& g = *GImGui; g.ActiveIdUsingKeyInputMask.SetBit(key); }
 | 
			
		||||
    IMGUI_API bool          IsMouseDragPastThreshold(ImGuiMouseButton button, float lock_threshold = -1.0f);
 | 
			
		||||
    inline bool             IsNavInputDown(ImGuiNavInput n)                             { ImGuiContext& g = *GImGui; return g.IO.NavInputs[n] > 0.0f; }
 | 
			
		||||
    inline bool             IsNavInputTest(ImGuiNavInput n, ImGuiInputReadMode rm)      { return (GetNavInputAmount(n, rm) > 0.0f); }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user