// File: /workspace/github_c_makefile_star2_O0/OnionIoT[P]lv_example/lvgl/src/lv_core/lv_obj.c
// Function: lv_obj_invalidate
void lv_obj_invalidate(const lv_obj_t * obj)
{
    LV_ASSERT_OBJ(obj, LV_OBJX_NAME);

    if(lv_obj_get_hidden(obj)) return;

    /*Invalidate the object only if it belongs to the 'LV_GC_ROOT(_lv_act_scr)'*/
    lv_obj_t * obj_scr = lv_obj_get_screen(obj);
    lv_disp_t * disp   = lv_obj_get_disp(obj_scr);
    if(obj_scr == lv_disp_get_scr_act(disp) || obj_scr == lv_disp_get_layer_top(disp) ||
       obj_scr == lv_disp_get_layer_sys(disp)) {
        /*Truncate recursively to the parents*/
        lv_area_t area_trunc;
        lv_obj_t * par = lv_obj_get_parent(obj);
        bool union_ok  = true;
        /*Start with the original coordinates*/
        lv_coord_t ext_size = obj->ext_draw_pad;
        lv_area_copy(&area_trunc, &obj->coords);
        area_trunc.x1 -= ext_size;
        area_trunc.y1 -= ext_size;
        area_trunc.x2 += ext_size;
        area_trunc.y2 += ext_size;

        /*Check through all parents*/
        while(par != NULL) {
            union_ok = lv_area_intersect(&area_trunc, &area_trunc, &par->coords);
            if(union_ok == false) break;       /*If no common parts with parent break;*/
            if(lv_obj_get_hidden(par)) return; /*If the parent is hidden then the child is hidden and won't be drawn*/

            par = lv_obj_get_parent(par);
        }

        if(union_ok) lv_inv_area(disp, &area_trunc);
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rdi
callq 0xd120
testb $0x1, %al
jne 0x745b
movq -0x8(%rbp), %rsi
leaq 0x60ca8(%rip), %rdi     # 0x680fc
callq 0xd410
jmp 0x7459
movq -0x8(%rbp), %rdi
callq 0x7c90
testb $0x1, %al
jne 0x746a
jmp 0x746f
jmp 0x75ae
movq -0x8(%rbp), %rdi
callq 0x7cf0
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rdi
callq 0x7a40
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x18(%rbp), %rdi
callq 0x6340
movq %rax, %rcx
movq -0x38(%rbp), %rax
cmpq %rcx, %rax
je 0x74e4
movq -0x10(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x18(%rbp), %rdi
callq 0x63d0
movq %rax, %rcx
movq -0x40(%rbp), %rax
cmpq %rcx, %rax
je 0x74e4
movq -0x10(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x18(%rbp), %rdi
callq 0x6420
movq %rax, %rcx
movq -0x48(%rbp), %rax
cmpq %rcx, %rax
jne 0x75ae
movq -0x8(%rbp), %rdi
callq 0x71b0
movq %rax, -0x28(%rbp)
movb $0x1, -0x29(%rbp)
movq -0x8(%rbp), %rax
movw 0x5c(%rax), %ax
movw %ax, -0x2c(%rbp)
movq -0x8(%rbp), %rsi
addq $0x20, %rsi
leaq -0x20(%rbp), %rdi
callq 0x7190
movswl -0x2c(%rbp), %ecx
movswl -0x20(%rbp), %eax
subl %ecx, %eax
movw %ax, -0x20(%rbp)
movswl -0x2c(%rbp), %ecx
movswl -0x1e(%rbp), %eax
subl %ecx, %eax
movw %ax, -0x1e(%rbp)
movswl -0x2c(%rbp), %ecx
movswl -0x1c(%rbp), %eax
addl %ecx, %eax
movw %ax, -0x1c(%rbp)
movswl -0x2c(%rbp), %ecx
movswl -0x1a(%rbp), %eax
addl %ecx, %eax
movw %ax, -0x1a(%rbp)
cmpq $0x0, -0x28(%rbp)
je 0x7599
movq -0x28(%rbp), %rdx
addq $0x20, %rdx
leaq -0x20(%rbp), %rsi
movq %rsi, %rdi
callq 0x427d0
andb $0x1, %al
movb %al, -0x29(%rbp)
movb -0x29(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x7579
jmp 0x7599
movq -0x28(%rbp), %rdi
callq 0x7c90
testb $0x1, %al
jne 0x7588
jmp 0x758a
jmp 0x75ae
movq -0x28(%rbp), %rdi
callq 0x71b0
movq %rax, -0x28(%rbp)
jmp 0x754a
testb $0x1, -0x29(%rbp)
je 0x75ac
movq -0x18(%rbp), %rdi
leaq -0x20(%rbp), %rsi
callq 0xadd0
jmp 0x75ae
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)