mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-04 07:01:04 +01:00 
			
		
		
		
	@@ -19,6 +19,16 @@
 | 
			
		||||
 | 
			
		||||
// Data
 | 
			
		||||
static CFAbsoluteTime g_Time = 0.0;
 | 
			
		||||
static NSCursor*      g_MouseCursors[ImGuiMouseCursor_COUNT] = { 0 };
 | 
			
		||||
static bool           g_MouseCursorHidden = false;
 | 
			
		||||
 | 
			
		||||
// Undocumented methods for creating cursors.
 | 
			
		||||
@interface NSCursor()
 | 
			
		||||
+ (id)_windowResizeNorthWestSouthEastCursor;
 | 
			
		||||
+ (id)_windowResizeNorthEastSouthWestCursor;
 | 
			
		||||
+ (id)_windowResizeNorthSouthCursor;
 | 
			
		||||
+ (id)_windowResizeEastWestCursor;
 | 
			
		||||
@end
 | 
			
		||||
 | 
			
		||||
// Functions
 | 
			
		||||
bool ImGui_ImplOSX_Init()
 | 
			
		||||
@@ -26,7 +36,7 @@ bool ImGui_ImplOSX_Init()
 | 
			
		||||
    ImGuiIO& io = ImGui::GetIO();
 | 
			
		||||
 | 
			
		||||
    // Setup back-end capabilities flags
 | 
			
		||||
    //io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors;         // We can honor GetMouseCursor() values (optional)
 | 
			
		||||
    io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors;         // We can honor GetMouseCursor() values (optional)
 | 
			
		||||
    //io.BackendFlags |= ImGuiBackendFlags_HasSetMousePos;          // We can honor io.WantSetMousePos requests (optional, rarely used)
 | 
			
		||||
    //io.BackendFlags |= ImGuiBackendFlags_PlatformHasViewports;    // We can create multi-viewports on the Platform side (optional)
 | 
			
		||||
    //io.BackendFlags |= ImGuiBackendFlags_HasMouseHoveredViewport; // We can set io.MouseHoveredViewport correctly (optional, not easy)
 | 
			
		||||
@@ -56,6 +66,24 @@ bool ImGui_ImplOSX_Init()
 | 
			
		||||
    io.KeyMap[ImGuiKey_Y]           = 'Y';
 | 
			
		||||
    io.KeyMap[ImGuiKey_Z]           = 'Z';
 | 
			
		||||
 | 
			
		||||
    g_MouseCursorHidden = false;
 | 
			
		||||
    g_MouseCursors[ImGuiMouseCursor_Arrow] = [NSCursor arrowCursor];
 | 
			
		||||
    g_MouseCursors[ImGuiMouseCursor_TextInput] = [NSCursor IBeamCursor];
 | 
			
		||||
    g_MouseCursors[ImGuiMouseCursor_ResizeAll] = [NSCursor closedHandCursor];
 | 
			
		||||
    g_MouseCursors[ImGuiMouseCursor_Hand] = [NSCursor pointingHandCursor];
 | 
			
		||||
    g_MouseCursors[ImGuiMouseCursor_ResizeNS] = [NSCursor respondsToSelector:@selector(_windowResizeNorthSouthCursor)]
 | 
			
		||||
        ? [NSCursor _windowResizeNorthSouthCursor]
 | 
			
		||||
        : [NSCursor resizeUpDownCursor];
 | 
			
		||||
    g_MouseCursors[ImGuiMouseCursor_ResizeEW] = [NSCursor respondsToSelector:@selector(_windowResizeEastWestCursor)]
 | 
			
		||||
        ? [NSCursor _windowResizeEastWestCursor]
 | 
			
		||||
        : [NSCursor resizeLeftRightCursor];
 | 
			
		||||
    g_MouseCursors[ImGuiMouseCursor_ResizeNESW] = [NSCursor respondsToSelector:@selector(_windowResizeNorthEastSouthWestCursor)]
 | 
			
		||||
        ? [NSCursor _windowResizeNorthEastSouthWestCursor]
 | 
			
		||||
        : [NSCursor closedHandCursor];
 | 
			
		||||
    g_MouseCursors[ImGuiMouseCursor_ResizeNWSE] = [NSCursor respondsToSelector:@selector(_windowResizeNorthWestSouthEastCursor)]
 | 
			
		||||
        ? [NSCursor _windowResizeNorthWestSouthEastCursor]
 | 
			
		||||
        : [NSCursor closedHandCursor];
 | 
			
		||||
 | 
			
		||||
    // We don't set the io.SetClipboardTextFn/io.GetClipboardTextFn handlers,
 | 
			
		||||
    // because imgui.cpp has a default for them that works with OSX.
 | 
			
		||||
 | 
			
		||||
@@ -66,6 +94,34 @@ void ImGui_ImplOSX_Shutdown()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void ImGui_ImplOSX_UpdateMouseCursor()
 | 
			
		||||
{
 | 
			
		||||
    ImGuiIO& io = ImGui::GetIO();
 | 
			
		||||
    if (io.ConfigFlags & ImGuiConfigFlags_NoMouseCursorChange)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    ImGuiMouseCursor imgui_cursor = ImGui::GetMouseCursor();
 | 
			
		||||
    if (io.MouseDrawCursor || imgui_cursor == ImGuiMouseCursor_None)
 | 
			
		||||
    {
 | 
			
		||||
        // Hide OS mouse cursor if imgui is drawing it or if it wants no cursor
 | 
			
		||||
        if (!g_MouseCursorHidden)
 | 
			
		||||
        {
 | 
			
		||||
            g_MouseCursorHidden = true;
 | 
			
		||||
            [NSCursor hide];
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        // Show OS mouse cursor
 | 
			
		||||
        [g_MouseCursors[g_MouseCursors[imgui_cursor]? imgui_cursor: ImGuiMouseCursor_Arrow] set];
 | 
			
		||||
        if (g_MouseCursorHidden)
 | 
			
		||||
        {
 | 
			
		||||
            g_MouseCursorHidden = false;
 | 
			
		||||
            [NSCursor unhide];
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ImGui_ImplOSX_NewFrame(NSView* view)
 | 
			
		||||
{
 | 
			
		||||
    // Setup display size
 | 
			
		||||
@@ -80,6 +136,8 @@ void ImGui_ImplOSX_NewFrame(NSView* view)
 | 
			
		||||
    CFAbsoluteTime current_time = CFAbsoluteTimeGetCurrent();
 | 
			
		||||
    io.DeltaTime = current_time - g_Time;
 | 
			
		||||
    g_Time = current_time;
 | 
			
		||||
 | 
			
		||||
    ImGui_ImplOSX_UpdateMouseCursor();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int mapCharacterToKey(int c)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user