mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-03 22:51:06 +01:00 
			
		
		
		
	Shallow alignment of ImGuiKey stuff + moving some in internals. Internals: add offset to ImBitArray<>, simpify ActiveIdUsingKeyInputMask.
This commit is contained in:
		@@ -540,21 +540,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.
 | 
			
		||||
@@ -1157,6 +1155,16 @@ struct ImGuiPtrOrIndex
 | 
			
		||||
// [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
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum ImGuiInputEventType
 | 
			
		||||
{
 | 
			
		||||
    ImGuiInputEventType_None = 0,
 | 
			
		||||
@@ -1605,7 +1613,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)
 | 
			
		||||
@@ -2652,8 +2660,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