// File: /workspace/github_cpp_makefile_star2_O2/Ciaxur[P]yagb-emu/include/imgui/imgui.cpp
// Function: ImGui::ItemHoverable(ImRect const&, unsigned int)
bool ImGui::ItemHoverable(const ImRect& bb, ImGuiID id)
{
    ImGuiContext& g = *GImGui;
    if (g.HoveredId != 0 && g.HoveredId != id && !g.HoveredIdAllowOverlap)
        return false;

    ImGuiWindow* window = g.CurrentWindow;
    if (g.HoveredWindow != window)
        return false;
    if (g.ActiveId != 0 && g.ActiveId != id && !g.ActiveIdAllowOverlap)
        return false;
    if (!IsMouseHoveringRect(bb.Min, bb.Max))
        return false;
    if (g.NavDisableMouseHover)
        return false;
    if (!IsWindowContentHoverable(window, ImGuiHoveredFlags_None) || (window->DC.ItemFlags & ImGuiItemFlags_Disabled))
    {
        g.HoveredIdDisabled = true;
        return false;
    }

    // We exceptionally allow this function to be called with id==0 to allow using it for easy high-level
    // hover test in widgets code. We could also decide to split this function is two.
    if (id != 0)
    {
        SetHoveredID(id);

        // [DEBUG] Item Picker tool!
        // We perform the check here because SetHoveredID() is not frequently called (1~ time a frame), making
        // the cost of this tool near-zero. We can get slightly better call-stack and support picking non-hovered
        // items if we perform the test in ItemAdd(), but that would incur a small runtime cost.
        // #define IMGUI_DEBUG_TOOL_ITEM_PICKER_EX in imconfig.h if you want this check to also be performed in ItemAdd().
        if (g.DebugItemPickerActive && g.HoveredIdPreviousFrame == id)
            GetForegroundDrawList()->AddRect(bb.Min, bb.Max, IM_COL32(255, 255, 0, 255));
        if (g.DebugItemPickerBreakId == id)
            IM_DEBUG_BREAK();
    }

    return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movl %esi, %ebx
movq %rdi, %r14
movq 0xac66e(%rip), %r13     # 0xe3ce0
movl 0x1b1c(%r13), %eax
testl %eax, %eax
sete %cl
cmpl %esi, %eax
sete %al
orb %cl, %al
jne 0x37691
cmpb $0x1, 0x1b24(%r13)
jne 0x376a1
movq 0x1ae0(%r13), %r15
cmpq %r15, 0x1ae8(%r13)
je 0x376b6
xorl %r15d, %r15d
movl %r15d, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl 0x1b30(%r13), %eax
testl %eax, %eax
sete %cl
cmpl %ebx, %eax
sete %al
orb %cl, %al
jne 0x376d5
cmpb $0x1, 0x1b3d(%r13)
jne 0x376a1
leaq 0x8(%r14), %r12
pushq $0x1
popq %rdx
movq %r14, %rdi
movq %r12, %rsi
callq 0x37779
testb %al, %al
je 0x376a1
cmpb $0x0, 0x1ce7(%r13)
jne 0x376a1
movq %r15, %rdi
xorl %esi, %esi
callq 0x37606
testb %al, %al
je 0x3776c
testb $0x4, 0x1cc(%r15)
jne 0x3776c
movb $0x1, %r15b
testl %ebx, %ebx
je 0x376a4
movl %ebx, %edi
callq 0x37452
cmpb $0x1, 0x316c(%r13)
jne 0x37759
cmpl %ebx, 0x1b20(%r13)
jne 0x37759
movl $0x1f38, %edi           # imm = 0x1F38
addq 0xac5a6(%rip), %rdi     # 0xe3ce0
pushq $0xf
popq %r8
movss 0x648b2(%rip), %xmm1    # 0x9bff8
xorps %xmm0, %xmm0
movq %r14, %rsi
movq %r12, %rdx
movl $0xff00ffff, %ecx       # imm = 0xFF00FFFF
callq 0x63f6c
cmpl %ebx, 0x3170(%r13)
jne 0x376a4
int3
jmp 0x376a4
movb $0x1, 0x1b27(%r13)
jmp 0x376a1