diff --git a/menu/drivers/zr.c b/menu/drivers/zr.c index 0c54d0edd1..cc6724be17 100644 --- a/menu/drivers/zr.c +++ b/menu/drivers/zr.c @@ -88,24 +88,24 @@ static void zrmenu_main(zrmenu_handle_t *zr) { struct zr_context *ctx = &zr->ctx; - if (zr->window_enabled[ZRMENU_WND_MAIN]) + if (zr->window[ZRMENU_WND_MAIN].open) zrmenu_wnd_main(ctx, zr); - if (zr->window_enabled[ZRMENU_WND_CONTROL]) + if (zr->window[ZRMENU_WND_CONTROL].open) zrmenu_wnd_control(ctx, zr); - if (zr->window_enabled[ZRMENU_WND_SHADER_PARAMETERS]) + if (zr->window[ZRMENU_WND_SHADER_PARAMETERS].open) zrmenu_wnd_shader_parameters(ctx, zr); - if (zr->window_enabled[ZRMENU_WND_TEST]) + if (zr->window[ZRMENU_WND_TEST].open) zrmenu_wnd_test(ctx, zr); - if (zr->window_enabled[ZRMENU_WND_WIZARD]) + if (zr->window[ZRMENU_WND_WIZARD].open) zrmenu_wnd_wizard(ctx, zr); - zr->window_enabled[ZRMENU_WND_CONTROL] = !zr_window_is_closed(ctx, "Control"); - zr->window_enabled[ZRMENU_WND_SHADER_PARAMETERS] = !zr_window_is_closed(ctx, "Shader Parameters"); - zr->window_enabled[ZRMENU_WND_TEST] = !zr_window_is_closed(ctx, "Test"); - zr->window_enabled[ZRMENU_WND_WIZARD] = !zr_window_is_closed(ctx, "Setup Wizard"); + zr->window[ZRMENU_WND_CONTROL].open = !zr_window_is_closed(ctx, "Control"); + zr->window[ZRMENU_WND_SHADER_PARAMETERS].open = !zr_window_is_closed(ctx, "Shader Parameters"); + zr->window[ZRMENU_WND_TEST].open = !zr_window_is_closed(ctx, "Test"); + zr->window[ZRMENU_WND_WIZARD].open = !zr_window_is_closed(ctx, "Setup Wizard"); if(zr_window_is_closed(ctx, "Setup Wizard")) - zr->window_enabled[ZRMENU_WND_MAIN] = true; + zr->window[ZRMENU_WND_MAIN].open = true; zr_buffer_info(&zr->status, &zr->ctx.memory); } @@ -567,11 +567,11 @@ static void zrmenu_frame(void *data) zrmenu_input_mouse_button(&zr->ctx); zrmenu_input_keyboard(&zr->ctx); - if (width != zr->width || height != zr->height) + if (width != zr->size.x || height != zr->size.y) { - zr->width = width; - zr->height = height; - zr->resize = true; + zr->size.x = width; + zr->size.y = height; + zr->size_changed = true; } zr_input_end(&zr->ctx); @@ -655,7 +655,7 @@ static void *zrmenu_init(void **userdata) "zahnrad", sizeof(zr->assets_directory)); zrmenu_init_device(zr); - zr->window_enabled[ZRMENU_WND_WIZARD] = true; + zr->window[ZRMENU_WND_WIZARD].open = true; return menu; error: diff --git a/menu/drivers/zr_common.c b/menu/drivers/zr_common.c index 14b45f73ff..7dd4e492d4 100644 --- a/menu/drivers/zr_common.c +++ b/menu/drivers/zr_common.c @@ -347,7 +347,7 @@ void zrmenu_wnd_main(struct zr_context *ctx, zrmenu_handle_t *zr) settings_t *settings = config_get_ptr(); struct zr_panel layout; - if (zr_begin(ctx, &layout, "Main", zr_rect(-1, -1, 120, zr->height + 1), + if (zr_begin(ctx, &layout, "Main", zr_rect(-1, -1, 120, zr->size.x + 1), ZR_WINDOW_NO_SCROLLBAR)) { struct zr_panel menu; @@ -390,29 +390,29 @@ void zrmenu_wnd_main(struct zr_context *ctx, zrmenu_handle_t *zr) if (zr_menu_item(ctx, ZR_TEXT_LEFT, "Control")) { zr_window_close(ctx, "Control"); - zr->window_enabled[ZRMENU_WND_CONTROL] = - !zr->window_enabled[ZRMENU_WND_CONTROL]; + zr->window[ZRMENU_WND_CONTROL].open = + !zr->window[ZRMENU_WND_CONTROL].open; } if (zr_menu_item(ctx, ZR_TEXT_LEFT, "Shader Parameters")) { zr_window_close(ctx, "Shader Parameters"); - zr->window_enabled[ZRMENU_WND_SHADER_PARAMETERS] = - !zr->window_enabled[ZRMENU_WND_SHADER_PARAMETERS]; + zr->window[ZRMENU_WND_SHADER_PARAMETERS].open = + !zr->window[ZRMENU_WND_SHADER_PARAMETERS].open; } if (zr_menu_item(ctx, ZR_TEXT_LEFT, "Test Window")) { zr_window_close(ctx, "Test"); - zr->window_enabled[ZRMENU_WND_TEST] = - !zr->window_enabled[ZRMENU_WND_TEST]; + zr->window[ZRMENU_WND_TEST].open = + !zr->window[ZRMENU_WND_TEST].open; } if (zr_menu_item(ctx, ZR_TEXT_LEFT, "Wizard")) { zr_window_close(ctx, "Test"); - zr->window_enabled[ZRMENU_WND_WIZARD] = - !zr->window_enabled[ZRMENU_WND_WIZARD]; + zr->window[ZRMENU_WND_WIZARD].open = + !zr->window[ZRMENU_WND_WIZARD].open; } zr_menu_end(ctx); @@ -422,8 +422,8 @@ void zrmenu_wnd_main(struct zr_context *ctx, zrmenu_handle_t *zr) } - if (zr->resize) - zr_window_set_size(ctx, zr_vec2(zr_window_get_size(ctx).x, zr->height)); + if (zr->size_changed) + zr_window_set_size(ctx, zr_vec2(zr_window_get_size(ctx).x, zr->size.y)); zr_end(ctx); } @@ -437,8 +437,8 @@ void zrmenu_wnd_wizard(struct zr_context *ctx, zrmenu_handle_t *zr) settings_t *settings = config_get_ptr(); struct zr_panel layout; - if (zr_begin(ctx, &layout, "Setup Wizard", zr_rect(zr->width/2 -width/2, - zr->height/2 - height/2, width, height), + if (zr_begin(ctx, &layout, "Setup Wizard", zr_rect(zr->size.x/2 -width/2, + zr->size.y/2 - height/2, width, height), ZR_WINDOW_CLOSABLE|ZR_WINDOW_MINIMIZABLE|ZR_WINDOW_MOVABLE| ZR_WINDOW_BORDER)) { diff --git a/menu/drivers/zr_common.h b/menu/drivers/zr_common.h index 06e29cedf9..14628c4ac9 100644 --- a/menu/drivers/zr_common.h +++ b/menu/drivers/zr_common.h @@ -47,20 +47,31 @@ struct icons { struct zr_image speaker; }; +struct window { + bool open; + struct zr_vec2 position; + struct zr_vec2 size; +}; + typedef struct zrmenu_handle { - char box_message[PATH_MAX_LENGTH]; - char assets_directory[PATH_MAX_LENGTH]; - bool window_enabled[5]; - bool resize; - unsigned width; - unsigned height; + /* zahnrad mandatory */ void *memory; struct zr_context ctx; struct zr_memory_status status; - enum zrmenu_theme theme; + /* window control variables */ + struct zr_vec2 size; + bool size_changed; + struct window window[5]; + + /* menu driver variables */ + char box_message[PATH_MAX_LENGTH]; + + /* image & theme related variables */ + char assets_directory[PATH_MAX_LENGTH]; struct icons icons; + enum zrmenu_theme theme; struct @@ -74,7 +85,6 @@ typedef struct zrmenu_handle void zrmenu_set_style(struct zr_context *ctx, enum zrmenu_theme theme); - void zrmenu_wnd_wizard(struct zr_context *ctx, zrmenu_handle_t *zr); void zrmenu_wnd_shader_parameters(struct zr_context *ctx, zrmenu_handle_t *zr); void zrmenu_wnd_control(struct zr_context *ctx, zrmenu_handle_t *zr);