os_read, ui misc

This commit is contained in:
Krzosa Karol
2025-02-05 08:38:47 +01:00
parent 6f31de5bf1
commit 22685cbbd3
6 changed files with 88 additions and 11 deletions

View File

@@ -41,7 +41,7 @@ int main(int argc, char **argv) {
b32 core_test_target = false; b32 core_test_target = false;
b32 win32_target = true; b32 win32_target = true;
b32 standalone_w32_target = false; b32 standalone_w32_target = false;
b32 wasm_target = true; b32 wasm_target = false;
if (run_server) { if (run_server) {
os_systemf("start /D ..\\package ..\\package\\run_server.bat"); os_systemf("start /D ..\\package ..\\package\\run_server.bat");

View File

@@ -173,6 +173,31 @@ const wasm_app_imports = {
window.requestAnimationFrame(wasm_update); window.requestAnimationFrame(wasm_update);
} }
canvas.addEventListener('dragover', e => { e.preventDefault(); });
canvas.addEventListener("drop", (e) => {
e.preventDefault();
if (e.dataTransfer.items) {
[...e.dataTransfer.items].forEach((item, i) => {
if (item.kind === "file") {
let file = item.getAsFile();
let reader = new FileReader();
let blob = file.slice(0, file.size);
reader.onload = (e) => {
if (e.target.error != null) {
console.log("failed to read file: ", e.target.error);
return;
}
let result = e.target.result;
// console.log(new TextDecoder().decode(result));
}
reader.readAsArrayBuffer(blob);
}
});
}
});
addEventListener("resize", (event) => { wake_up(); }); addEventListener("resize", (event) => { wake_up(); });
addEventListener("keydown", (event) => { addEventListener("keydown", (event) => {
if (["F1", "F2", "F3", "p"].includes(event.key)) event.preventDefault(); if (["F1", "F2", "F3", "p"].includes(event.key)) event.preventDefault();

View File

@@ -173,6 +173,31 @@ const wasm_app_imports = {
window.requestAnimationFrame(wasm_update); window.requestAnimationFrame(wasm_update);
} }
canvas.addEventListener('dragover', e => { e.preventDefault(); });
canvas.addEventListener("drop", (e) => {
e.preventDefault();
if (e.dataTransfer.items) {
[...e.dataTransfer.items].forEach((item, i) => {
if (item.kind === "file") {
let file = item.getAsFile();
let reader = new FileReader();
let blob = file.slice(0, file.size);
reader.onload = (e) => {
if (e.target.error != null) {
console.log("failed to read file: ", e.target.error);
return;
}
let result = e.target.result;
// console.log(new TextDecoder().decode(result));
}
reader.readAsArrayBuffer(blob);
}
});
}
});
addEventListener("resize", (event) => { wake_up(); }); addEventListener("resize", (event) => { wake_up(); });
addEventListener("keydown", (event) => { addEventListener("keydown", (event) => {
if (["F1", "F2", "F3", "p"].includes(event.key)) event.preventDefault(); if (["F1", "F2", "F3", "p"].includes(event.key)) event.preventDefault();

View File

@@ -108,6 +108,34 @@ fn os_write_t os_write(s8_t path, s8_t content) {
return result; return result;
} }
// @todo: improve to return error codes
fn s8_t os_read(ma_arena_t *arena, s8_t path) {
s8_t result = {0};
ma_temp_t scratch = ma_begin_scratch1(arena);
s16_t path16 = s16_from_s8(scratch.arena, path);
HANDLE handle = CreateFileW(path16.str, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (handle != INVALID_HANDLE_VALUE) {
LARGE_INTEGER file_size;
if (GetFileSizeEx(handle, &file_size)) {
if (file_size.QuadPart != 0) {
result.len = file_size.QuadPart;
result.str = ma_push_array(arena, char, result.len + 1);
assert(result.len == (i64)(DWORD)result.len);
DWORD read;
if (ReadFile(handle, result.str, (DWORD)result.len, &read, NULL)) { // @todo: can only read 32 byte size files?
if (read == result.len) {
result.str[result.len] = 0;
}
}
}
}
CloseHandle(handle);
}
ma_end_scratch(scratch);
return result;
}
typedef struct w32_file_iter_t w32_file_iter_t; typedef struct w32_file_iter_t w32_file_iter_t;
struct w32_file_iter_t { struct w32_file_iter_t {
HANDLE handle; HANDLE handle;

View File

@@ -389,10 +389,10 @@ struct ui_draw_compute_t {
fn r2f32_t ui_get_appear_rect(ui_box_t *box) { fn r2f32_t ui_get_appear_rect(ui_box_t *box) {
r2f32_t result = box->rect; r2f32_t result = box->rect;
f32 appear_t = f32_ease_out_n(f32_clamp01(box->appear_t * 2), 10); if (box->flags.animate_appear && !ui_id_is_null(box->id)) {
if (!ui_id_is_null(box->id)) {
v2f32_t size = v2f32_muls(r2f32_get_size(result), 0.15f); v2f32_t size = v2f32_muls(r2f32_get_size(result), 0.15f);
r2f32_t smaller_rect = r2f32_shrink(result, size); r2f32_t smaller_rect = r2f32_shrink(result, size);
f32 appear_t = f32_ease_out_n(f32_clamp01(box->appear_t * 2), 10);
result = r2f32_lerp(smaller_rect, result, appear_t); result = r2f32_lerp(smaller_rect, result, appear_t);
} }
return result; return result;
@@ -622,7 +622,7 @@ fn ui_signal_t ui__label_button(ui_code_loc_t loc, char *str, ...) {
#define ui_label(...) ui__label(UILOC, __VA_ARGS__) #define ui_label(...) ui__label(UILOC, __VA_ARGS__)
fn ui_box_t *ui__label(ui_code_loc_t loc, char *str, ...) { fn ui_box_t *ui__label(ui_code_loc_t loc, char *str, ...) {
S8_FMT(tcx->temp, str, string); S8_FMT(tcx->temp, str, string);
ui_box_t *box = ui_box(.loc = loc, .string = string, .flags = {.draw_text = true}); ui_box_t *box = ui_box(.loc = loc, .string = string, .flags = {.draw_text = true, .animate_appear = true});
return box; return box;
} }
@@ -751,13 +751,13 @@ fn void ui_end_reversal(void) {
ui_box_t *first2 = NULL; ui_box_t *first2 = NULL;
ui_box_t *last2 = NULL; ui_box_t *last2 = NULL;
for (ui_box_t *it = first, *next = it->next; next; it = next) { for (ui_box_t *it = first, *next = NULL; it; it = next) {
next = it->next; next = it->next;
DLLQ_REMOVE(it->parent->first, it->parent->last, it); DLLQ_REMOVE(it->parent->first, it->parent->last, it);
DLLQ_APPEND(first2, last2, it); DLLQ_APPEND(first2, last2, it);
} }
for (ui_box_t *it = last2, *prev = it->prev; prev; it = prev) { for (ui_box_t *it = last2, *prev = NULL; it; it = prev) {
prev = it->prev; prev = it->prev;
DLLQ_REMOVE(first2, last2, it); DLLQ_REMOVE(first2, last2, it);
DLLQ_APPEND(it->parent->first, it->parent->last, it); DLLQ_APPEND(it->parent->first, it->parent->last, it);
@@ -1192,11 +1192,11 @@ fn void ui_begin_frame(app_frame_t *frame) {
fn void ui_end_frame(void) { fn void ui_end_frame(void) {
for (ui_box_t *box = ui->hash_first, *next = NULL; box; box = next) { for (ui_box_t *box = ui->hash_first, *next = NULL; box; box = next) {
next = box->hash_next; next = box->hash_next;
// if (box->flags.animate_appear) { if (box->flags.animate_appear) {
box->appear_t += (f32)ui->frame->delta; box->appear_t += (f32)ui->frame->delta;
// } else { } else {
// box->appear_t = 1; box->appear_t = 1;
// } }
if (ui_is_hot_box(box)) { if (ui_is_hot_box(box)) {
box->hot_t += (f32)ui->frame->delta; box->hot_t += (f32)ui->frame->delta;
} else { } else {

View File

@@ -169,7 +169,6 @@ fn b32 ui_is_focused_box(ui_box_t *box) { return !ui_is_null_box(box) && box->id
#define ui_dm(V) ((V) * rn->main_font->computed_xchar_size) #define ui_dm(V) ((V) * rn->main_font->computed_xchar_size)
#define ui_max 200000000.f #define ui_max 200000000.f
#define ui_children_sum 0 #define ui_children_sum 0
#define ui_box_flags(...) (ui_box_flag_t){__VA_ARGS__}
fn ui_id_t ui_id(s8_t string); fn ui_id_t ui_id(s8_t string);
fn ui_id_t ui_idf(char *str, ...); fn ui_id_t ui_idf(char *str, ...);