os_read, ui misc
This commit is contained in:
@@ -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");
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
18
src/ui/ui.c
18
src/ui/ui.c
@@ -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 {
|
||||||
|
|||||||
@@ -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, ...);
|
||||||
|
|||||||
Reference in New Issue
Block a user