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 win32_target = true;
|
||||
b32 standalone_w32_target = false;
|
||||
b32 wasm_target = true;
|
||||
b32 wasm_target = false;
|
||||
|
||||
if (run_server) {
|
||||
os_systemf("start /D ..\\package ..\\package\\run_server.bat");
|
||||
|
||||
@@ -173,6 +173,31 @@ const wasm_app_imports = {
|
||||
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("keydown", (event) => {
|
||||
if (["F1", "F2", "F3", "p"].includes(event.key)) event.preventDefault();
|
||||
|
||||
@@ -173,6 +173,31 @@ const wasm_app_imports = {
|
||||
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("keydown", (event) => {
|
||||
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;
|
||||
}
|
||||
|
||||
// @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;
|
||||
struct w32_file_iter_t {
|
||||
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) {
|
||||
r2f32_t result = box->rect;
|
||||
f32 appear_t = f32_ease_out_n(f32_clamp01(box->appear_t * 2), 10);
|
||||
if (!ui_id_is_null(box->id)) {
|
||||
if (box->flags.animate_appear && !ui_id_is_null(box->id)) {
|
||||
v2f32_t size = v2f32_muls(r2f32_get_size(result), 0.15f);
|
||||
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);
|
||||
}
|
||||
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__)
|
||||
fn ui_box_t *ui__label(ui_code_loc_t loc, char *str, ...) {
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -751,13 +751,13 @@ fn void ui_end_reversal(void) {
|
||||
|
||||
ui_box_t *first2 = 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;
|
||||
DLLQ_REMOVE(it->parent->first, it->parent->last, 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;
|
||||
DLLQ_REMOVE(first2, last2, 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) {
|
||||
for (ui_box_t *box = ui->hash_first, *next = NULL; box; box = next) {
|
||||
next = box->hash_next;
|
||||
// if (box->flags.animate_appear) {
|
||||
if (box->flags.animate_appear) {
|
||||
box->appear_t += (f32)ui->frame->delta;
|
||||
// } else {
|
||||
// box->appear_t = 1;
|
||||
// }
|
||||
} else {
|
||||
box->appear_t = 1;
|
||||
}
|
||||
if (ui_is_hot_box(box)) {
|
||||
box->hot_t += (f32)ui->frame->delta;
|
||||
} 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_max 200000000.f
|
||||
#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_idf(char *str, ...);
|
||||
|
||||
Reference in New Issue
Block a user