mirror of
https://github.com/libretro/RetroArch
synced 2025-03-03 04:14:00 +00:00
Move two widgets functions over to proper source file
This commit is contained in:
parent
7505790f32
commit
fada1caf68
@ -20,12 +20,6 @@
|
||||
#include "../configuration.h"
|
||||
#include "../verbosity.h"
|
||||
|
||||
/* Number of pixels corner-to-corner on a 1080p
|
||||
* display:
|
||||
* > sqrt((1920 * 1920) + (1080 * 1080))
|
||||
* Note: This is a double, so no suffix */
|
||||
#define DIAGONAL_PIXELS_1080P 2202.90717008229831581901
|
||||
|
||||
/* Standard reference DPI value, used when determining
|
||||
* DPI-aware scaling factors */
|
||||
#define REFERENCE_DPI 96.0f
|
||||
@ -124,7 +118,7 @@ static gfx_display_ctx_driver_t *gfx_display_ctx_drivers[] = {
|
||||
NULL,
|
||||
};
|
||||
|
||||
static float gfx_display_get_adjusted_scale_internal(
|
||||
float gfx_display_get_adjusted_scale(
|
||||
gfx_display_t *p_disp,
|
||||
float base_scale, float scale_factor, unsigned width)
|
||||
{
|
||||
@ -224,7 +218,7 @@ static bool gfx_display_check_compatibility(
|
||||
return false;
|
||||
}
|
||||
|
||||
static float gfx_display_get_dpi_scale_internal(
|
||||
float gfx_display_get_dpi_scale_internal(
|
||||
unsigned width, unsigned height)
|
||||
{
|
||||
float dpi;
|
||||
@ -401,160 +395,7 @@ float gfx_display_get_dpi_scale(unsigned width, unsigned height)
|
||||
(menu_scale_factor != last_menu_scale_factor) ||
|
||||
(p_disp->menu_driver_id != last_menu_driver_id))
|
||||
{
|
||||
adjusted_scale = gfx_display_get_adjusted_scale_internal(
|
||||
p_disp,
|
||||
scale, menu_scale_factor, width);
|
||||
last_menu_scale_factor = menu_scale_factor;
|
||||
last_menu_driver_id = p_disp->menu_driver_id;
|
||||
}
|
||||
|
||||
return adjusted_scale;
|
||||
}
|
||||
|
||||
float gfx_display_get_widget_dpi_scale(
|
||||
unsigned width, unsigned height, bool fullscreen)
|
||||
{
|
||||
static unsigned last_width = 0;
|
||||
static unsigned last_height = 0;
|
||||
static float scale = 0.0f;
|
||||
static bool scale_cached = false;
|
||||
bool scale_updated = false;
|
||||
static float last_menu_scale_factor = 0.0f;
|
||||
static enum menu_driver_id_type last_menu_driver_id = MENU_DRIVER_ID_UNKNOWN;
|
||||
static float adjusted_scale = 1.0f;
|
||||
settings_t *settings = config_get_ptr();
|
||||
bool gfx_widget_scale_auto = settings->bools.menu_widget_scale_auto;
|
||||
#if (defined(RARCH_CONSOLE) || defined(RARCH_MOBILE))
|
||||
float menu_widget_scale_factor = settings->floats.menu_widget_scale_factor;
|
||||
#else
|
||||
float menu_widget_scale_factor_fullscreen = settings->floats.menu_widget_scale_factor;
|
||||
float menu_widget_scale_factor_windowed = settings->floats.menu_widget_scale_factor_windowed;
|
||||
float menu_widget_scale_factor = fullscreen ?
|
||||
menu_widget_scale_factor_fullscreen : menu_widget_scale_factor_windowed;
|
||||
#endif
|
||||
gfx_display_t *p_disp = disp_get_ptr();
|
||||
|
||||
float menu_scale_factor = menu_widget_scale_factor;
|
||||
|
||||
if (gfx_widget_scale_auto)
|
||||
{
|
||||
#ifdef HAVE_RGUI
|
||||
/* When using RGUI, _menu_scale_factor
|
||||
* is ignored
|
||||
* > If we are not using a widget scale factor override,
|
||||
* just set menu_scale_factor to 1.0 */
|
||||
if (p_disp->menu_driver_id == MENU_DRIVER_ID_RGUI)
|
||||
menu_scale_factor = 1.0f;
|
||||
else
|
||||
#endif
|
||||
{
|
||||
float _menu_scale_factor =
|
||||
settings->floats.menu_scale_factor;
|
||||
menu_scale_factor = _menu_scale_factor;
|
||||
}
|
||||
}
|
||||
|
||||
/* Scale is based on display metrics - these are a fixed
|
||||
* hardware property. To minimise performance overheads
|
||||
* we therefore only call video_context_driver_get_metrics()
|
||||
* on first run, or when the current video resolution changes */
|
||||
if (!scale_cached ||
|
||||
(width != last_width) ||
|
||||
(height != last_height))
|
||||
{
|
||||
scale = gfx_display_get_dpi_scale_internal(width, height);
|
||||
scale_cached = true;
|
||||
scale_updated = true;
|
||||
last_width = width;
|
||||
last_height = height;
|
||||
}
|
||||
|
||||
/* Adjusted scale calculation may also be slow, so
|
||||
* only update if something changes */
|
||||
if (scale_updated ||
|
||||
(menu_scale_factor != last_menu_scale_factor) ||
|
||||
(p_disp->menu_driver_id != last_menu_driver_id))
|
||||
{
|
||||
adjusted_scale = gfx_display_get_adjusted_scale_internal(
|
||||
p_disp,
|
||||
scale, menu_scale_factor, width);
|
||||
last_menu_scale_factor = menu_scale_factor;
|
||||
last_menu_driver_id = p_disp->menu_driver_id;
|
||||
}
|
||||
|
||||
return adjusted_scale;
|
||||
}
|
||||
|
||||
float gfx_display_get_widget_pixel_scale(
|
||||
unsigned width, unsigned height, bool fullscreen)
|
||||
{
|
||||
static unsigned last_width = 0;
|
||||
static unsigned last_height = 0;
|
||||
static float scale = 0.0f;
|
||||
static bool scale_cached = false;
|
||||
bool scale_updated = false;
|
||||
static float last_menu_scale_factor = 0.0f;
|
||||
static enum menu_driver_id_type last_menu_driver_id = MENU_DRIVER_ID_UNKNOWN;
|
||||
static float adjusted_scale = 1.0f;
|
||||
settings_t *settings = config_get_ptr();
|
||||
bool gfx_widget_scale_auto = settings->bools.menu_widget_scale_auto;
|
||||
#if (defined(RARCH_CONSOLE) || defined(RARCH_MOBILE))
|
||||
float menu_widget_scale_factor = settings->floats.menu_widget_scale_factor;
|
||||
#else
|
||||
float menu_widget_scale_factor_fullscreen = settings->floats.menu_widget_scale_factor;
|
||||
float menu_widget_scale_factor_windowed = settings->floats.menu_widget_scale_factor_windowed;
|
||||
float menu_widget_scale_factor = fullscreen ?
|
||||
menu_widget_scale_factor_fullscreen : menu_widget_scale_factor_windowed;
|
||||
#endif
|
||||
gfx_display_t *p_disp = disp_get_ptr();
|
||||
float menu_scale_factor = menu_widget_scale_factor;
|
||||
|
||||
if (gfx_widget_scale_auto)
|
||||
{
|
||||
#ifdef HAVE_RGUI
|
||||
/* When using RGUI, _menu_scale_factor
|
||||
* is ignored
|
||||
* > If we are not using a widget scale factor override,
|
||||
* just set menu_scale_factor to 1.0 */
|
||||
if (p_disp->menu_driver_id == MENU_DRIVER_ID_RGUI)
|
||||
menu_scale_factor = 1.0f;
|
||||
else
|
||||
#endif
|
||||
{
|
||||
float _menu_scale_factor =
|
||||
settings->floats.menu_scale_factor;
|
||||
menu_scale_factor = _menu_scale_factor;
|
||||
}
|
||||
}
|
||||
|
||||
/* We need to perform a square root here, which
|
||||
* can be slow on some platforms (not *slow*, but
|
||||
* it involves enough work that it's worth trying
|
||||
* to optimise). We therefore cache the pixel scale,
|
||||
* and only update on first run or when the video
|
||||
* size changes */
|
||||
if (!scale_cached ||
|
||||
(width != last_width) ||
|
||||
(height != last_height))
|
||||
{
|
||||
/* Baseline reference is a 1080p display */
|
||||
scale = (float)(
|
||||
sqrt((double)((width * width) + (height * height))) /
|
||||
DIAGONAL_PIXELS_1080P);
|
||||
|
||||
scale_cached = true;
|
||||
scale_updated = true;
|
||||
last_width = width;
|
||||
last_height = height;
|
||||
}
|
||||
|
||||
/* Adjusted scale calculation may also be slow, so
|
||||
* only update if something changes */
|
||||
if (scale_updated ||
|
||||
(menu_scale_factor != last_menu_scale_factor) ||
|
||||
(p_disp->menu_driver_id != last_menu_driver_id))
|
||||
{
|
||||
adjusted_scale = gfx_display_get_adjusted_scale_internal(
|
||||
adjusted_scale = gfx_display_get_adjusted_scale(
|
||||
p_disp,
|
||||
scale, menu_scale_factor, width);
|
||||
last_menu_scale_factor = menu_scale_factor;
|
||||
|
@ -35,6 +35,12 @@
|
||||
|
||||
RETRO_BEGIN_DECLS
|
||||
|
||||
/* Number of pixels corner-to-corner on a 1080p
|
||||
* display:
|
||||
* > sqrt((1920 * 1920) + (1080 * 1080))
|
||||
* Note: This is a double, so no suffix */
|
||||
#define DIAGONAL_PIXELS_1080P 2202.90717008229831581901
|
||||
|
||||
#define COLOR_TEXT_ALPHA(color, alpha) (color & 0xFFFFFF00) | alpha
|
||||
|
||||
#define HEX_R(hex) ((hex >> 16) & 0xFF) * (1.0f / 255.0f)
|
||||
@ -316,14 +322,14 @@ bool gfx_display_reset_textures_list(
|
||||
int gfx_display_osk_ptr_at_pos(void *data, int x, int y,
|
||||
unsigned width, unsigned height);
|
||||
|
||||
float gfx_display_get_adjusted_scale(
|
||||
gfx_display_t *p_disp,
|
||||
float base_scale, float scale_factor, unsigned width);
|
||||
|
||||
float gfx_display_get_dpi_scale_internal(unsigned width, unsigned height);
|
||||
|
||||
float gfx_display_get_dpi_scale(unsigned width, unsigned height);
|
||||
|
||||
float gfx_display_get_widget_dpi_scale(
|
||||
unsigned width, unsigned height, bool fullscreen);
|
||||
|
||||
float gfx_display_get_widget_pixel_scale(
|
||||
unsigned width, unsigned height, bool fullscreen);
|
||||
|
||||
void gfx_display_init_white_texture(uintptr_t white_texture);
|
||||
|
||||
bool gfx_display_driver_exists(const char *s);
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include "gfx_widgets.h"
|
||||
#include "font_driver.h"
|
||||
|
||||
#include "../configuration.h"
|
||||
#include "../msg_hash.h"
|
||||
|
||||
#include "../tasks/task_content.h"
|
||||
@ -85,6 +86,160 @@ const static gfx_widget_t* const widgets[] = {
|
||||
&gfx_widget_load_content_animation
|
||||
};
|
||||
|
||||
static float gfx_display_get_widget_dpi_scale(
|
||||
unsigned width, unsigned height, bool fullscreen)
|
||||
{
|
||||
static unsigned last_width = 0;
|
||||
static unsigned last_height = 0;
|
||||
static float scale = 0.0f;
|
||||
static bool scale_cached = false;
|
||||
bool scale_updated = false;
|
||||
static float last_menu_scale_factor = 0.0f;
|
||||
static enum menu_driver_id_type last_menu_driver_id = MENU_DRIVER_ID_UNKNOWN;
|
||||
static float adjusted_scale = 1.0f;
|
||||
settings_t *settings = config_get_ptr();
|
||||
bool gfx_widget_scale_auto = settings->bools.menu_widget_scale_auto;
|
||||
#if (defined(RARCH_CONSOLE) || defined(RARCH_MOBILE))
|
||||
float menu_widget_scale_factor = settings->floats.menu_widget_scale_factor;
|
||||
#else
|
||||
float menu_widget_scale_factor_fullscreen = settings->floats.menu_widget_scale_factor;
|
||||
float menu_widget_scale_factor_windowed = settings->floats.menu_widget_scale_factor_windowed;
|
||||
float menu_widget_scale_factor = fullscreen ?
|
||||
menu_widget_scale_factor_fullscreen : menu_widget_scale_factor_windowed;
|
||||
#endif
|
||||
gfx_display_t *p_disp = disp_get_ptr();
|
||||
|
||||
float menu_scale_factor = menu_widget_scale_factor;
|
||||
|
||||
if (gfx_widget_scale_auto)
|
||||
{
|
||||
#ifdef HAVE_RGUI
|
||||
/* When using RGUI, _menu_scale_factor
|
||||
* is ignored
|
||||
* > If we are not using a widget scale factor override,
|
||||
* just set menu_scale_factor to 1.0 */
|
||||
if (p_disp->menu_driver_id == MENU_DRIVER_ID_RGUI)
|
||||
menu_scale_factor = 1.0f;
|
||||
else
|
||||
#endif
|
||||
{
|
||||
float _menu_scale_factor =
|
||||
settings->floats.menu_scale_factor;
|
||||
menu_scale_factor = _menu_scale_factor;
|
||||
}
|
||||
}
|
||||
|
||||
/* Scale is based on display metrics - these are a fixed
|
||||
* hardware property. To minimise performance overheads
|
||||
* we therefore only call video_context_driver_get_metrics()
|
||||
* on first run, or when the current video resolution changes */
|
||||
if (!scale_cached ||
|
||||
(width != last_width) ||
|
||||
(height != last_height))
|
||||
{
|
||||
scale = gfx_display_get_dpi_scale_internal(width, height);
|
||||
scale_cached = true;
|
||||
scale_updated = true;
|
||||
last_width = width;
|
||||
last_height = height;
|
||||
}
|
||||
|
||||
/* Adjusted scale calculation may also be slow, so
|
||||
* only update if something changes */
|
||||
if (scale_updated ||
|
||||
(menu_scale_factor != last_menu_scale_factor) ||
|
||||
(p_disp->menu_driver_id != last_menu_driver_id))
|
||||
{
|
||||
adjusted_scale = gfx_display_get_adjusted_scale(
|
||||
p_disp,
|
||||
scale, menu_scale_factor, width);
|
||||
last_menu_scale_factor = menu_scale_factor;
|
||||
last_menu_driver_id = p_disp->menu_driver_id;
|
||||
}
|
||||
|
||||
return adjusted_scale;
|
||||
}
|
||||
|
||||
static float gfx_display_get_widget_pixel_scale(
|
||||
unsigned width, unsigned height, bool fullscreen)
|
||||
{
|
||||
static unsigned last_width = 0;
|
||||
static unsigned last_height = 0;
|
||||
static float scale = 0.0f;
|
||||
static bool scale_cached = false;
|
||||
bool scale_updated = false;
|
||||
static float last_menu_scale_factor = 0.0f;
|
||||
static enum menu_driver_id_type last_menu_driver_id = MENU_DRIVER_ID_UNKNOWN;
|
||||
static float adjusted_scale = 1.0f;
|
||||
settings_t *settings = config_get_ptr();
|
||||
bool gfx_widget_scale_auto = settings->bools.menu_widget_scale_auto;
|
||||
#if (defined(RARCH_CONSOLE) || defined(RARCH_MOBILE))
|
||||
float menu_widget_scale_factor = settings->floats.menu_widget_scale_factor;
|
||||
#else
|
||||
float menu_widget_scale_factor_fullscreen = settings->floats.menu_widget_scale_factor;
|
||||
float menu_widget_scale_factor_windowed = settings->floats.menu_widget_scale_factor_windowed;
|
||||
float menu_widget_scale_factor = fullscreen ?
|
||||
menu_widget_scale_factor_fullscreen : menu_widget_scale_factor_windowed;
|
||||
#endif
|
||||
gfx_display_t *p_disp = disp_get_ptr();
|
||||
float menu_scale_factor = menu_widget_scale_factor;
|
||||
|
||||
if (gfx_widget_scale_auto)
|
||||
{
|
||||
#ifdef HAVE_RGUI
|
||||
/* When using RGUI, _menu_scale_factor
|
||||
* is ignored
|
||||
* > If we are not using a widget scale factor override,
|
||||
* just set menu_scale_factor to 1.0 */
|
||||
if (p_disp->menu_driver_id == MENU_DRIVER_ID_RGUI)
|
||||
menu_scale_factor = 1.0f;
|
||||
else
|
||||
#endif
|
||||
{
|
||||
float _menu_scale_factor =
|
||||
settings->floats.menu_scale_factor;
|
||||
menu_scale_factor = _menu_scale_factor;
|
||||
}
|
||||
}
|
||||
|
||||
/* We need to perform a square root here, which
|
||||
* can be slow on some platforms (not *slow*, but
|
||||
* it involves enough work that it's worth trying
|
||||
* to optimise). We therefore cache the pixel scale,
|
||||
* and only update on first run or when the video
|
||||
* size changes */
|
||||
if (!scale_cached ||
|
||||
(width != last_width) ||
|
||||
(height != last_height))
|
||||
{
|
||||
/* Baseline reference is a 1080p display */
|
||||
scale = (float)(
|
||||
sqrt((double)((width * width) + (height * height))) /
|
||||
DIAGONAL_PIXELS_1080P);
|
||||
|
||||
scale_cached = true;
|
||||
scale_updated = true;
|
||||
last_width = width;
|
||||
last_height = height;
|
||||
}
|
||||
|
||||
/* Adjusted scale calculation may also be slow, so
|
||||
* only update if something changes */
|
||||
if (scale_updated ||
|
||||
(menu_scale_factor != last_menu_scale_factor) ||
|
||||
(p_disp->menu_driver_id != last_menu_driver_id))
|
||||
{
|
||||
adjusted_scale = gfx_display_get_adjusted_scale(
|
||||
p_disp,
|
||||
scale, menu_scale_factor, width);
|
||||
last_menu_scale_factor = menu_scale_factor;
|
||||
last_menu_driver_id = p_disp->menu_driver_id;
|
||||
}
|
||||
|
||||
return adjusted_scale;
|
||||
}
|
||||
|
||||
|
||||
static void msg_widget_msg_transition_animation_done(void *userdata)
|
||||
{
|
||||
disp_widget_msg_t *msg = (disp_widget_msg_t*)userdata;
|
||||
|
Loading…
x
Reference in New Issue
Block a user