[util]
- shorten str8_lit macro to STR8 - use strlen() in STR8 and remove str8_from_cstring(). Usage with string literal seem to always be optimized by compile-time constant, so there's little need for a confusing macro that only works with literals and breaks with pointers. - replaced str8_unbox() with str8_lp/str8_ip
This commit is contained in:
parent
f07f56948d
commit
bfc19665ce
|
@ -116,9 +116,9 @@ int main()
|
||||||
|
|
||||||
f32 lineHeight = fontScale*(extents.ascent + extents.descent + extents.leading);
|
f32 lineHeight = fontScale*(extents.ascent + extents.descent + extents.leading);
|
||||||
|
|
||||||
int codePointCount = utf8_codepoint_count_for_string(str8_from_cstring((char*)TEST_STRING));
|
int codePointCount = utf8_codepoint_count_for_string(STR8((char*)TEST_STRING));
|
||||||
u32* codePoints = malloc_array(utf32, codePointCount);
|
u32* codePoints = malloc_array(utf32, codePointCount);
|
||||||
utf8_to_codepoints(codePointCount, codePoints, str8_from_cstring((char*)TEST_STRING));
|
utf8_to_codepoints(codePointCount, codePoints, STR8((char*)TEST_STRING));
|
||||||
|
|
||||||
u32 glyphCount = 0;
|
u32 glyphCount = 0;
|
||||||
for(int i=0; i<codePointCount; i++)
|
for(int i=0; i<codePointCount; i++)
|
||||||
|
|
|
@ -31,7 +31,7 @@ int main()
|
||||||
mg_surface surface = mg_surface_create_for_window(window, MG_BACKEND_METAL);
|
mg_surface surface = mg_surface_create_for_window(window, MG_BACKEND_METAL);
|
||||||
//*/
|
//*/
|
||||||
mg_canvas canvas = mg_canvas_create(surface, (mp_rect){0, 0, 800, 600});
|
mg_canvas canvas = mg_canvas_create(surface, (mp_rect){0, 0, 800, 600});
|
||||||
mg_image image = mg_image_create_from_file(canvas, str8_lit("Top512.png"), true);
|
mg_image image = mg_image_create_from_file(canvas, STR8("Top512.png"), true);
|
||||||
|
|
||||||
u8 colors[64];
|
u8 colors[64];
|
||||||
for(int i=0; i<64; i+=4)
|
for(int i=0; i<64; i+=4)
|
||||||
|
@ -43,7 +43,7 @@ int main()
|
||||||
}
|
}
|
||||||
mg_image image3 = mg_image_create_from_rgba8(canvas, 4, 4, colors);
|
mg_image image3 = mg_image_create_from_rgba8(canvas, 4, 4, colors);
|
||||||
|
|
||||||
mg_image image2 = mg_image_create_from_file(canvas, str8_lit("triceratops.png"), true);
|
mg_image image2 = mg_image_create_from_file(canvas, STR8("triceratops.png"), true);
|
||||||
|
|
||||||
//NOTE(martin): create font
|
//NOTE(martin): create font
|
||||||
char* fontPath = 0;
|
char* fontPath = 0;
|
||||||
|
@ -132,7 +132,7 @@ int main()
|
||||||
mg_set_font(canvas, font);
|
mg_set_font(canvas, font);
|
||||||
mg_set_font_size(canvas, 32);
|
mg_set_font_size(canvas, 32);
|
||||||
mg_move_to(canvas, 500, 500);
|
mg_move_to(canvas, 500, 500);
|
||||||
mg_text_outlines(canvas, str8_lit("Hello, world!"));
|
mg_text_outlines(canvas, STR8("Hello, world!"));
|
||||||
mg_set_color_rgba(canvas, 0, 0, 0, 1);
|
mg_set_color_rgba(canvas, 0, 0, 0, 1);
|
||||||
mg_fill(canvas);
|
mg_fill(canvas);
|
||||||
|
|
||||||
|
|
|
@ -263,7 +263,7 @@ int main()
|
||||||
root = ui_box_top();
|
root = ui_box_top();
|
||||||
|
|
||||||
ui_pattern pattern = {0};
|
ui_pattern pattern = {0};
|
||||||
ui_pattern_push(mem_scratch(), &pattern, (ui_selector){.kind = UI_SEL_TEXT, .text = str8_lit("b")});
|
ui_pattern_push(mem_scratch(), &pattern, (ui_selector){.kind = UI_SEL_TEXT, .text = STR8("b")});
|
||||||
ui_pattern_push(mem_scratch(), &pattern, (ui_selector){.kind = UI_SEL_TAG, .tag = ui_tag_make("foo")});
|
ui_pattern_push(mem_scratch(), &pattern, (ui_selector){.kind = UI_SEL_TAG, .tag = ui_tag_make("foo")});
|
||||||
ui_style_match_before(pattern, &(ui_style){.fontSize = 36}, UI_STYLE_FONT_SIZE);
|
ui_style_match_before(pattern, &(ui_style){.fontSize = 36}, UI_STYLE_FONT_SIZE);
|
||||||
|
|
||||||
|
@ -280,14 +280,14 @@ int main()
|
||||||
|
|
||||||
|
|
||||||
pattern = (ui_pattern){0};
|
pattern = (ui_pattern){0};
|
||||||
ui_pattern_push(mem_scratch(), &pattern, (ui_selector){.kind = UI_SEL_TEXT, .text = str8_lit("c")});
|
ui_pattern_push(mem_scratch(), &pattern, (ui_selector){.kind = UI_SEL_TEXT, .text = STR8("c")});
|
||||||
ui_pattern_push(mem_scratch(), &pattern, (ui_selector){.kind = UI_SEL_TAG, .tag = ui_tag_make("button")});
|
ui_pattern_push(mem_scratch(), &pattern, (ui_selector){.kind = UI_SEL_TAG, .tag = ui_tag_make("button")});
|
||||||
ui_style_match_after(pattern,
|
ui_style_match_after(pattern,
|
||||||
&(ui_style){.bgColor = {1, 0.5, 0.5, 1}},
|
&(ui_style){.bgColor = {1, 0.5, 0.5, 1}},
|
||||||
UI_STYLE_BG_COLOR);
|
UI_STYLE_BG_COLOR);
|
||||||
|
|
||||||
pattern = (ui_pattern){0};
|
pattern = (ui_pattern){0};
|
||||||
ui_pattern_push(mem_scratch(), &pattern, (ui_selector){.kind = UI_SEL_TEXT, .text = str8_lit("c")});
|
ui_pattern_push(mem_scratch(), &pattern, (ui_selector){.kind = UI_SEL_TEXT, .text = STR8("c")});
|
||||||
ui_pattern_push(mem_scratch(), &pattern, (ui_selector){.kind = UI_SEL_TAG, .tag = ui_tag_make("button")});
|
ui_pattern_push(mem_scratch(), &pattern, (ui_selector){.kind = UI_SEL_TAG, .tag = ui_tag_make("button")});
|
||||||
ui_pattern_push(mem_scratch(), &pattern, (ui_selector){.kind = UI_SEL_STATUS, .op = UI_SEL_AND, .status = UI_ACTIVE|UI_HOVER});
|
ui_pattern_push(mem_scratch(), &pattern, (ui_selector){.kind = UI_SEL_STATUS, .op = UI_SEL_AND, .status = UI_ACTIVE|UI_HOVER});
|
||||||
ui_style_match_after(pattern,
|
ui_style_match_after(pattern,
|
||||||
|
@ -297,7 +297,7 @@ int main()
|
||||||
ui_container("a", defaultFlags)
|
ui_container("a", defaultFlags)
|
||||||
{
|
{
|
||||||
ui_pattern pattern = {0};
|
ui_pattern pattern = {0};
|
||||||
ui_pattern_push(mem_scratch(), &pattern, (ui_selector){.kind = UI_SEL_TEXT, .text = str8_lit("b")});
|
ui_pattern_push(mem_scratch(), &pattern, (ui_selector){.kind = UI_SEL_TEXT, .text = STR8("b")});
|
||||||
ui_style_match_before(pattern, &(ui_style){.fontSize = 22}, UI_STYLE_FONT_SIZE);
|
ui_style_match_before(pattern, &(ui_style){.fontSize = 22}, UI_STYLE_FONT_SIZE);
|
||||||
|
|
||||||
ui_container("b", defaultFlags)
|
ui_container("b", defaultFlags)
|
||||||
|
@ -369,7 +369,7 @@ int main()
|
||||||
mg_set_color_rgba(0, 0, 0, 1);
|
mg_set_color_rgba(0, 0, 0, 1);
|
||||||
|
|
||||||
mg_move_to(0, 38);
|
mg_move_to(0, 38);
|
||||||
mg_text_outlines(str8_lit("hello, world"));
|
mg_text_outlines(STR8("hello, world"));
|
||||||
mg_fill();
|
mg_fill();
|
||||||
|
|
||||||
mg_matrix_pop();
|
mg_matrix_pop();
|
||||||
|
|
|
@ -2068,7 +2068,7 @@ str8 mp_app_get_resource_path(mem_arena* arena, const char* name)
|
||||||
str8 dirPath = mp_path_directory(executablePath);
|
str8 dirPath = mp_path_directory(executablePath);
|
||||||
|
|
||||||
str8_list_push(scratch, &list, dirPath);
|
str8_list_push(scratch, &list, dirPath);
|
||||||
str8_list_push(scratch, &list, str8_lit("/"));
|
str8_list_push(scratch, &list, STR8("/"));
|
||||||
str8_list_push(scratch, &list, str8_push_cstring(scratch, name));
|
str8_list_push(scratch, &list, str8_push_cstring(scratch, name));
|
||||||
str8 path = str8_list_join(scratch, list);
|
str8 path = str8_list_join(scratch, list);
|
||||||
char* pathCString = str8_to_cstring(scratch, path);
|
char* pathCString = str8_to_cstring(scratch, path);
|
||||||
|
|
4
src/ui.c
4
src/ui.c
|
@ -1414,7 +1414,7 @@ ui_sig ui_label_str8(str8 label)
|
||||||
|
|
||||||
ui_sig ui_label(const char* label)
|
ui_sig ui_label(const char* label)
|
||||||
{
|
{
|
||||||
return(ui_label_str8(str8_from_cstring((char*)label)));
|
return(ui_label_str8(STR8((char*)label)));
|
||||||
}
|
}
|
||||||
|
|
||||||
ui_sig ui_button_str8(str8 label)
|
ui_sig ui_button_str8(str8 label)
|
||||||
|
@ -1485,7 +1485,7 @@ ui_sig ui_button_str8(str8 label)
|
||||||
|
|
||||||
ui_sig ui_button(const char* label)
|
ui_sig ui_button(const char* label)
|
||||||
{
|
{
|
||||||
return(ui_button_str8(str8_from_cstring((char*)label)));
|
return(ui_button_str8(STR8((char*)label)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
16
src/ui.h
16
src/ui.h
|
@ -332,8 +332,8 @@ ui_box* ui_box_lookup_key(ui_key key);
|
||||||
ui_box* ui_box_lookup_str8(str8 string);
|
ui_box* ui_box_lookup_str8(str8 string);
|
||||||
|
|
||||||
// C-string helper
|
// C-string helper
|
||||||
#define ui_key_make(s) ui_key_make_str8(str8_lit(s))
|
#define ui_key_make(s) ui_key_make_str8(STR8(s))
|
||||||
#define ui_box_lookup(s) ui_box_lookup_str8(str8_lit(s))
|
#define ui_box_lookup(s) ui_box_lookup_str8(STR8(s))
|
||||||
|
|
||||||
//-------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------
|
||||||
// Box hierarchy building
|
// Box hierarchy building
|
||||||
|
@ -351,9 +351,9 @@ ui_box* ui_box_top(void);
|
||||||
void ui_box_set_render_proc(ui_box* box, ui_box_render_proc proc, void* data);
|
void ui_box_set_render_proc(ui_box* box, ui_box_render_proc proc, void* data);
|
||||||
|
|
||||||
// C-string helpers
|
// C-string helpers
|
||||||
#define ui_box_lookup(s) ui_box_lookup_str8(str8_lit(s))
|
#define ui_box_lookup(s) ui_box_lookup_str8(STR8(s))
|
||||||
#define ui_box_make(s, flags) ui_box_make_str8(str8_lit(s), flags)
|
#define ui_box_make(s, flags) ui_box_make_str8(STR8(s), flags)
|
||||||
#define ui_box_begin(s, flags) ui_box_begin_str8(str8_lit(s), flags)
|
#define ui_box_begin(s, flags) ui_box_begin_str8(STR8(s), flags)
|
||||||
|
|
||||||
//-------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------
|
||||||
// Box status and signals
|
// Box status and signals
|
||||||
|
@ -378,9 +378,9 @@ void ui_tag_box_str8(ui_box* box, str8 string);
|
||||||
void ui_tag_next_str8(str8 string);
|
void ui_tag_next_str8(str8 string);
|
||||||
|
|
||||||
// C-string helpers
|
// C-string helpers
|
||||||
#define ui_tag_make(s) ui_tag_make_str8(str8_lit(s))
|
#define ui_tag_make(s) ui_tag_make_str8(STR8(s))
|
||||||
#define ui_tag_box(b, s) ui_tag_box_str8(b, str8_lit(s))
|
#define ui_tag_box(b, s) ui_tag_box_str8(b, STR8(s))
|
||||||
#define ui_tag_next(s) ui_tag_next_str8(str8_lit(s))
|
#define ui_tag_next(s) ui_tag_next_str8(STR8(s))
|
||||||
|
|
||||||
//-------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------
|
||||||
// Styling
|
// Styling
|
||||||
|
|
|
@ -22,18 +22,6 @@ str8 str8_from_buffer(u64 len, char* buffer)
|
||||||
return((str8){.len = len, .ptr = buffer});
|
return((str8){.len = len, .ptr = buffer});
|
||||||
}
|
}
|
||||||
|
|
||||||
str8 str8_from_cstring(char* str)
|
|
||||||
{
|
|
||||||
if(!str)
|
|
||||||
{
|
|
||||||
return((str8){0});
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return(str8_from_buffer(strlen(str), (char*)str));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
str8 str8_slice(str8 s, u64 start, u64 end)
|
str8 str8_slice(str8 s, u64 start, u64 end)
|
||||||
{
|
{
|
||||||
ASSERT(start <= end && start <= s.len && end <= s.len);
|
ASSERT(start <= end && start <= s.len && end <= s.len);
|
||||||
|
@ -63,7 +51,7 @@ str8 str8_push_cstring(mem_arena* arena, const char* str)
|
||||||
|
|
||||||
str8 str8_push_copy(mem_arena* arena, str8 s)
|
str8 str8_push_copy(mem_arena* arena, str8 s)
|
||||||
{
|
{
|
||||||
return(str8_push_buffer(arena, str8_unbox(s)));
|
return(str8_push_buffer(arena, str8_lp(s)));
|
||||||
}
|
}
|
||||||
|
|
||||||
str8 str8_push_slice(mem_arena* arena, str8 s, u64 start, u64 end)
|
str8 str8_push_slice(mem_arena* arena, str8 s, u64 start, u64 end)
|
||||||
|
|
|
@ -26,11 +26,12 @@ typedef struct str8
|
||||||
char* ptr;
|
char* ptr;
|
||||||
} str8;
|
} str8;
|
||||||
|
|
||||||
#define str8_lit(s) ((str8){.len = sizeof(s)-1, .ptr = (char*)(s)})
|
#define STR8(s) ((str8){.len = (s) ? strlen(s) : 0, .ptr = (char*)s})
|
||||||
#define str8_unbox(s) (int)((s).len), ((s).ptr)
|
|
||||||
|
#define str8_lp(s) ((s).len), ((s).ptr)
|
||||||
|
#define str8_ip(s) (int)str8_lp(s)
|
||||||
|
|
||||||
MP_API str8 str8_from_buffer(u64 len, char* buffer);
|
MP_API str8 str8_from_buffer(u64 len, char* buffer);
|
||||||
MP_API str8 str8_from_cstring(char* str);
|
|
||||||
MP_API str8 str8_slice(str8 s, u64 start, u64 end);
|
MP_API str8 str8_slice(str8 s, u64 start, u64 end);
|
||||||
|
|
||||||
MP_API str8 str8_push_buffer(mem_arena* arena, u64 len, char* buffer);
|
MP_API str8 str8_push_buffer(mem_arena* arena, u64 len, char* buffer);
|
||||||
|
|
|
@ -990,12 +990,12 @@ str8 mp_app_get_resource_path(mem_arena* arena, const char* name)
|
||||||
|
|
||||||
_splitpath_s(executablePathCString, driveBuffer, MAX_PATH, dirBuffer, MAX_PATH, 0, 0, 0, 0);
|
_splitpath_s(executablePathCString, driveBuffer, MAX_PATH, dirBuffer, MAX_PATH, 0, 0, 0, 0);
|
||||||
|
|
||||||
str8 drive = str8_from_cstring(driveBuffer);
|
str8 drive = STR8(driveBuffer);
|
||||||
str8 dirPath = str8_from_cstring(dirBuffer);
|
str8 dirPath = STR8(dirBuffer);
|
||||||
|
|
||||||
str8_list_push(scratch, &list, drive);
|
str8_list_push(scratch, &list, drive);
|
||||||
str8_list_push(scratch, &list, dirPath);
|
str8_list_push(scratch, &list, dirPath);
|
||||||
str8_list_push(scratch, &list, str8_lit("\\"));
|
str8_list_push(scratch, &list, STR8("\\"));
|
||||||
str8_list_push(scratch, &list, str8_push_cstring(scratch, name));
|
str8_list_push(scratch, &list, str8_push_cstring(scratch, name));
|
||||||
str8 path = str8_list_join(scratch, list);
|
str8 path = str8_list_join(scratch, list);
|
||||||
char* pathCString = str8_to_cstring(scratch, path);
|
char* pathCString = str8_to_cstring(scratch, path);
|
||||||
|
|
Loading…
Reference in New Issue