diff --git a/examples/atlas/main.c b/examples/atlas/main.c index 14e121d..44953c9 100644 --- a/examples/atlas/main.c +++ b/examples/atlas/main.c @@ -51,8 +51,8 @@ int main() str8 path1 = mp_app_get_resource_path(mem_scratch(), "../resources/triceratops.png"); str8 path2 = mp_app_get_resource_path(mem_scratch(), "../resources/Top512.png"); - mg_image_region image1 = mg_image_atlas_alloc_from_file(atlas, atlasImage, path1, true); - mg_image_region image2 = mg_image_atlas_alloc_from_file(atlas, atlasImage, path2, true); + mg_image_region image1 = mg_image_atlas_alloc_from_file(atlas, atlasImage, path1, false); + mg_image_region image2 = mg_image_atlas_alloc_from_file(atlas, atlasImage, path2, false); // start app mp_window_bring_to_front(window); diff --git a/examples/canvas/main.c b/examples/canvas/main.c index 1bfc3a9..6106c21 100644 --- a/examples/canvas/main.c +++ b/examples/canvas/main.c @@ -123,14 +123,14 @@ int main() { if(y + 200 < contentRect.h) { - y+=5; + y-=5; } } else if(event.key.code == MP_KEY_DOWN) { if(y - 200 > 0) { - y-=5; + y+=5; } } //*/ @@ -180,19 +180,19 @@ int main() mg_set_color_rgba(0, 0, 0, 1); mg_set_width(20); - mg_move_to(x-100, y-100); - mg_cubic_to(x-50, y-150+frown, x+50, y-150+frown, x+100, y-100); + mg_move_to(x-100, y+100); + mg_cubic_to(x-50, y+150+frown, x+50, y+150+frown, x+100, y+100); mg_stroke(); // eyes - mg_ellipse_fill(x-70, y+50, 30, 50); - mg_ellipse_fill(x+70, y+50, 30, 50); + mg_ellipse_fill(x-70, y-50, 30, 50); + mg_ellipse_fill(x+70, y-50, 30, 50); // text mg_set_color_rgba(0, 0, 1, 1); mg_set_font(font); mg_set_font_size(12); - mg_move_to(50, 50); + mg_move_to(50, 600-50); str8 text = str8_pushf(mem_scratch(), "Milepost vector graphics test program (frame time = %fs, fps = %f)...", diff --git a/examples/image/main.c b/examples/image/main.c index 329e09b..062b3e5 100644 --- a/examples/image/main.c +++ b/examples/image/main.c @@ -43,11 +43,11 @@ int main() //NOTE: create image str8 imagePath = mp_app_get_resource_path(mem_scratch(), "../resources/triceratops.png"); - mg_image image = mg_image_create_from_file(imagePath, true); + mg_image image = mg_image_create_from_file(imagePath, false); vec2 imageSize = mg_image_size(image); str8 imagePath2 = mp_app_get_resource_path(mem_scratch(), "../resources/Top512.png"); - mg_image image2 = mg_image_create_from_file(imagePath2, true); + mg_image image2 = mg_image_create_from_file(imagePath2, false); vec2 imageSize2 = mg_image_size(image2); // start app diff --git a/examples/perf_text/main.c b/examples/perf_text/main.c index 9fb886c..3e7277e 100644 --- a/examples/perf_text/main.c +++ b/examples/perf_text/main.c @@ -140,11 +140,8 @@ int main() f32 zoom = 1; f32 startX = 10; - f32 startY = (contentRect.h - lineHeight - 10); -/* - f32 startX = -100; - f32 startY = -100; -*/ + f32 startY = 10 + lineHeight; + while(!mp_should_quit()) { f64 startFrameTime = mp_get_time(MP_CLOCK_MONOTONIC); @@ -167,7 +164,7 @@ int main() if(event.key.action == MP_KEY_PRESS) { tracked = true; - vec2 mousePos = mp_input_mouse_position(); + vec2 mousePos = mp_mouse_position(); trackPoint.x = mousePos.x/zoom - startX; trackPoint.y = mousePos.y/zoom - startY; } @@ -180,7 +177,7 @@ int main() case MP_EVENT_MOUSE_WHEEL: { - vec2 mousePos = mp_input_mouse_position(); + vec2 mousePos = mp_mouse_position(); f32 trackX = mousePos.x/zoom - startX; f32 trackY = mousePos.y/zoom - startY; @@ -198,7 +195,7 @@ int main() if(tracked) { - vec2 mousePos = mp_input_mouse_position(); + vec2 mousePos = mp_mouse_position(); startX = mousePos.x/zoom - trackPoint.x; startY = mousePos.y/zoom - trackPoint.y; } @@ -249,7 +246,7 @@ int main() mg_glyph_outlines((str32){subIndex, glyphs}); mg_fill(); - textY -= lineHeight; + textY += lineHeight; mg_move_to(textX, textY); startIndex++; @@ -261,7 +258,7 @@ int main() mg_set_color_rgba(0, 0, 1, 1); mg_set_font(font); mg_set_font_size(14); - mg_move_to(10, 10 + lineHeight); + mg_move_to(10, contentRect.h - 10 - lineHeight); str8 text = str8_pushf(mem_scratch(), "Test program: %i glyphs, frame time = %fs, fps = %f", diff --git a/examples/ui_style_test/main.c b/examples/ui_style_test/main.c index 00a2cb1..b18eb56 100644 --- a/examples/ui_style_test/main.c +++ b/examples/ui_style_test/main.c @@ -258,7 +258,7 @@ int main() ui_flags defaultFlags = UI_FLAG_DRAW_BORDER; ui_box* root = 0; - ui_frame(800, 610) + ui_frame() { root = ui_box_top(); diff --git a/src/graphics.c b/src/graphics.c index 42c0ffd..3c28981 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -3348,7 +3348,7 @@ mp_rect mg_glyph_outlines_from_font_data(mg_font_data* fontData, str32 glyphIndi f32 xOffset = canvas->subPathLastPoint.x; f32 yOffset = canvas->subPathLastPoint.y; - f32 flip = canvas->textFlip ? -1 : 1; + f32 flip = canvas->textFlip ? 1 : -1; if(!glyphIndex || glyphIndex >= fontData->glyphCount) { diff --git a/src/mtl_shader.metal b/src/mtl_shader.metal index fdcbe0f..758cf7b 100644 --- a/src/mtl_shader.metal +++ b/src/mtl_shader.metal @@ -16,7 +16,7 @@ vertex vs_out VertexShader(ushort vid [[vertex_id]]) { vs_out out; out.uv = float2((vid << 1) & 2, vid & 2); - out.pos = float4(out.uv * float2(2, 2) + float2(-1, -1), 0, 1); + out.pos = float4(out.uv * float2(2, -2) + float2(-1, 1), 0, 1); return(out); } diff --git a/src/osx_app.m b/src/osx_app.m index 3d9d3ea..76bfe7a 100644 --- a/src/osx_app.m +++ b/src/osx_app.m @@ -871,12 +871,12 @@ static void mp_process_mouse_button(NSEvent* nsEvent, mp_window_data* window, mp event.type = MP_EVENT_MOUSE_MOVE; event.window = mp_window_handle_from_ptr(window); event.move.x = p.x; - event.move.y = p.y; + event.move.y = frame.size.height - p.y; event.move.deltaX = [nsEvent deltaX]; - event.move.deltaY = -[nsEvent deltaY]; + event.move.deltaY = [nsEvent deltaY]; event.move.mods = mp_convert_osx_mods([nsEvent modifierFlags]); - mp_update_mouse_move(p.x, p.y, event.move.deltaX, event.move.deltaY); + mp_update_mouse_move(event.move.x, event.move.y, event.move.deltaX, event.move.deltaY); mp_queue_event(&event); } @@ -891,7 +891,7 @@ static void mp_process_mouse_button(NSEvent* nsEvent, mp_window_data* window, mp event.move.x = 0; event.move.y = 0; event.move.deltaX = [nsEvent scrollingDeltaX]*factor; - event.move.deltaY = [nsEvent scrollingDeltaY]*factor; + event.move.deltaY = -[nsEvent scrollingDeltaY]*factor; event.move.mods = mp_convert_osx_mods([nsEvent modifierFlags]); mp_update_mouse_wheel(event.move.deltaX, event.move.deltaY); diff --git a/src/ui.c b/src/ui.c index a653871..16f0c21 100644 --- a/src/ui.c +++ b/src/ui.c @@ -66,9 +66,6 @@ typedef struct ui_context { bool init; - f32 width; - f32 height; - u64 frameCounter; f64 frameTime; f64 lastFrameDuration; @@ -384,10 +381,7 @@ bool ui_box_hovering(ui_box* box, vec2 p) vec2 ui_mouse_position(void) { - ui_context* ui = ui_get_context(); - vec2 mousePos = mp_mouse_position(); - mousePos.y = ui->height - mousePos.y; return(mousePos); } @@ -395,7 +389,6 @@ vec2 ui_mouse_delta(void) { ui_context* ui = ui_get_context(); vec2 delta = mp_mouse_delta(); - delta.y *= -1.; return(delta); } @@ -403,7 +396,6 @@ vec2 ui_mouse_wheel(void) { ui_context* ui = ui_get_context(); vec2 delta = mp_mouse_wheel(); - delta.y *= -1.; return(delta); } @@ -1278,33 +1270,24 @@ void ui_draw() ui_context* ui = ui_get_context(); //NOTE: draw - mg_mat2x3 transform = {1, 0, 0, - 0, -1, ui->height}; - bool oldTextFlip = mg_get_text_flip(); - mg_set_text_flip(true); + mg_set_text_flip(false); - mg_matrix_push(transform); ui_draw_box(ui->root); - mg_matrix_pop(); mg_set_text_flip(oldTextFlip); - - //TODO: restore flip?? } //----------------------------------------------------------------------------- // frame begin/end //----------------------------------------------------------------------------- -void ui_begin_frame(u32 width, u32 height) +void ui_begin_frame() { ui_context* ui = ui_get_context(); mem_arena_clear(&ui->frameArena); - ui->width = width; - ui->height = height; ui->frameCounter++; f64 time = mp_get_time(MP_CLOCK_MONOTONIC); ui->lastFrameDuration = time - ui->frameTime; @@ -1314,8 +1297,8 @@ void ui_begin_frame(u32 width, u32 height) ui->z = 0; ui_style defaultStyle = {0}; - defaultStyle.size.s[UI_AXIS_X] = (ui_size){UI_SIZE_PIXELS, width, 0}; - defaultStyle.size.s[UI_AXIS_Y] = (ui_size){UI_SIZE_PIXELS, height, 0}; + defaultStyle.size.s[UI_AXIS_X] = (ui_size){UI_SIZE_CHILDREN}; + defaultStyle.size.s[UI_AXIS_Y] = (ui_size){UI_SIZE_CHILDREN}; ui->root = ui_box_begin("_root_", 0); *ui->root->targetStyle = defaultStyle; diff --git a/src/ui.h b/src/ui.h index 414d97b..6bf0414 100644 --- a/src/ui.h +++ b/src/ui.h @@ -316,11 +316,11 @@ void ui_init(void); ui_context* ui_get_context(void); void ui_set_context(ui_context* context); -void ui_begin_frame(u32 width, u32 height); +void ui_begin_frame(void); void ui_end_frame(void); void ui_draw(void); -#define ui_frame(width, height) defer_loop(ui_begin_frame(width, height), ui_end_frame()) +#define ui_frame() defer_loop(ui_begin_frame(), ui_end_frame()) //------------------------------------------------------------------------------------- // Box keys diff --git a/src/util/lists.h b/src/util/lists.h index 70ef937..ca230bf 100644 --- a/src/util/lists.h +++ b/src/util/lists.h @@ -19,17 +19,11 @@ extern "C" { #define OFFSET_OF_CONTAINER(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) #ifdef __cplusplus -#define CONTAINER_OF(ptr, type, member) ({ \ + #define CONTAINER_OF(ptr, type, member) ({ \ const decltype( ((type *)0)->member ) *__mptr = (ptr); \ (type *)( (char *)__mptr - OFFSET_OF_CONTAINER(type,member) );}) #else -/* -#define CONTAINER_OF(ptr, type, member) ({ \ - const char *__mptr = (char*)(ptr); \ - (type *)(__mptr - OFFSET_OF_CONTAINER(type,member) );}) -*/ -#define CONTAINER_OF(ptr, type, member) (type *)((char*)(ptr) - OFFSET_OF_CONTAINER(type,member)) - + #define CONTAINER_OF(ptr, type, member) (type *)((char*)(ptr) - OFFSET_OF_CONTAINER(type,member)) #endif //------------------------------------------------------------------------- diff --git a/src/util/strings.h b/src/util/strings.h index 91bd963..42a4730 100644 --- a/src/util/strings.h +++ b/src/util/strings.h @@ -9,6 +9,7 @@ #ifndef __STRINGS_H_ #define __STRINGS_H_ +#include #include"typedefs.h" #include"lists.h" #include"memory.h"