Move two widgets functions over to proper source file

This commit is contained in:
twinaphex 2021-03-25 04:55:27 +01:00
parent 7505790f32
commit fada1caf68
3 changed files with 170 additions and 168 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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;