From 3140e5f980b788f17c44f69066f8e0814e40f1d6 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 13 Feb 2016 22:14:33 +0100 Subject: [PATCH] Implement GFX_CTL_GET_METRICS --- gfx/video_context_driver.c | 28 +++++++++------------------- gfx/video_context_driver.h | 5 ++--- menu/menu_display.c | 6 +++++- menu/menu_displaylist.c | 15 ++++++++++++--- menu/menu_input.c | 8 ++++++-- 5 files changed, 34 insertions(+), 28 deletions(-) diff --git a/gfx/video_context_driver.c b/gfx/video_context_driver.c index f7d1659359..03f7653c4c 100644 --- a/gfx/video_context_driver.c +++ b/gfx/video_context_driver.c @@ -102,25 +102,6 @@ bool gfx_ctx_set_video_mode( video_context_data, width, height, fullscreen); } -void gfx_ctx_translate_aspect(float *aspect, - unsigned width, unsigned height) -{ - if (!current_video_context || !current_video_context->translate_aspect) - return; - - *aspect = current_video_context->translate_aspect( - video_context_data, width, height); -} - -bool gfx_ctx_get_metrics(enum display_metric_types type, float *value) -{ - if (!current_video_context || !current_video_context->get_metrics) - return false; - return current_video_context->get_metrics(video_context_data, type, - value); -} - - bool gfx_ctx_image_buffer_write(const void *frame, unsigned width, unsigned height, unsigned pitch, bool rgb32, unsigned index, void **image_handle) @@ -439,6 +420,15 @@ bool gfx_ctx_ctl(enum gfx_ctx_ctl_state state, void *data) proc->addr = current_video_context->get_proc_address(proc->sym); } break; + case GFX_CTL_GET_METRICS: + { + gfx_ctx_metrics_t *metrics = (gfx_ctx_metrics_t*)data; + if (!current_video_context || !current_video_context->get_metrics) + return false; + return current_video_context->get_metrics(video_context_data, + metrics->type, + metrics->value); + } case GFX_CTL_NONE: default: break; diff --git a/gfx/video_context_driver.h b/gfx/video_context_driver.h index b4e6dfe57a..2648636611 100644 --- a/gfx/video_context_driver.h +++ b/gfx/video_context_driver.h @@ -74,7 +74,8 @@ enum gfx_ctx_ctl_state GFX_CTL_GET_VIDEO_OUTPUT_SIZE, GFX_CTL_SWAP_INTERVAL, GFX_CTL_PROC_ADDRESS_GET, - GFX_CTL_TRANSLATE_ASPECT + GFX_CTL_TRANSLATE_ASPECT, + GFX_CTL_GET_METRICS }; typedef void (*gfx_ctx_proc_t)(void); @@ -254,8 +255,6 @@ extern const gfx_ctx_driver_t gfx_ctx_null; const gfx_ctx_driver_t *gfx_ctx_init_first(void *data, const char *ident, enum gfx_ctx_api api, unsigned major, unsigned minor, bool hw_render_ctx); -bool gfx_ctx_get_metrics(enum display_metric_types type, float *value); - bool gfx_ctx_set_video_mode(unsigned width, unsigned height, bool fullscreen); diff --git a/menu/menu_display.c b/menu/menu_display.c index 0f7dba1ce1..f6228eee7d 100644 --- a/menu/menu_display.c +++ b/menu/menu_display.c @@ -406,15 +406,19 @@ bool menu_display_ctl(enum menu_display_ctl_state state, void *data) break; case MENU_DISPLAY_CTL_GET_DPI: { + gfx_ctx_metrics_t metrics; float *dpi = (float*)data; *dpi = menu_dpi_override_value; if (!settings) return true; + metrics.type = DISPLAY_METRIC_DPI; + metrics.value = dpi; + if (settings->menu.dpi.override_enable) *dpi = settings->menu.dpi.override_value; - else if (!gfx_ctx_get_metrics(DISPLAY_METRIC_DPI, dpi) || !*dpi) + else if (!gfx_ctx_ctl(GFX_CTL_GET_METRICS, &metrics) || !*dpi) *dpi = menu_dpi_override_value; } break; diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 7fbe06d680..256a89bb04 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -605,8 +605,13 @@ static int menu_displaylist_parse_system_info(menu_displaylist_info_t *info) MENU_SETTINGS_CORE_INFO_NONE, 0, 0); { + gfx_ctx_metrics_t metrics; float val = 0.0f; - if (gfx_ctx_get_metrics(DISPLAY_METRIC_MM_WIDTH, &val)) + + metrics.type = DISPLAY_METRIC_MM_WIDTH; + metrics.value = &val; + + if (gfx_ctx_ctl(GFX_CTL_GET_METRICS, &metrics)) { snprintf(tmp, sizeof(tmp), "%s: %.2f", menu_hash_to_str(MENU_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_MM_WIDTH), val); @@ -614,7 +619,9 @@ static int menu_displaylist_parse_system_info(menu_displaylist_info_t *info) MENU_SETTINGS_CORE_INFO_NONE, 0, 0); } - if (gfx_ctx_get_metrics(DISPLAY_METRIC_MM_HEIGHT, &val)) + metrics.type = DISPLAY_METRIC_MM_HEIGHT; + + if (gfx_ctx_ctl(GFX_CTL_GET_METRICS, &metrics)) { snprintf(tmp, sizeof(tmp), "%s: %.2f", menu_hash_to_str(MENU_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_MM_WIDTH), val); @@ -622,7 +629,9 @@ static int menu_displaylist_parse_system_info(menu_displaylist_info_t *info) MENU_SETTINGS_CORE_INFO_NONE, 0, 0); } - if (gfx_ctx_get_metrics(DISPLAY_METRIC_DPI, &val)) + metrics.type = DISPLAY_METRIC_DPI; + + if (gfx_ctx_ctl(GFX_CTL_GET_METRICS, &metrics)) { snprintf(tmp, sizeof(tmp), "%s: %.2f", menu_hash_to_str(MENU_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_DPI), val); diff --git a/menu/menu_input.c b/menu/menu_input.c index bb3529239e..ef96ca9721 100644 --- a/menu/menu_input.c +++ b/menu/menu_input.c @@ -1061,11 +1061,15 @@ static int menu_input_pointer_post_iterate(menu_file_list_cbs_t *cbs, if (menu_input->pointer.pressed[0]) { + gfx_ctx_metrics_t metrics; + float dpi; int16_t pointer_x = menu_input_pointer_state(MENU_POINTER_X_AXIS); int16_t pointer_y = menu_input_pointer_state(MENU_POINTER_Y_AXIS); - float dpi; - gfx_ctx_get_metrics(DISPLAY_METRIC_DPI, &dpi); + metrics.type = DISPLAY_METRIC_DPI; + metrics.value = &dpi; + + gfx_ctx_ctl(GFX_CTL_GET_METRICS, &metrics); if (!menu_input->pointer.oldpressed[0]) {