Implement GFX_CTL_GET_METRICS

This commit is contained in:
twinaphex 2016-02-13 22:14:33 +01:00
parent ce41c5bbca
commit 3140e5f980
5 changed files with 34 additions and 28 deletions

View File

@ -102,25 +102,6 @@ bool gfx_ctx_set_video_mode(
video_context_data, width, height, fullscreen); 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, bool gfx_ctx_image_buffer_write(const void *frame, unsigned width,
unsigned height, unsigned pitch, bool rgb32, unsigned height, unsigned pitch, bool rgb32,
unsigned index, void **image_handle) 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); proc->addr = current_video_context->get_proc_address(proc->sym);
} }
break; 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: case GFX_CTL_NONE:
default: default:
break; break;

View File

@ -74,7 +74,8 @@ enum gfx_ctx_ctl_state
GFX_CTL_GET_VIDEO_OUTPUT_SIZE, GFX_CTL_GET_VIDEO_OUTPUT_SIZE,
GFX_CTL_SWAP_INTERVAL, GFX_CTL_SWAP_INTERVAL,
GFX_CTL_PROC_ADDRESS_GET, GFX_CTL_PROC_ADDRESS_GET,
GFX_CTL_TRANSLATE_ASPECT GFX_CTL_TRANSLATE_ASPECT,
GFX_CTL_GET_METRICS
}; };
typedef void (*gfx_ctx_proc_t)(void); 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, 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); 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 gfx_ctx_set_video_mode(unsigned width, unsigned height,
bool fullscreen); bool fullscreen);

View File

@ -406,15 +406,19 @@ bool menu_display_ctl(enum menu_display_ctl_state state, void *data)
break; break;
case MENU_DISPLAY_CTL_GET_DPI: case MENU_DISPLAY_CTL_GET_DPI:
{ {
gfx_ctx_metrics_t metrics;
float *dpi = (float*)data; float *dpi = (float*)data;
*dpi = menu_dpi_override_value; *dpi = menu_dpi_override_value;
if (!settings) if (!settings)
return true; return true;
metrics.type = DISPLAY_METRIC_DPI;
metrics.value = dpi;
if (settings->menu.dpi.override_enable) if (settings->menu.dpi.override_enable)
*dpi = settings->menu.dpi.override_value; *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; *dpi = menu_dpi_override_value;
} }
break; break;

View File

@ -605,8 +605,13 @@ static int menu_displaylist_parse_system_info(menu_displaylist_info_t *info)
MENU_SETTINGS_CORE_INFO_NONE, 0, 0); MENU_SETTINGS_CORE_INFO_NONE, 0, 0);
{ {
gfx_ctx_metrics_t metrics;
float val = 0.0f; 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", snprintf(tmp, sizeof(tmp), "%s: %.2f",
menu_hash_to_str(MENU_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_MM_WIDTH), val); 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); 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", snprintf(tmp, sizeof(tmp), "%s: %.2f",
menu_hash_to_str(MENU_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_MM_WIDTH), val); 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); 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", snprintf(tmp, sizeof(tmp), "%s: %.2f",
menu_hash_to_str(MENU_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_DPI), val); menu_hash_to_str(MENU_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_DPI), val);

View File

@ -1061,11 +1061,15 @@ static int menu_input_pointer_post_iterate(menu_file_list_cbs_t *cbs,
if (menu_input->pointer.pressed[0]) 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_x = menu_input_pointer_state(MENU_POINTER_X_AXIS);
int16_t pointer_y = menu_input_pointer_state(MENU_POINTER_Y_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]) if (!menu_input->pointer.oldpressed[0])
{ {