// File: /workspace/github_cpp_makefile_star2_O1/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 0xb6e71(%rip), %r13     # 0xfdcd0
movl 0x1b1c(%r13), %eax
testl %eax, %eax
sete %cl
cmpl %esi, %eax
sete %al
orb %cl, %al
jne 0x46e7e
cmpb $0x1, 0x1b24(%r13)
jne 0x46e8e
movq 0x1ae0(%r13), %r15
cmpq %r15, 0x1ae8(%r13)
je 0x46ea3
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 0x46ec2
cmpb $0x1, 0x1b3d(%r13)
jne 0x46e8e
leaq 0x8(%r14), %r12
movq %r14, %rdi
movq %r12, %rsi
movl $0x1, %edx
callq 0x46fad
testb %al, %al
je 0x46e8e
cmpb $0x0, 0x1ce7(%r13)
jne 0x46e8e
movq 0x1c90(%r13), %rax
testq %rax, %rax
je 0x46f18
movq 0x390(%rax), %rax
testq %rax, %rax
je 0x46f18
cmpb $0x1, 0x8f(%rax)
jne 0x46f18
cmpq 0x390(%r15), %rax
je 0x46f18
testb $0xc, 0xf(%rax)
jne 0x46fa0
testb $0x4, 0x1cc(%r15)
jne 0x46fa0
movb $0x1, %r15b
testl %ebx, %ebx
je 0x46e91
movl %ebx, 0x1b1c(%r13)
movw $0x0, 0x1b24(%r13)
cmpl %ebx, 0x1b20(%r13)
je 0x46f52
movq $0x0, 0x1b28(%r13)
cmpb $0x1, 0x316c(%r13)
jne 0x46f8d
cmpl %ebx, 0x1b20(%r13)
jne 0x46f8d
leaq 0x1f38(%r13), %rdi
movss 0x70070(%rip), %xmm1    # 0xb6fe4
xorps %xmm0, %xmm0
movq %r14, %rsi
movq %r12, %rdx
movl $0xff00ffff, %ecx       # imm = 0xFF00FFFF
movl $0xf, %r8d
callq 0x79c80
cmpl %ebx, 0x3170(%r13)
jne 0x46e91
int3
jmp 0x46e91
movb $0x1, 0x1b27(%r13)
jmp 0x46e8e