mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-04 07:01:04 +01:00 
			
		
		
		
	This commit is contained in:
		@@ -58,6 +58,8 @@ Other changes:
 | 
				
			|||||||
  Windows Close and Collapse Buttons.
 | 
					  Windows Close and Collapse Buttons.
 | 
				
			||||||
- Misc: Fixed ImVec2 operator[] violating aliasing rules causing issue with Intel C++
 | 
					- Misc: Fixed ImVec2 operator[] violating aliasing rules causing issue with Intel C++
 | 
				
			||||||
  compiler. (#6272) [@BayesBug]
 | 
					  compiler. (#6272) [@BayesBug]
 | 
				
			||||||
 | 
					- IO: Added io.AddMouseSourceEvent() and ImGuiMouseSource enum. This is to allow backend to
 | 
				
			||||||
 | 
					  specify actual event source between Mouse/TouchScreen/Pen. (#2702, #2334, #2372, #3453, #5693)
 | 
				
			||||||
- IO: Fixed support for calling io.AddXXXX functions fron inactive context (wrongly
 | 
					- IO: Fixed support for calling io.AddXXXX functions fron inactive context (wrongly
 | 
				
			||||||
  advertised as supported in 1.89.4). (#6199, #6256, #5856) [@cfillion]
 | 
					  advertised as supported in 1.89.4). (#6199, #6256, #5856) [@cfillion]
 | 
				
			||||||
- Backends: OpenGL3: Fixed GL loader crash when GL_VERSION returns NULL. (#6154, #4445, #3530)
 | 
					- Backends: OpenGL3: Fixed GL loader crash when GL_VERSION returns NULL. (#6154, #4445, #3530)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										29
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -1246,6 +1246,7 @@ ImGuiIO::ImGuiIO()
 | 
				
			|||||||
    // Input (NB: we already have memset zero the entire structure!)
 | 
					    // Input (NB: we already have memset zero the entire structure!)
 | 
				
			||||||
    MousePos = ImVec2(-FLT_MAX, -FLT_MAX);
 | 
					    MousePos = ImVec2(-FLT_MAX, -FLT_MAX);
 | 
				
			||||||
    MousePosPrev = ImVec2(-FLT_MAX, -FLT_MAX);
 | 
					    MousePosPrev = ImVec2(-FLT_MAX, -FLT_MAX);
 | 
				
			||||||
 | 
					    MouseSource = ImGuiMouseSource_Mouse;
 | 
				
			||||||
    MouseDragThreshold = 6.0f;
 | 
					    MouseDragThreshold = 6.0f;
 | 
				
			||||||
    for (int i = 0; i < IM_ARRAYSIZE(MouseDownDuration); i++) MouseDownDuration[i] = MouseDownDurationPrev[i] = -1.0f;
 | 
					    for (int i = 0; i < IM_ARRAYSIZE(MouseDownDuration); i++) MouseDownDuration[i] = MouseDownDurationPrev[i] = -1.0f;
 | 
				
			||||||
    for (int i = 0; i < IM_ARRAYSIZE(KeysData); i++) { KeysData[i].DownDuration = KeysData[i].DownDurationPrev = -1.0f; }
 | 
					    for (int i = 0; i < IM_ARRAYSIZE(KeysData); i++) { KeysData[i].DownDuration = KeysData[i].DownDurationPrev = -1.0f; }
 | 
				
			||||||
@@ -1472,6 +1473,7 @@ void ImGuiIO::AddMousePosEvent(float x, float y)
 | 
				
			|||||||
    e.Source = ImGuiInputSource_Mouse;
 | 
					    e.Source = ImGuiInputSource_Mouse;
 | 
				
			||||||
    e.MousePos.PosX = pos.x;
 | 
					    e.MousePos.PosX = pos.x;
 | 
				
			||||||
    e.MousePos.PosY = pos.y;
 | 
					    e.MousePos.PosY = pos.y;
 | 
				
			||||||
 | 
					    e.MouseWheel.MouseSource = g.InputEventsNextMouseSource;
 | 
				
			||||||
    g.InputEventsQueue.push_back(e);
 | 
					    g.InputEventsQueue.push_back(e);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1494,6 +1496,7 @@ void ImGuiIO::AddMouseButtonEvent(int mouse_button, bool down)
 | 
				
			|||||||
    e.Source = ImGuiInputSource_Mouse;
 | 
					    e.Source = ImGuiInputSource_Mouse;
 | 
				
			||||||
    e.MouseButton.Button = mouse_button;
 | 
					    e.MouseButton.Button = mouse_button;
 | 
				
			||||||
    e.MouseButton.Down = down;
 | 
					    e.MouseButton.Down = down;
 | 
				
			||||||
 | 
					    e.MouseWheel.MouseSource = g.InputEventsNextMouseSource;
 | 
				
			||||||
    g.InputEventsQueue.push_back(e);
 | 
					    g.InputEventsQueue.push_back(e);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1512,9 +1515,19 @@ void ImGuiIO::AddMouseWheelEvent(float wheel_x, float wheel_y)
 | 
				
			|||||||
    e.Source = ImGuiInputSource_Mouse;
 | 
					    e.Source = ImGuiInputSource_Mouse;
 | 
				
			||||||
    e.MouseWheel.WheelX = wheel_x;
 | 
					    e.MouseWheel.WheelX = wheel_x;
 | 
				
			||||||
    e.MouseWheel.WheelY = wheel_y;
 | 
					    e.MouseWheel.WheelY = wheel_y;
 | 
				
			||||||
 | 
					    e.MouseWheel.MouseSource = g.InputEventsNextMouseSource;
 | 
				
			||||||
    g.InputEventsQueue.push_back(e);
 | 
					    g.InputEventsQueue.push_back(e);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// This is not a real event, the data is latched in order to be stored in actual Mouse events.
 | 
				
			||||||
 | 
					// This is so that duplicate events (e.g. Windows sending extraneous WM_MOUSEMOVE) gets filtered and are not leading to actual source changes.
 | 
				
			||||||
 | 
					void ImGuiIO::AddMouseSourceEvent(ImGuiMouseSource source)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    IM_ASSERT(Ctx != NULL);
 | 
				
			||||||
 | 
					    ImGuiContext& g = *Ctx;
 | 
				
			||||||
 | 
					    g.InputEventsNextMouseSource = source;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ImGuiIO::AddFocusEvent(bool focused)
 | 
					void ImGuiIO::AddFocusEvent(bool focused)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    IM_ASSERT(Ctx != NULL);
 | 
					    IM_ASSERT(Ctx != NULL);
 | 
				
			||||||
@@ -8663,12 +8676,18 @@ static const char* GetInputSourceName(ImGuiInputSource source)
 | 
				
			|||||||
    IM_ASSERT(IM_ARRAYSIZE(input_source_names) == ImGuiInputSource_COUNT && source >= 0 && source < ImGuiInputSource_COUNT);
 | 
					    IM_ASSERT(IM_ARRAYSIZE(input_source_names) == ImGuiInputSource_COUNT && source >= 0 && source < ImGuiInputSource_COUNT);
 | 
				
			||||||
    return input_source_names[source];
 | 
					    return input_source_names[source];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					static const char* GetMouseSourceName(ImGuiMouseSource source)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    const char* mouse_source_names[] = { "Mouse", "TouchScreen", "Pen" };
 | 
				
			||||||
 | 
					    IM_ASSERT(IM_ARRAYSIZE(mouse_source_names) == ImGuiMouseSource_COUNT && source >= 0 && source < ImGuiMouseSource_COUNT);
 | 
				
			||||||
 | 
					    return mouse_source_names[source];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
static void DebugPrintInputEvent(const char* prefix, const ImGuiInputEvent* e)
 | 
					static void DebugPrintInputEvent(const char* prefix, const ImGuiInputEvent* e)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiContext& g = *GImGui;
 | 
					    ImGuiContext& g = *GImGui;
 | 
				
			||||||
    if (e->Type == ImGuiInputEventType_MousePos)    { if (e->MousePos.PosX == -FLT_MAX && e->MousePos.PosY == -FLT_MAX) IMGUI_DEBUG_LOG_IO("%s: MousePos (-FLT_MAX, -FLT_MAX)\n", prefix); else IMGUI_DEBUG_LOG_IO("%s: MousePos (%.1f, %.1f)\n", prefix, e->MousePos.PosX, e->MousePos.PosY); return; }
 | 
					    if (e->Type == ImGuiInputEventType_MousePos)    { if (e->MousePos.PosX == -FLT_MAX && e->MousePos.PosY == -FLT_MAX) IMGUI_DEBUG_LOG_IO("%s: MousePos (-FLT_MAX, -FLT_MAX)\n", prefix); else IMGUI_DEBUG_LOG_IO("%s: MousePos (%.1f, %.1f) (%s)\n", prefix, e->MousePos.PosX, e->MousePos.PosY, GetMouseSourceName(e->MouseWheel.MouseSource)); return; }
 | 
				
			||||||
    if (e->Type == ImGuiInputEventType_MouseButton) { IMGUI_DEBUG_LOG_IO("%s: MouseButton %d %s\n", prefix, e->MouseButton.Button, e->MouseButton.Down ? "Down" : "Up"); return; }
 | 
					    if (e->Type == ImGuiInputEventType_MouseButton) { IMGUI_DEBUG_LOG_IO("%s: MouseButton %d %s (%s)\n", prefix, e->MouseButton.Button, e->MouseButton.Down ? "Down" : "Up", GetMouseSourceName(e->MouseWheel.MouseSource)); return; }
 | 
				
			||||||
    if (e->Type == ImGuiInputEventType_MouseWheel)  { IMGUI_DEBUG_LOG_IO("%s: MouseWheel (%.3f, %.3f)\n", prefix, e->MouseWheel.WheelX, e->MouseWheel.WheelY); return; }
 | 
					    if (e->Type == ImGuiInputEventType_MouseWheel)  { IMGUI_DEBUG_LOG_IO("%s: MouseWheel (%.3f, %.3f) (%s)\n", prefix, e->MouseWheel.WheelX, e->MouseWheel.WheelY, GetMouseSourceName(e->MouseWheel.MouseSource)); return; }
 | 
				
			||||||
    if (e->Type == ImGuiInputEventType_Key)         { IMGUI_DEBUG_LOG_IO("%s: Key \"%s\" %s\n", prefix, ImGui::GetKeyName(e->Key.Key), e->Key.Down ? "Down" : "Up"); return; }
 | 
					    if (e->Type == ImGuiInputEventType_Key)         { IMGUI_DEBUG_LOG_IO("%s: Key \"%s\" %s\n", prefix, ImGui::GetKeyName(e->Key.Key), e->Key.Down ? "Down" : "Up"); return; }
 | 
				
			||||||
    if (e->Type == ImGuiInputEventType_Text)        { IMGUI_DEBUG_LOG_IO("%s: Text: %c (U+%08X)\n", prefix, e->Text.Char, e->Text.Char); return; }
 | 
					    if (e->Type == ImGuiInputEventType_Text)        { IMGUI_DEBUG_LOG_IO("%s: Text: %c (U+%08X)\n", prefix, e->Text.Char, e->Text.Char); return; }
 | 
				
			||||||
    if (e->Type == ImGuiInputEventType_Focus)       { IMGUI_DEBUG_LOG_IO("%s: AppFocused %d\n", prefix, e->AppFocused.Focused); return; }
 | 
					    if (e->Type == ImGuiInputEventType_Focus)       { IMGUI_DEBUG_LOG_IO("%s: AppFocused %d\n", prefix, e->AppFocused.Focused); return; }
 | 
				
			||||||
@@ -8704,6 +8723,7 @@ void ImGui::UpdateInputEvents(bool trickle_fast_inputs)
 | 
				
			|||||||
            if (trickle_fast_inputs && (mouse_button_changed != 0 || mouse_wheeled || key_changed || text_inputted))
 | 
					            if (trickle_fast_inputs && (mouse_button_changed != 0 || mouse_wheeled || key_changed || text_inputted))
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            io.MousePos = event_pos;
 | 
					            io.MousePos = event_pos;
 | 
				
			||||||
 | 
					            io.MouseSource = e->MousePos.MouseSource;
 | 
				
			||||||
            mouse_moved = true;
 | 
					            mouse_moved = true;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else if (e->Type == ImGuiInputEventType_MouseButton)
 | 
					        else if (e->Type == ImGuiInputEventType_MouseButton)
 | 
				
			||||||
@@ -8714,6 +8734,7 @@ void ImGui::UpdateInputEvents(bool trickle_fast_inputs)
 | 
				
			|||||||
            if (trickle_fast_inputs && ((mouse_button_changed & (1 << button)) || mouse_wheeled))
 | 
					            if (trickle_fast_inputs && ((mouse_button_changed & (1 << button)) || mouse_wheeled))
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            io.MouseDown[button] = e->MouseButton.Down;
 | 
					            io.MouseDown[button] = e->MouseButton.Down;
 | 
				
			||||||
 | 
					            io.MouseSource = e->MouseButton.MouseSource;
 | 
				
			||||||
            mouse_button_changed |= (1 << button);
 | 
					            mouse_button_changed |= (1 << button);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else if (e->Type == ImGuiInputEventType_MouseWheel)
 | 
					        else if (e->Type == ImGuiInputEventType_MouseWheel)
 | 
				
			||||||
@@ -8723,6 +8744,7 @@ void ImGui::UpdateInputEvents(bool trickle_fast_inputs)
 | 
				
			|||||||
                break;
 | 
					                break;
 | 
				
			||||||
            io.MouseWheelH += e->MouseWheel.WheelX;
 | 
					            io.MouseWheelH += e->MouseWheel.WheelX;
 | 
				
			||||||
            io.MouseWheel += e->MouseWheel.WheelY;
 | 
					            io.MouseWheel += e->MouseWheel.WheelY;
 | 
				
			||||||
 | 
					            io.MouseSource = e->MouseWheel.MouseSource;
 | 
				
			||||||
            mouse_wheeled = true;
 | 
					            mouse_wheeled = true;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else if (e->Type == ImGuiInputEventType_Key)
 | 
					        else if (e->Type == ImGuiInputEventType_Key)
 | 
				
			||||||
@@ -13725,6 +13747,7 @@ void ImGui::ShowMetricsWindow(bool* p_open)
 | 
				
			|||||||
            Text("Mouse clicked:");  for (int i = 0; i < count; i++) if (IsMouseClicked(i)) { SameLine(); Text("b%d (%d)", i, io.MouseClickedCount[i]); }
 | 
					            Text("Mouse clicked:");  for (int i = 0; i < count; i++) if (IsMouseClicked(i)) { SameLine(); Text("b%d (%d)", i, io.MouseClickedCount[i]); }
 | 
				
			||||||
            Text("Mouse released:"); for (int i = 0; i < count; i++) if (IsMouseReleased(i)) { SameLine(); Text("b%d", i); }
 | 
					            Text("Mouse released:"); for (int i = 0; i < count; i++) if (IsMouseReleased(i)) { SameLine(); Text("b%d", i); }
 | 
				
			||||||
            Text("Mouse wheel: %.1f", io.MouseWheel);
 | 
					            Text("Mouse wheel: %.1f", io.MouseWheel);
 | 
				
			||||||
 | 
					            Text("Mouse source: %s", GetMouseSourceName(io.MouseSource));
 | 
				
			||||||
            Text("Pen Pressure: %.1f", io.PenPressure); // Note: currently unused
 | 
					            Text("Pen Pressure: %.1f", io.PenPressure); // Note: currently unused
 | 
				
			||||||
            Unindent();
 | 
					            Unindent();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										17
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								imgui.h
									
									
									
									
									
								
							@@ -23,7 +23,7 @@
 | 
				
			|||||||
// Library Version
 | 
					// Library Version
 | 
				
			||||||
// (Integer encoded as XYYZZ for use in #if preprocessor conditionals, e.g. '#if IMGUI_VERSION_NUM > 12345')
 | 
					// (Integer encoded as XYYZZ for use in #if preprocessor conditionals, e.g. '#if IMGUI_VERSION_NUM > 12345')
 | 
				
			||||||
#define IMGUI_VERSION               "1.89.5 WIP"
 | 
					#define IMGUI_VERSION               "1.89.5 WIP"
 | 
				
			||||||
#define IMGUI_VERSION_NUM           18947
 | 
					#define IMGUI_VERSION_NUM           18948
 | 
				
			||||||
#define IMGUI_HAS_TABLE
 | 
					#define IMGUI_HAS_TABLE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
@@ -167,6 +167,7 @@ struct ImGuiViewport;               // A Platform Window (always only one in 'ma
 | 
				
			|||||||
//   In Visual Studio IDE: CTRL+comma ("Edit.GoToAll") can follow symbols in comments, whereas CTRL+F12 ("Edit.GoToImplementation") cannot.
 | 
					//   In Visual Studio IDE: CTRL+comma ("Edit.GoToAll") can follow symbols in comments, whereas CTRL+F12 ("Edit.GoToImplementation") cannot.
 | 
				
			||||||
//   With Visual Assist installed: ALT+G ("VAssistX.GoToImplementation") can also follow symbols in comments.
 | 
					//   With Visual Assist installed: ALT+G ("VAssistX.GoToImplementation") can also follow symbols in comments.
 | 
				
			||||||
enum ImGuiKey : int;                // -> enum ImGuiKey              // Enum: A key identifier (ImGuiKey_XXX or ImGuiMod_XXX value)
 | 
					enum ImGuiKey : int;                // -> enum ImGuiKey              // Enum: A key identifier (ImGuiKey_XXX or ImGuiMod_XXX value)
 | 
				
			||||||
 | 
					enum ImGuiMouseSource : int;        // -> enum ImGuiMouseSource      // Enum; A mouse input source identifier (Mouse, TouchPad, TouchScreen, Pen)
 | 
				
			||||||
typedef int ImGuiCol;               // -> enum ImGuiCol_             // Enum: A color identifier for styling
 | 
					typedef int ImGuiCol;               // -> enum ImGuiCol_             // Enum: A color identifier for styling
 | 
				
			||||||
typedef int ImGuiCond;              // -> enum ImGuiCond_            // Enum: A condition for many Set*() functions
 | 
					typedef int ImGuiCond;              // -> enum ImGuiCond_            // Enum: A condition for many Set*() functions
 | 
				
			||||||
typedef int ImGuiDataType;          // -> enum ImGuiDataType_        // Enum: A primary data type
 | 
					typedef int ImGuiDataType;          // -> enum ImGuiDataType_        // Enum: A primary data type
 | 
				
			||||||
@@ -1715,6 +1716,18 @@ enum ImGuiMouseCursor_
 | 
				
			|||||||
    ImGuiMouseCursor_COUNT
 | 
					    ImGuiMouseCursor_COUNT
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Enumeration for AddMouseSourceEvent() actual source of Mouse Input data.
 | 
				
			||||||
 | 
					// Historically we use "Mouse" terminology everywhere to indicate pointer data, e.g. MousePos, IsMousePressed(), io.AddMousePosEvent()
 | 
				
			||||||
 | 
					// But that "Mouse" data can come from different source which occasionally may be useful for application to know about.
 | 
				
			||||||
 | 
					// You can submit a change of pointer type using io.AddMouseSourceEvent().
 | 
				
			||||||
 | 
					enum ImGuiMouseSource : int
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ImGuiMouseSource_Mouse = 0,         // Input is coming from an actual mouse.
 | 
				
			||||||
 | 
					    ImGuiMouseSource_TouchScreen,       // Input is coming from a touch screen (no hovering prior to initial press, less precise initial press aiming, dual-axis wheeling possible).
 | 
				
			||||||
 | 
					    ImGuiMouseSource_Pen,               // Input is coming from a pressure/magnetic pen (often used in conjunction with high-sampling rates).
 | 
				
			||||||
 | 
					    ImGuiMouseSource_COUNT
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Enumeration for ImGui::SetWindow***(), SetNextWindow***(), SetNextItem***() functions
 | 
					// Enumeration for ImGui::SetWindow***(), SetNextWindow***(), SetNextItem***() functions
 | 
				
			||||||
// Represent a condition.
 | 
					// Represent a condition.
 | 
				
			||||||
// Important: Treat as a regular enum! Do NOT combine multiple values using binary operators! All the functions above treat 0 as a shortcut to ImGuiCond_Always.
 | 
					// Important: Treat as a regular enum! Do NOT combine multiple values using binary operators! All the functions above treat 0 as a shortcut to ImGuiCond_Always.
 | 
				
			||||||
@@ -1982,6 +1995,7 @@ struct ImGuiIO
 | 
				
			|||||||
    IMGUI_API void  AddMousePosEvent(float x, float y);                     // Queue a mouse position update. Use -FLT_MAX,-FLT_MAX to signify no mouse (e.g. app not focused and not hovered)
 | 
					    IMGUI_API void  AddMousePosEvent(float x, float y);                     // Queue a mouse position update. Use -FLT_MAX,-FLT_MAX to signify no mouse (e.g. app not focused and not hovered)
 | 
				
			||||||
    IMGUI_API void  AddMouseButtonEvent(int button, bool down);             // Queue a mouse button change
 | 
					    IMGUI_API void  AddMouseButtonEvent(int button, bool down);             // Queue a mouse button change
 | 
				
			||||||
    IMGUI_API void  AddMouseWheelEvent(float wheel_x, float wheel_y);       // Queue a mouse wheel update. wheel_y<0: scroll down, wheel_y>0: scroll up, wheel_x<0: scroll right, wheel_x>0: scroll left.
 | 
					    IMGUI_API void  AddMouseWheelEvent(float wheel_x, float wheel_y);       // Queue a mouse wheel update. wheel_y<0: scroll down, wheel_y>0: scroll up, wheel_x<0: scroll right, wheel_x>0: scroll left.
 | 
				
			||||||
 | 
					    IMGUI_API void  AddMouseSourceEvent(ImGuiMouseSource source);           // Queue a mouse source change (Mouse/TouchScreen/Pen)
 | 
				
			||||||
    IMGUI_API void  AddFocusEvent(bool focused);                            // Queue a gain/loss of focus for the application (generally based on OS/platform focus of your window)
 | 
					    IMGUI_API void  AddFocusEvent(bool focused);                            // Queue a gain/loss of focus for the application (generally based on OS/platform focus of your window)
 | 
				
			||||||
    IMGUI_API void  AddInputCharacter(unsigned int c);                      // Queue a new character input
 | 
					    IMGUI_API void  AddInputCharacter(unsigned int c);                      // Queue a new character input
 | 
				
			||||||
    IMGUI_API void  AddInputCharacterUTF16(ImWchar16 c);                    // Queue a new character input from a UTF-16 character, it can be a surrogate
 | 
					    IMGUI_API void  AddInputCharacterUTF16(ImWchar16 c);                    // Queue a new character input from a UTF-16 character, it can be a surrogate
 | 
				
			||||||
@@ -2035,6 +2049,7 @@ struct ImGuiIO
 | 
				
			|||||||
    bool        MouseDown[5];                       // Mouse buttons: 0=left, 1=right, 2=middle + extras (ImGuiMouseButton_COUNT == 5). Dear ImGui mostly uses left and right buttons. Other buttons allow us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API.
 | 
					    bool        MouseDown[5];                       // Mouse buttons: 0=left, 1=right, 2=middle + extras (ImGuiMouseButton_COUNT == 5). Dear ImGui mostly uses left and right buttons. Other buttons allow us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API.
 | 
				
			||||||
    float       MouseWheel;                         // Mouse wheel Vertical: 1 unit scrolls about 5 lines text. >0 scrolls Up, <0 scrolls Down. Hold SHIFT to turn vertical scroll into horizontal scroll.
 | 
					    float       MouseWheel;                         // Mouse wheel Vertical: 1 unit scrolls about 5 lines text. >0 scrolls Up, <0 scrolls Down. Hold SHIFT to turn vertical scroll into horizontal scroll.
 | 
				
			||||||
    float       MouseWheelH;                        // Mouse wheel Horizontal. >0 scrolls Left, <0 scrolls Right. Most users don't have a mouse with a horizontal wheel, may not be filled by all backends.
 | 
					    float       MouseWheelH;                        // Mouse wheel Horizontal. >0 scrolls Left, <0 scrolls Right. Most users don't have a mouse with a horizontal wheel, may not be filled by all backends.
 | 
				
			||||||
 | 
					    ImGuiMouseSource MouseSource;                   // Mouse actual input peripheral (Mouse/TouchPad/TouchScreen/Pen).
 | 
				
			||||||
    bool        KeyCtrl;                            // Keyboard modifier down: Control
 | 
					    bool        KeyCtrl;                            // Keyboard modifier down: Control
 | 
				
			||||||
    bool        KeyShift;                           // Keyboard modifier down: Shift
 | 
					    bool        KeyShift;                           // Keyboard modifier down: Shift
 | 
				
			||||||
    bool        KeyAlt;                             // Keyboard modifier down: Alt
 | 
					    bool        KeyAlt;                             // Keyboard modifier down: Alt
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1264,7 +1264,7 @@ enum ImGuiInputEventType
 | 
				
			|||||||
enum ImGuiInputSource
 | 
					enum ImGuiInputSource
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiInputSource_None = 0,
 | 
					    ImGuiInputSource_None = 0,
 | 
				
			||||||
    ImGuiInputSource_Mouse,
 | 
					    ImGuiInputSource_Mouse,         // Note: may be Mouse or TouchScreen or Pen. See io.MouseSource to distinguish them.
 | 
				
			||||||
    ImGuiInputSource_Keyboard,
 | 
					    ImGuiInputSource_Keyboard,
 | 
				
			||||||
    ImGuiInputSource_Gamepad,
 | 
					    ImGuiInputSource_Gamepad,
 | 
				
			||||||
    ImGuiInputSource_Clipboard,     // Currently only used by InputText()
 | 
					    ImGuiInputSource_Clipboard,     // Currently only used by InputText()
 | 
				
			||||||
@@ -1273,9 +1273,9 @@ enum ImGuiInputSource
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// FIXME: Structures in the union below need to be declared as anonymous unions appears to be an extension?
 | 
					// 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'
 | 
					// Using ImVec2() would fail on Clang 'union member 'MousePos' has a non-trivial default constructor'
 | 
				
			||||||
struct ImGuiInputEventMousePos      { float PosX, PosY; };
 | 
					struct ImGuiInputEventMousePos      { float PosX, PosY; ImGuiMouseSource MouseSource; };
 | 
				
			||||||
struct ImGuiInputEventMouseWheel    { float WheelX, WheelY; };
 | 
					struct ImGuiInputEventMouseWheel    { float WheelX, WheelY; ImGuiMouseSource MouseSource; };
 | 
				
			||||||
struct ImGuiInputEventMouseButton   { int Button; bool Down; };
 | 
					struct ImGuiInputEventMouseButton   { int Button; bool Down; ImGuiMouseSource MouseSource; };
 | 
				
			||||||
struct ImGuiInputEventKey           { ImGuiKey Key; bool Down; float AnalogValue; };
 | 
					struct ImGuiInputEventKey           { ImGuiKey Key; bool Down; float AnalogValue; };
 | 
				
			||||||
struct ImGuiInputEventText          { unsigned int Char; };
 | 
					struct ImGuiInputEventText          { unsigned int Char; };
 | 
				
			||||||
struct ImGuiInputEventAppFocused    { bool Focused; };
 | 
					struct ImGuiInputEventAppFocused    { bool Focused; };
 | 
				
			||||||
@@ -1741,6 +1741,7 @@ struct ImGuiContext
 | 
				
			|||||||
    ImGuiIO                 IO;
 | 
					    ImGuiIO                 IO;
 | 
				
			||||||
    ImVector<ImGuiInputEvent> InputEventsQueue;                 // Input events which will be tricked/written into IO structure.
 | 
					    ImVector<ImGuiInputEvent> InputEventsQueue;                 // Input events which will be tricked/written into IO structure.
 | 
				
			||||||
    ImVector<ImGuiInputEvent> InputEventsTrail;                 // Past input events processed in NewFrame(). This is to allow domain-specific application to access e.g mouse/pen trail.
 | 
					    ImVector<ImGuiInputEvent> InputEventsTrail;                 // Past input events processed in NewFrame(). This is to allow domain-specific application to access e.g mouse/pen trail.
 | 
				
			||||||
 | 
					    ImGuiMouseSource        InputEventsNextMouseSource;
 | 
				
			||||||
    ImGuiStyle              Style;
 | 
					    ImGuiStyle              Style;
 | 
				
			||||||
    ImFont*                 Font;                               // (Shortcut) == FontStack.empty() ? IO.Font : FontStack.back()
 | 
					    ImFont*                 Font;                               // (Shortcut) == FontStack.empty() ? IO.Font : FontStack.back()
 | 
				
			||||||
    float                   FontSize;                           // (Shortcut) == FontBaseSize * g.CurrentWindow->FontWindowScale == window->FontSize(). Text height for current window.
 | 
					    float                   FontSize;                           // (Shortcut) == FontBaseSize * g.CurrentWindow->FontWindowScale == window->FontSize(). Text height for current window.
 | 
				
			||||||
@@ -2027,6 +2028,7 @@ struct ImGuiContext
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        IO.Ctx = this;
 | 
					        IO.Ctx = this;
 | 
				
			||||||
        InputTextState.Ctx = this;
 | 
					        InputTextState.Ctx = this;
 | 
				
			||||||
 | 
					        InputEventsNextMouseSource = ImGuiMouseSource_Mouse;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Initialized = false;
 | 
					        Initialized = false;
 | 
				
			||||||
        FontAtlasOwnedByContext = shared_font_atlas ? false : true;
 | 
					        FontAtlasOwnedByContext = shared_font_atlas ? false : true;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user