font testing
This commit is contained in:
parent
a17950bebe
commit
db9550a356
@ -1,5 +1,8 @@
|
||||
/* Project-wide configurable constants */
|
||||
|
||||
/* TODO: Remove this */
|
||||
#define FONT_TEST 1
|
||||
|
||||
#define WRITE_DIR "power_play"
|
||||
#define SETTINGS_FILENAME "settings.json"
|
||||
|
||||
|
||||
16
src/font.c
16
src/font.c
@ -9,12 +9,20 @@
|
||||
#include "string.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[] = {
|
||||
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 *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.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 };
|
||||
}
|
||||
|
||||
|
||||
@ -467,6 +467,8 @@ struct string _string_format(struct arena *arena, struct string fmt, ...)
|
||||
* Unicode
|
||||
* ========================== */
|
||||
|
||||
/* Codepoint iteration */
|
||||
|
||||
struct string_codepoint_iter string_codepoint_iter_begin(struct string str)
|
||||
{
|
||||
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)
|
||||
{
|
||||
char *end = cstr;
|
||||
if (cstr) {
|
||||
while (*end) {
|
||||
++end;
|
||||
}
|
||||
}
|
||||
return end - cstr;
|
||||
}
|
||||
|
||||
|
||||
@ -454,6 +454,13 @@ f64 sys_timestamp_seconds(sys_timestamp_t ts);
|
||||
|
||||
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
|
||||
* ========================== */
|
||||
|
||||
@ -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
|
||||
* ========================== */
|
||||
|
||||
15
src/user.c
15
src/user.c
@ -107,7 +107,8 @@ GLOBAL READONLY enum user_bind_kind g_binds[SYS_BTN_COUNT] = {
|
||||
[SYS_BTN_F11] = USER_BIND_KIND_FULLSCREEN,
|
||||
[SYS_BTN_MWHEELUP] = USER_BIND_KIND_ZOOM_IN,
|
||||
[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;
|
||||
}
|
||||
}
|
||||
/* 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);
|
||||
}
|
||||
}
|
||||
|
||||
/* ========================== *
|
||||
|
||||
@ -28,6 +28,7 @@ enum user_bind_kind {
|
||||
USER_BIND_KIND_ZOOM_IN,
|
||||
USER_BIND_KIND_ZOOM_OUT,
|
||||
USER_BIND_KIND_PAN,
|
||||
USER_BIND_KIND_CTRL_TEST,
|
||||
|
||||
USER_BIND_KIND_COUNT
|
||||
};
|
||||
|
||||
Loading…
Reference in New Issue
Block a user