font testing

This commit is contained in:
jacob 2024-04-10 17:22:50 -05:00
parent a17950bebe
commit db9550a356
7 changed files with 85 additions and 4 deletions

View File

@ -1,5 +1,8 @@
/* Project-wide configurable constants */ /* Project-wide configurable constants */
/* TODO: Remove this */
#define FONT_TEST 1
#define WRITE_DIR "power_play" #define WRITE_DIR "power_play"
#define SETTINGS_FILENAME "settings.json" #define SETTINGS_FILENAME "settings.json"

View File

@ -9,12 +9,20 @@
#include "string.h" #include "string.h"
#include "renderer.h" #include "renderer.h"
#define LOOKUP_TABLE_SIZE (256) #if FONT_TEST
#define LOOKUP_TABLE_SIZE (ARRAY_COUNT(g_font_codes) * 2)
GLOBAL u32 g_font_codes[(1 << 20)] = { 0 };
#else
#define LOOKUP_TABLE_SIZE (256)
GLOBAL u32 g_font_codes[] = { GLOBAL u32 g_font_codes[] = {
0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF
}; };
#endif
struct font_task_params { struct font_task_params {
struct font_task_params *next_free; struct font_task_params *next_free;
@ -57,6 +65,12 @@ struct font_startup_receipt font_startup(struct work_startup_receipt *work_sr,
L.params.arena = arena_alloc(GIGABYTE(64)); L.params.arena = arena_alloc(GIGABYTE(64));
L.params.mutex = sys_mutex_alloc(); L.params.mutex = sys_mutex_alloc();
#if FONT_TEST
for (u64 i = 0; i < ARRAY_COUNT(g_font_codes); ++i) {
g_font_codes[i] = i;
}
#endif
return (struct font_startup_receipt) { 0 }; return (struct font_startup_receipt) { 0 };
} }

View File

@ -467,6 +467,8 @@ struct string _string_format(struct arena *arena, struct string fmt, ...)
* Unicode * Unicode
* ========================== */ * ========================== */
/* Codepoint iteration */
struct string_codepoint_iter string_codepoint_iter_begin(struct string str) struct string_codepoint_iter string_codepoint_iter_begin(struct string str)
{ {
return (struct string_codepoint_iter) { return (struct string_codepoint_iter) {
@ -598,9 +600,11 @@ struct string32 string32_from_string(struct arena *arena, struct string str8)
u64 cstr_len(char *cstr) u64 cstr_len(char *cstr)
{ {
char *end = cstr; char *end = cstr;
if (cstr) {
while (*end) { while (*end) {
++end; ++end;
} }
}
return end - cstr; return end - cstr;
} }

View File

@ -454,6 +454,13 @@ f64 sys_timestamp_seconds(sys_timestamp_t ts);
struct sys_local_time_info sys_local_time(void); struct sys_local_time_info sys_local_time(void);
/* ========================== *
* Clipboard
* ========================== */
void sys_set_clipboard_text(struct string str);
struct string sys_get_clipboard_text(struct arena *arena);
/* ========================== * /* ========================== *
* Util * Util
* ========================== */ * ========================== */

View File

@ -1692,6 +1692,45 @@ struct sys_local_time_info sys_local_time(void)
}; };
} }
/* ========================== *
* Clipboard
* ========================== */
void sys_set_clipboard_text(struct string str)
{
if (OpenClipboard(0)) {
struct temp_arena scratch = scratch_begin_no_conflict();
struct string16 str16 = string16_from_string(scratch.arena, str);
u64 str16_size_bytes = str16.len * 2;
EmptyClipboard();
HANDLE handle = GlobalAlloc(GMEM_MOVEABLE, str16_size_bytes + 1);
if (handle) {
u16 *dest_wstr = (u16 *)GlobalLock(handle);
MEMCPY(dest_wstr, str16.text, str16_size_bytes);
dest_wstr[str16.len] = 0;
GlobalUnlock(handle);
SetClipboardData(CF_UNICODETEXT, handle);
}
CloseClipboard();
scratch_end(scratch);
}
}
struct string sys_get_clipboard_text(struct arena *arena)
{
struct string res = { 0 };
if (IsClipboardFormatAvailable(CF_UNICODETEXT) && OpenClipboard(0)) {
HANDLE handle = GetClipboardData(CF_UNICODETEXT);
if (handle) {
u16 *src_wstr = (u16 *)GlobalLock(handle);
res = string_from_string16(arena, string16_from_wstr(src_wstr));
GlobalUnlock(handle);
}
CloseClipboard();
}
return res;
}
/* ========================== * /* ========================== *
* Util * Util
* ========================== */ * ========================== */

View File

@ -107,7 +107,8 @@ GLOBAL READONLY enum user_bind_kind g_binds[SYS_BTN_COUNT] = {
[SYS_BTN_F11] = USER_BIND_KIND_FULLSCREEN, [SYS_BTN_F11] = USER_BIND_KIND_FULLSCREEN,
[SYS_BTN_MWHEELUP] = USER_BIND_KIND_ZOOM_IN, [SYS_BTN_MWHEELUP] = USER_BIND_KIND_ZOOM_IN,
[SYS_BTN_MWHEELDOWN] = USER_BIND_KIND_ZOOM_OUT, [SYS_BTN_MWHEELDOWN] = USER_BIND_KIND_ZOOM_OUT,
[SYS_BTN_M3] = USER_BIND_KIND_PAN [SYS_BTN_M3] = USER_BIND_KIND_PAN,
[SYS_BTN_CTRL] = USER_BIND_KIND_CTRL_TEST
}; };
/* ========================== * /* ========================== *
@ -530,6 +531,18 @@ INTERNAL void user_update(void)
--test_input_array_pos; --test_input_array_pos;
} }
} }
/* Paste test */
if (event->kind == SYS_EVENT_KIND_BUTTON_DOWN && event->button == SYS_BTN_V && L.bind_states[USER_BIND_KIND_CTRL_TEST].is_held) {
struct string clipboard = sys_get_clipboard_text(scratch.arena);
u64 copy_size = min_u64(clipboard.len, ARRAY_COUNT(test_input_array) - test_input_array_pos - 4);
MEMCPY(&test_input_array[test_input_array_pos], clipboard.text, copy_size);
test_input_array_pos += copy_size;
}
/* Copy test */
if (event->kind == SYS_EVENT_KIND_BUTTON_DOWN && event->button == SYS_BTN_C && L.bind_states[USER_BIND_KIND_CTRL_TEST].is_held) {
struct string src = { .text = test_input_array, .len = test_input_array_pos };
sys_set_clipboard_text(src);
}
} }
/* ========================== * /* ========================== *

View File

@ -28,6 +28,7 @@ enum user_bind_kind {
USER_BIND_KIND_ZOOM_IN, USER_BIND_KIND_ZOOM_IN,
USER_BIND_KIND_ZOOM_OUT, USER_BIND_KIND_ZOOM_OUT,
USER_BIND_KIND_PAN, USER_BIND_KIND_PAN,
USER_BIND_KIND_CTRL_TEST,
USER_BIND_KIND_COUNT USER_BIND_KIND_COUNT
}; };