// File: /workspace/github_c_makefile_star2_O0/justy989[P]ce/ce_layout.c
// Function: ce_layout_distribute_rect
void ce_layout_distribute_rect(CeLayout_t* layout, CeRect_t rect){
     switch(layout->type){
     default:
          break;
     case CE_LAYOUT_TYPE_VIEW:
          layout->view.rect = rect;
          break;
     case CE_LAYOUT_TYPE_LIST:
     {
          layout->list.rect = rect;
          CeRect_t sliced_rect = rect;
          int64_t separator_lines = layout->list.layout_count - 1;

          if(layout->list.vertical){
               assert(layout->list.layout_count != 0);
               int64_t rect_height = rect.bottom - rect.top;
               int64_t slice_height = (rect_height - separator_lines) / layout->list.layout_count;
               int64_t leftover_lines = (rect_height - separator_lines) % layout->list.layout_count;
               sliced_rect.bottom = sliced_rect.top + slice_height;

               for(int64_t i = 0; i < layout->list.layout_count; i++){
                    if(leftover_lines > 0){
                         leftover_lines--;
                         sliced_rect.bottom++;
                    }

                    ce_layout_distribute_rect(layout->list.layouts[i], sliced_rect);

                    sliced_rect.top = sliced_rect.bottom + 1;
                    sliced_rect.bottom = sliced_rect.top + slice_height;
               }
          }else{
               assert(layout->list.layout_count != 0);
               int64_t rect_width = rect.right - rect.left;
               int64_t slice_width = (rect_width - separator_lines) / layout->list.layout_count;
               int64_t leftover_lines = (rect_width - separator_lines) % layout->list.layout_count;
               sliced_rect.right = sliced_rect.left + slice_width;

               for(int64_t i = 0; i < layout->list.layout_count; i++){
                    if(leftover_lines > 0){
                         leftover_lines--;
                         sliced_rect.right++;
                    }

                    ce_layout_distribute_rect(layout->list.layouts[i], sliced_rect);

                    sliced_rect.left = sliced_rect.right + 1;
                    sliced_rect.right = sliced_rect.left + slice_width;
               }
          }
     } break;
     case CE_LAYOUT_TYPE_TAB:
          layout->tab.rect = rect;
          ce_layout_distribute_rect(layout->tab.root, rect);
          break;
     case CE_LAYOUT_TYPE_TAB_LIST:
          layout->tab_list.rect = rect;
          if(layout->tab_list.tab_count > 1) rect.top++; // leave space for a tab bar, this probably doesn't want to be built in?
          ce_layout_distribute_rect(layout->tab_list.current, rect);
          break;
     }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa0, %rsp
leaq 0x10(%rbp), %rax
movq %rax, -0x80(%rbp)
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movl (%rax), %eax
movq %rax, -0x78(%rbp)
subq $0x3, %rax
ja 0x285fb
movq -0x78(%rbp), %rax
leaq 0x1c52e(%rip), %rcx     # 0x44b20
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0x2898a
movq -0x80(%rbp), %rcx
movq -0x8(%rbp), %rax
movq (%rcx), %rdx
movq %rdx, 0x8(%rax)
movq 0x8(%rcx), %rdx
movq %rdx, 0x10(%rax)
movq 0x10(%rcx), %rdx
movq %rdx, 0x18(%rax)
movq 0x18(%rcx), %rcx
movq %rcx, 0x20(%rax)
jmp 0x2898a
movq -0x80(%rbp), %rax
movq -0x8(%rbp), %rcx
movq (%rax), %rdx
movq %rdx, 0x20(%rcx)
movq 0x8(%rax), %rdx
movq %rdx, 0x28(%rcx)
movq 0x10(%rax), %rdx
movq %rdx, 0x30(%rcx)
movq 0x18(%rax), %rdx
movq %rdx, 0x38(%rcx)
movq (%rax), %rcx
movq %rcx, -0x28(%rbp)
movq 0x8(%rax), %rcx
movq %rcx, -0x20(%rbp)
movq 0x10(%rax), %rcx
movq %rcx, -0x18(%rbp)
movq 0x18(%rax), %rax
movq %rax, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
subq $0x1, %rax
movq %rax, -0x30(%rbp)
movq -0x8(%rbp), %rax
testb $0x1, 0x18(%rax)
je 0x287a6
movq -0x8(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x2869d
jmp 0x286bc
leaq 0x1c5fd(%rip), %rdi     # 0x44ca1
leaq 0x1c55e(%rip), %rsi     # 0x44c09
movl $0x118, %edx            # imm = 0x118
leaq 0x1c609(%rip), %rcx     # 0x44cc0
callq 0xd270
movq -0x80(%rbp), %rcx
movq 0x18(%rcx), %rax
subq 0x10(%rcx), %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
subq -0x30(%rbp), %rax
movq -0x8(%rbp), %rcx
cqto
idivq 0x10(%rcx)
movq %rax, -0x40(%rbp)
movq -0x38(%rbp), %rax
subq -0x30(%rbp), %rax
movq -0x8(%rbp), %rcx
cqto
idivq 0x10(%rcx)
movq %rdx, -0x48(%rbp)
movq -0x18(%rbp), %rax
addq -0x40(%rbp), %rax
movq %rax, -0x10(%rbp)
movq $0x0, -0x50(%rbp)
movq -0x50(%rbp), %rax
movq -0x8(%rbp), %rcx
cmpq 0x10(%rcx), %rax
jge 0x287a1
cmpq $0x0, -0x48(%rbp)
jle 0x2873d
movq -0x48(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x48(%rbp)
movq -0x10(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x50(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq -0x28(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rcx
movq %rcx, 0x10(%rsp)
movq 0x18(%rax), %rax
movq %rax, 0x18(%rsp)
callq 0x285c0
movq -0x10(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
addq -0x40(%rbp), %rax
movq %rax, -0x10(%rbp)
movq -0x50(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x50(%rbp)
jmp 0x2870c
jmp 0x288b8
movq -0x8(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x287b3
jmp 0x287d2
leaq 0x1c4e7(%rip), %rdi     # 0x44ca1
leaq 0x1c448(%rip), %rsi     # 0x44c09
movl $0x12a, %edx            # imm = 0x12A
leaq 0x1c4f3(%rip), %rcx     # 0x44cc0
callq 0xd270
movq -0x80(%rbp), %rcx
movq 0x8(%rcx), %rax
subq (%rcx), %rax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rax
subq -0x30(%rbp), %rax
movq -0x8(%rbp), %rcx
cqto
idivq 0x10(%rcx)
movq %rax, -0x60(%rbp)
movq -0x58(%rbp), %rax
subq -0x30(%rbp), %rax
movq -0x8(%rbp), %rcx
cqto
idivq 0x10(%rcx)
movq %rdx, -0x68(%rbp)
movq -0x28(%rbp), %rax
addq -0x60(%rbp), %rax
movq %rax, -0x20(%rbp)
movq $0x0, -0x70(%rbp)
movq -0x70(%rbp), %rax
movq -0x8(%rbp), %rcx
cmpq 0x10(%rcx), %rax
jge 0x288b6
cmpq $0x0, -0x68(%rbp)
jle 0x28852
movq -0x68(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x68(%rbp)
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x70(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq -0x28(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rcx
movq %rcx, 0x10(%rsp)
movq 0x18(%rax), %rax
movq %rax, 0x18(%rsp)
callq 0x285c0
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
addq -0x60(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x70(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x70(%rbp)
jmp 0x28821
jmp 0x288b8
jmp 0x2898a
movq -0x80(%rbp), %rax
movq -0x8(%rbp), %rcx
movq (%rax), %rdx
movq %rdx, 0x18(%rcx)
movq 0x8(%rax), %rdx
movq %rdx, 0x20(%rcx)
movq 0x10(%rax), %rdx
movq %rdx, 0x28(%rcx)
movq 0x18(%rax), %rdx
movq %rdx, 0x30(%rcx)
movq -0x8(%rbp), %rcx
movq 0x8(%rcx), %rdi
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rcx
movq %rcx, 0x10(%rsp)
movq 0x18(%rax), %rax
movq %rax, 0x18(%rsp)
callq 0x285c0
jmp 0x2898a
movq -0x80(%rbp), %rcx
movq -0x8(%rbp), %rax
movq (%rcx), %rdx
movq %rdx, 0x20(%rax)
movq 0x8(%rcx), %rdx
movq %rdx, 0x28(%rax)
movq 0x10(%rcx), %rdx
movq %rdx, 0x30(%rax)
movq 0x18(%rcx), %rcx
movq %rcx, 0x38(%rax)
movq -0x8(%rbp), %rax
cmpq $0x1, 0x18(%rax)
jle 0x28957
movq -0x80(%rbp), %rax
movq 0x10(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x10(%rax)
movq -0x80(%rbp), %rax
movq -0x8(%rbp), %rcx
movq 0x10(%rcx), %rdi
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rcx
movq %rcx, 0x10(%rsp)
movq 0x18(%rax), %rax
movq %rax, 0x18(%rsp)
callq 0x285c0
addq $0xa0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)