diff --git a/gfx/drivers_context/cocoa_gl_ctx.m b/gfx/drivers_context/cocoa_gl_ctx.m index 9fa3db2295..2e57a63a05 100644 --- a/gfx/drivers_context/cocoa_gl_ctx.m +++ b/gfx/drivers_context/cocoa_gl_ctx.m @@ -237,102 +237,6 @@ static void cocoa_gl_gfx_ctx_destroy(void *data) static enum gfx_ctx_api cocoa_gl_gfx_ctx_get_api(void *data) { return cocoagl_api; } -#ifdef OSX -static bool cocoa_gl_gfx_ctx_get_metrics( - void *data, enum display_metric_types type, - float *value) -{ - RAScreen *screen = (BRIDGE RAScreen*)cocoa_screen_get_chosen(); - NSDictionary *desc = [screen deviceDescription]; - CGSize display_physical_size = CGDisplayScreenSize( - [[desc objectForKey:@"NSScreenNumber"] unsignedIntValue]); - - float physical_width = display_physical_size.width; - float physical_height = display_physical_size.height; - - switch (type) - { - case DISPLAY_METRIC_MM_WIDTH: - *value = physical_width; - break; - case DISPLAY_METRIC_MM_HEIGHT: - *value = physical_height; - break; - case DISPLAY_METRIC_DPI: - { - NSSize disp_pixel_size = [[desc objectForKey:NSDeviceSize] sizeValue]; - float dispwidth = disp_pixel_size.width; - float scale = cocoa_screen_get_backing_scale_factor(); - float dpi = (dispwidth / physical_width) * 25.4f * scale; - *value = dpi; - } - break; - case DISPLAY_METRIC_NONE: - default: - *value = 0; - return false; - } - - return true; -} -#else -static bool cocoa_gl_gfx_ctx_get_metrics( - void *data, enum display_metric_types type, - float *value) -{ - RAScreen *screen = (BRIDGE RAScreen*)cocoa_screen_get_chosen(); - float scale = cocoa_screen_get_native_scale(); - CGRect screen_rect = [screen bounds]; - float physical_width = screen_rect.size.width * scale; - float physical_height = screen_rect.size.height * scale; - float dpi = 160 * scale; - NSInteger idiom_type = UI_USER_INTERFACE_IDIOM(); - - switch (idiom_type) - { - case -1: /* UIUserInterfaceIdiomUnspecified */ - /* TODO */ - break; - case UIUserInterfaceIdiomPad: - dpi = 132 * scale; - break; - case UIUserInterfaceIdiomPhone: - { - CGFloat maxSize = fmaxf(physical_width, physical_height); - /* Larger iPhones: iPhone Plus, X, XR, XS, XS Max, 11, 11 Pro Max */ - if (maxSize >= 2208.0) - dpi = 81 * scale; - else - dpi = 163 * scale; - } - break; - case UIUserInterfaceIdiomTV: - case UIUserInterfaceIdiomCarPlay: - /* TODO */ - break; - } - - switch (type) - { - case DISPLAY_METRIC_MM_WIDTH: - *value = physical_width; - break; - case DISPLAY_METRIC_MM_HEIGHT: - *value = physical_height; - break; - case DISPLAY_METRIC_DPI: - *value = dpi; - break; - case DISPLAY_METRIC_NONE: - default: - *value = 0; - return false; - } - - return true; -} -#endif - static bool cocoa_gl_gfx_ctx_suppress_screensaver(void *data, bool enable) { return false; } static void cocoa_gl_gfx_ctx_input_driver(void *data, @@ -854,7 +758,7 @@ const gfx_ctx_driver_t gfx_ctx_cocoagl = { NULL, /* get_video_output_size */ NULL, /* get_video_output_prev */ NULL, /* get_video_output_next */ - cocoa_gl_gfx_ctx_get_metrics, + cocoa_get_metrics, NULL, /* translate_aspect */ #ifdef OSX cocoa_update_title, diff --git a/ui/drivers/cocoa/cocoa_common.h b/ui/drivers/cocoa/cocoa_common.h index 0c6851f659..22659eb0f3 100644 --- a/ui/drivers/cocoa/cocoa_common.h +++ b/ui/drivers/cocoa/cocoa_common.h @@ -120,4 +120,8 @@ void cocoa_update_title(void *data); float cocoa_screen_get_native_scale(void); #endif +bool cocoa_get_metrics( + void *data, enum display_metric_types type, + float *value); + #endif diff --git a/ui/drivers/cocoa/cocoa_common.m b/ui/drivers/cocoa/cocoa_common.m index 0df15f2c67..b4782346b3 100644 --- a/ui/drivers/cocoa/cocoa_common.m +++ b/ui/drivers/cocoa/cocoa_common.m @@ -455,4 +455,98 @@ void cocoa_update_title(void *data) window->set_title((void*)video_driver_display_userdata_get(), title); } } + +bool cocoa_get_metrics( + void *data, enum display_metric_types type, + float *value) +{ + RAScreen *screen = (BRIDGE RAScreen*)cocoa_screen_get_chosen(); + NSDictionary *desc = [screen deviceDescription]; + CGSize display_physical_size = CGDisplayScreenSize( + [[desc objectForKey:@"NSScreenNumber"] unsignedIntValue]); + + float physical_width = display_physical_size.width; + float physical_height = display_physical_size.height; + + switch (type) + { + case DISPLAY_METRIC_MM_WIDTH: + *value = physical_width; + break; + case DISPLAY_METRIC_MM_HEIGHT: + *value = physical_height; + break; + case DISPLAY_METRIC_DPI: + { + NSSize disp_pixel_size = [[desc objectForKey:NSDeviceSize] sizeValue]; + float dispwidth = disp_pixel_size.width; + float scale = cocoa_screen_get_backing_scale_factor(); + float dpi = (dispwidth / physical_width) * 25.4f * scale; + *value = dpi; + } + break; + case DISPLAY_METRIC_NONE: + default: + *value = 0; + return false; + } + + return true; +} +#else +bool cocoa_get_metrics( + void *data, enum display_metric_types type, + float *value) +{ + RAScreen *screen = (BRIDGE RAScreen*)cocoa_screen_get_chosen(); + float scale = cocoa_screen_get_native_scale(); + CGRect screen_rect = [screen bounds]; + float physical_width = screen_rect.size.width * scale; + float physical_height = screen_rect.size.height * scale; + float dpi = 160 * scale; + NSInteger idiom_type = UI_USER_INTERFACE_IDIOM(); + + switch (idiom_type) + { + case -1: /* UIUserInterfaceIdiomUnspecified */ + /* TODO */ + break; + case UIUserInterfaceIdiomPad: + dpi = 132 * scale; + break; + case UIUserInterfaceIdiomPhone: + { + CGFloat maxSize = fmaxf(physical_width, physical_height); + /* Larger iPhones: iPhone Plus, X, XR, XS, XS Max, 11, 11 Pro Max */ + if (maxSize >= 2208.0) + dpi = 81 * scale; + else + dpi = 163 * scale; + } + break; + case UIUserInterfaceIdiomTV: + case UIUserInterfaceIdiomCarPlay: + /* TODO */ + break; + } + + switch (type) + { + case DISPLAY_METRIC_MM_WIDTH: + *value = physical_width; + break; + case DISPLAY_METRIC_MM_HEIGHT: + *value = physical_height; + break; + case DISPLAY_METRIC_DPI: + *value = dpi; + break; + case DISPLAY_METRIC_NONE: + default: + *value = 0; + return false; + } + + return true; +} #endif