app_codebase/src/main.c
Anton Ljungdahl caf9a7f24b hueh
2024-08-08 21:19:46 +02:00

246 lines
6.7 KiB
C

// header includes
#include "base/base_inc.h"
#include "os/os_inc.h"
#include "render/render_inc.h"
#include "font/font_inc.h"
#include "draw/draw_inc.h"
#include "ui/ui_inc.h"
// .c includes
#include "base/base_inc.c"
#include "os/os_inc.c"
#include "os/os_entry_point.c"
#include "render/render_inc.c"
#include "font/font_inc.c"
#include "draw/draw_inc.c"
#include "ui/ui_inc.c"
#define APP_WINDOW_WIDTH 1280
#define APP_WINDOW_HEIGHT 720
#define OS_REFRESH_RATE 60.0f
#define FRAME_DT 1.0f/OS_REFRESH_RATE
void EntryPoint()
{
OS_InitReceipt os_receipt = OS_init();
OS_InitGfxReceipt os_gfx_receipt = OS_gfx_init(os_receipt);
//unused_variable(os_gfx_receipt);
R_InitReceipt r_init_receipt = R_init(os_receipt, os_gfx_receipt);
F_InitReceipt f_init_receipt = F_init();
D_InitReceipt d_init_receipt = D_init(r_init_receipt, f_init_receipt);
unused_variable(d_init_receipt);
UI_State *ui = UI_state_alloc();
UI_state_set(ui);
OS_Handle window_handle = OS_window_open(0, vec2_S64(APP_WINDOW_WIDTH, APP_WINDOW_HEIGHT), str8_lit("ello"));
R_Handle window_r = R_window_equip(window_handle);
//break_debugger();
//~ Main loop
MSG msg = {0};
U64 frame_idx = 0;
for (B32 quit = 0; quit == 0;)
{
ArenaTemp scratch = scratch_get(0, 0);
OS_EventList events = OS_get_events(scratch.arena);
if(window_handle.u64[0] == 0)
{
break_debugger();
}
F32 dt = FRAME_DT;
Rng2_F32 client_rect = OS_client_rect_from_window(window_handle);
Vec2_F32 client_rect_dim = dim2_F32(client_rect);
Vec2_S64 resolution = vec2_S64_from_vec(client_rect_dim);
//- Begin frame
R_frame_begin();
D_frame_begin();
UI_frame_begin(dt);
R_window_start(window_r, resolution);
D_Bucket *bucket = D_bucket_make(scratch.arena);
// Anthing within this bucket scope will be pushed onto this the bucket.
D_BucketScope(scratch.arena, bucket)
{
//~ Build UI
UI_build_begin(window_handle, &events); // TODO(anton): events
U64 top_pane_height = 25;
Vec2_F32 top_bar_p0 = vec2_F32(client_rect.x0, client_rect.y0);
Vec2_F32 top_bar_p1 = vec2_F32(client_rect.x0 + client_rect_dim.x, client_rect.y0 + top_pane_height);
Rng2_F32 top_bar_rect = rng2_F32(top_bar_p0, top_bar_p1);
unused_variable(top_bar_rect);
U64 left_pane_width = 0.2f*APP_WINDOW_WIDTH;
///////////////////////////
//- Top bar
{
UI_push_fixed_rect(top_bar_rect);
UI_Box *top_bar_box = UI_box_make(UI_BoxFlag_DrawDropShadow|UI_BoxFlag_DrawBackground|UI_BoxFlag_DrawBorder, str8_lit("top_bar_pane"));
UI_pop_fixed_rect();
UI_push_parent(top_bar_box);
// Top pane
//UI_pane(top_bar_rect, str8_lit("top_bar_pane"))
//UI_width_fill
{
UI_Key file_menu_key = UI_key_from_string(UI_key_zero(), str8_lit("_file_menu_key_"));
UI_ctx_menu(file_menu_key)
{
UI_pref_width(UI_pixels(100, 0.0))
UI_pref_height(UI_pixels(25, 0.0f))
{
String8 buttons[] = {str8_lit("Open"), str8_lit("Exit")};
for(U64 i = 0; i < ArrayCount(buttons); i++)
{
UI_Signal sig = UI_button(buttons[i]);
if(UI_pressed(sig))
{
UI_ctx_menu_close();
}
}
}
}
// Buttons
{
B32 menu_open = 0;
if(ui_state->ctx_menu_open && UI_key_match(file_menu_key, ui_state->ctx_menu_key))
{
menu_open = 1;
}
UI_set_next_pref_width(UI_pixels(100, 0));
UI_set_next_pref_height(UI_pixels(25, 0));
UI_Signal file_button = UI_button(str8_lit("File"));
F32 button_size_y_px = file_button.box->rect.y1-file_button.box->rect.y0;
Vec2_F32 menu_offset = vec2_F32(0, button_size_y_px);
if(menu_open)
{
if(UI_hovering(file_button) && !UI_ctx_menu_is_open(file_menu_key))
{
UI_ctx_menu_open(file_menu_key, file_button.box->key, menu_offset);
}
}
else if(UI_pressed(file_button))
{
if(UI_ctx_menu_is_open(file_menu_key))
{
UI_ctx_menu_close();
}
else
{
UI_ctx_menu_open(file_menu_key, file_button.box->key, menu_offset);
}
}
//UI_ctx_menu_close();
}
}
UI_pop_parent();
}
UI_build_end();
//~ Submit and end frame
UI_draw();
//
//Rng2_F32 range = rng2_F32(vec2_F32(10,10), vec2_F32(100, 35));
//D_rect2D(range, .color = vec4_F32(0, 0, 0, 1.f),
//.corner_radius = 0,
//.softness = 0,
//.omit_texture = 1);
//D_text2D(vec2_F32(range.p0.x, range.p1.y), str8_lit("Testing text"));
//
D_submit(window_r, bucket);
R_window_finish(window_r);
UI_frame_end();
}
//~ Handle Events
for(OS_Event *event = events.first; event != 0; event = event->next)
{
if(event->kind == OS_EventKind_WindowClose)
{
quit = 1;
break;
}
if(event->kind == OS_EventKind_Press && OS_handle_match(event->window, window_handle) &&
event->key == OS_Key_Esc)
{
quit = 1;
break;
}
}
// TODO(anton): Understand this? What is going on?
if(frame_idx == 0)
{
OS_window_first_paint(window_handle);
}
frame_idx += 1;
if(frame_idx == U64Max)
{
frame_idx = 0;
}
scratch_release(scratch);
}
//~ Shutdown
R_window_unequip(window_handle, window_r);
R_shutdown();
}
//
//
//UI_padding(UI_pixels(10, 0))
//UI_width_fill
//UI_row
//{
//UI_spacer(UI_pixels(10, 0));
//
//UI_set_next_pref_size(Axis2_X, UI_pixels(100, 1));
//UI_set_next_pref_size(Axis2_Y, UI_pixels(30, 1));
//UI_Signal button1 = UI_button(str8_lit("Button1"));
//unused_variable(button1);
//
//UI_spacer(UI_pixels(10, 0));
//UI_set_next_pref_size(Axis2_X, UI_pixels(100, 0));
//UI_set_next_pref_size(Axis2_Y, UI_pixels(30, 1));
//UI_Signal button2 = UI_button(str8_lit("Button2"));
//unused_variable(button2);
//
//UI_spacer(UI_pixels(10, 0));
//UI_set_next_pref_size(Axis2_X, UI_pixels(100, 0));
//UI_set_next_pref_size(Axis2_Y, UI_pixels(30, 1));
//UI_Signal button3 = UI_button(str8_lit("Button3"));
//unused_variable(button3);
//
//}
//