mirror of
https://github.com/libretro/RetroArch
synced 2025-03-29 22:20:21 +00:00
commit
92075da942
@ -1,6 +1,9 @@
|
||||
# 1.7.6 (future)
|
||||
- DATE: Add Date / Time style options.
|
||||
- MIDI: Add a Linux ALSA driver for MIDI.
|
||||
- LOCALIZATION: Update German translation.
|
||||
- LOCALIZATION: Update Italian translation.
|
||||
- LOCALIZATION: Update Simplified Chinese translation.
|
||||
- LOCALIZATION: Update Japanese translation.
|
||||
- SCANNER: Fix GDI disc scanning.
|
||||
- SWITCH/LIBNX: Improve touch scaling calculation.
|
||||
|
@ -252,6 +252,7 @@ OBJ += frontend/frontend.o \
|
||||
$(LIBRETRO_COMM_DIR)/audio/resampler/drivers/sinc_resampler.o \
|
||||
$(LIBRETRO_COMM_DIR)/audio/resampler/drivers/nearest_resampler.o \
|
||||
$(LIBRETRO_COMM_DIR)/audio/resampler/drivers/null_resampler.o \
|
||||
$(LIBRETRO_COMM_DIR)/utils/md5.o \
|
||||
location/drivers/nulllocation.o \
|
||||
camera/drivers/nullcamera.o \
|
||||
wifi/drivers/nullwifi.o \
|
||||
@ -1624,8 +1625,6 @@ ifeq ($(HAVE_NETWORKING), 1)
|
||||
cheevos/var.o \
|
||||
cheevos/cond.o
|
||||
|
||||
OBJ += \
|
||||
$(LIBRETRO_COMM_DIR)/utils/md5.o
|
||||
|
||||
ifeq ($(HAVE_LUA), 1)
|
||||
DEFINES += -DHAVE_LUA \
|
||||
|
12
Makefile.ctr
12
Makefile.ctr
@ -52,7 +52,7 @@ ifeq ($(GRIFFIN_BUILD), 1)
|
||||
OBJ += griffin/griffin.o
|
||||
DEFINES += -DHAVE_GRIFFIN=1 -DHAVE_MENU -DHAVE_RGUI -DHAVE_XMB -DHAVE_MATERIALUI -DHAVE_LIBRETRODB -DHAVE_CC_RESAMPLER
|
||||
DEFINES += -DHAVE_ZLIB -DHAVE_RPNG -DHAVE_RJPEG -DHAVE_RBMP -DHAVE_RTGA -DWANT_ZLIB
|
||||
DEFINES += -DHAVE_NETWORKING -DHAVE_CHEEVOS -DRC_DISABLE_LUA -DHAVE_SOCKET_LEGACY -DHAVE_THREADS
|
||||
#DEFINES += -DHAVE_NETWORKING -DHAVE_CHEEVOS -DRC_DISABLE_LUA -DHAVE_SOCKET_LEGACY -DHAVE_THREADS
|
||||
#-DHAVE_SSL -DMBEDTLS_SSL_DEBUG_ALL
|
||||
#ssl is currently incompatible with griffin due to use of the "static" flag on repeating functions that will conflict when included in one file
|
||||
else
|
||||
@ -72,11 +72,11 @@ else
|
||||
HAVE_XMB = 1
|
||||
HAVE_STATIC_VIDEO_FILTERS = 1
|
||||
HAVE_STATIC_AUDIO_FILTERS = 1
|
||||
HAVE_NETWORKING = 1
|
||||
HAVE_CHEEVOS = 1
|
||||
HAVE_SOCKET_LEGACY = 1
|
||||
HAVE_THREADS = 1
|
||||
HAVE_SSL = 1
|
||||
#HAVE_NETWORKING = 1
|
||||
#HAVE_CHEEVOS = 1
|
||||
#HAVE_SOCKET_LEGACY = 1
|
||||
#HAVE_THREADS = 1
|
||||
#HAVE_SSL = 1
|
||||
|
||||
include Makefile.common
|
||||
BLACKLIST :=
|
||||
|
@ -705,6 +705,8 @@ static const unsigned menu_thumbnails_default = 3;
|
||||
|
||||
static const unsigned menu_left_thumbnails_default = 0;
|
||||
|
||||
static const unsigned menu_timedate_style = 5;
|
||||
|
||||
static const bool xmb_vertical_thumbnails = false;
|
||||
|
||||
#ifdef IOS
|
||||
|
@ -1574,6 +1574,7 @@ static struct config_uint_setting *populate_settings_uint(settings_t *settings,
|
||||
#ifdef HAVE_MENU
|
||||
SETTING_UINT("dpi_override_value", &settings->uints.menu_dpi_override_value, true, menu_dpi_override_value, false);
|
||||
SETTING_UINT("menu_thumbnails", &settings->uints.menu_thumbnails, true, menu_thumbnails_default, false);
|
||||
SETTING_UINT("menu_timedate_style", &settings->uints.menu_timedate_style, true, menu_timedate_style, false);
|
||||
#ifdef HAVE_XMB
|
||||
SETTING_UINT("menu_left_thumbnails", &settings->uints.menu_left_thumbnails, true, menu_left_thumbnails_default, false);
|
||||
SETTING_UINT("xmb_alpha_factor", &settings->uints.menu_xmb_alpha_factor, true, xmb_alpha_factor, false);
|
||||
@ -2351,8 +2352,17 @@ static bool check_menu_driver_compatibility(void)
|
||||
string_is_equal(menu_driver, "null"))
|
||||
return true;
|
||||
|
||||
if (menu_display_driver_exists(video_driver))
|
||||
return true;
|
||||
/* TODO/FIXME - maintenance hazard */
|
||||
if (string_is_equal(video_driver, "d3d9") ||
|
||||
string_is_equal(video_driver, "d3d10") ||
|
||||
string_is_equal(video_driver, "d3d11") ||
|
||||
string_is_equal(video_driver, "d3d12") ||
|
||||
string_is_equal(video_driver, "gl") ||
|
||||
string_is_equal(video_driver, "gx2") ||
|
||||
string_is_equal(video_driver, "vulkan") ||
|
||||
string_is_equal(video_driver, "metal") ||
|
||||
string_is_equal(video_driver, "vita"))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -393,6 +393,7 @@ typedef struct settings
|
||||
unsigned video_record_scale_factor;
|
||||
unsigned video_stream_scale_factor;
|
||||
|
||||
unsigned menu_timedate_style;
|
||||
unsigned menu_thumbnails;
|
||||
unsigned menu_left_thumbnails;
|
||||
unsigned menu_dpi_override_value;
|
||||
|
23
dynamic.c
23
dynamic.c
@ -955,16 +955,10 @@ static bool dynamic_request_hw_context(enum retro_hw_context_type type,
|
||||
break;
|
||||
|
||||
case RETRO_HW_CONTEXT_OPENGL_CORE:
|
||||
{
|
||||
gfx_ctx_flags_t flags;
|
||||
flags.flags = 0;
|
||||
BIT32_SET(flags.flags, GFX_CTX_FLAGS_GL_CORE_CONTEXT);
|
||||
|
||||
video_context_driver_set_flags(&flags);
|
||||
|
||||
RARCH_LOG("Requesting core OpenGL context (%u.%u).\n",
|
||||
major, minor);
|
||||
}
|
||||
/* TODO/FIXME - we should do a check here to see if
|
||||
* the requested core GL version is supported */
|
||||
RARCH_LOG("Requesting core OpenGL context (%u.%u).\n",
|
||||
major, minor);
|
||||
break;
|
||||
#endif
|
||||
|
||||
@ -1374,6 +1368,15 @@ bool rarch_environment_cb(unsigned cmd, void *data)
|
||||
if (!dynamic_verify_hw_context(cb->context_type, cb->version_minor, cb->version_major))
|
||||
return false;
|
||||
|
||||
if (cb->context_type == RETRO_HW_CONTEXT_OPENGL_CORE)
|
||||
{
|
||||
gfx_ctx_flags_t flags;
|
||||
flags.flags = 0;
|
||||
BIT32_SET(flags.flags, GFX_CTX_FLAGS_GL_CORE_CONTEXT);
|
||||
|
||||
video_context_driver_set_flags(&flags);
|
||||
}
|
||||
|
||||
cb->get_current_framebuffer = video_driver_get_current_framebuffer;
|
||||
cb->get_proc_address = video_driver_get_proc_address;
|
||||
|
||||
|
@ -57,7 +57,7 @@ static uint64_t frontend_switch_get_mem_used(void);
|
||||
|
||||
#ifdef HAVE_LIBNX
|
||||
|
||||
// Splash
|
||||
/* Splash */
|
||||
static uint32_t *splashData = NULL;
|
||||
|
||||
static bool psmInitialized = false;
|
||||
@ -66,7 +66,7 @@ static bool psmInitialized = false;
|
||||
extern bool nxlink_connected;
|
||||
#endif
|
||||
|
||||
#endif // HAVE_LIBNX
|
||||
#endif /* HAVE_LIBNX */
|
||||
|
||||
static void get_first_valid_core(char *path_return)
|
||||
{
|
||||
@ -195,7 +195,7 @@ static void frontend_switch_deinit(void *data)
|
||||
socketExit();
|
||||
#endif
|
||||
|
||||
// Splash
|
||||
/* Splash */
|
||||
if (splashData)
|
||||
{
|
||||
free(splashData);
|
||||
@ -325,33 +325,33 @@ static void frontend_switch_exitspawn(char *s, size_t len)
|
||||
|
||||
void argb_to_rgba8(uint32_t *buff, uint32_t height, uint32_t width)
|
||||
{
|
||||
// Convert
|
||||
for (uint32_t h = 0; h < height; h++)
|
||||
uint32_t h, w;
|
||||
/* Convert */
|
||||
for (h = 0; h < height; h++)
|
||||
{
|
||||
for (uint32_t w = 0; w < width; w++)
|
||||
for (w = 0; w < width; w++)
|
||||
{
|
||||
uint32_t offset = (h * width) + w;
|
||||
uint32_t c = buff[offset];
|
||||
uint32_t c = buff[offset];
|
||||
|
||||
uint32_t a = (uint32_t)((c & 0xff000000) >> 24);
|
||||
uint32_t r = (uint32_t)((c & 0x00ff0000) >> 16);
|
||||
uint32_t g = (uint32_t)((c & 0x0000ff00) >> 8);
|
||||
uint32_t b = (uint32_t)(c & 0x000000ff);
|
||||
uint32_t a = (uint32_t)((c & 0xff000000) >> 24);
|
||||
uint32_t r = (uint32_t)((c & 0x00ff0000) >> 16);
|
||||
uint32_t g = (uint32_t)((c & 0x0000ff00) >> 8);
|
||||
uint32_t b = (uint32_t)(c & 0x000000ff);
|
||||
|
||||
buff[offset] = RGBA8(r, g, b, a);
|
||||
buff[offset] = RGBA8(r, g, b, a);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void frontend_switch_showsplash()
|
||||
void frontend_switch_showsplash(void)
|
||||
{
|
||||
printf("[Splash] Showing splashScreen\n");
|
||||
|
||||
if (splashData)
|
||||
{
|
||||
uint32_t width, height;
|
||||
width = height = 0;
|
||||
|
||||
uint32_t width = 0;
|
||||
uint32_t height = 0;
|
||||
uint32_t *frambuffer = (uint32_t *)gfxGetFramebuffer(&width, &height);
|
||||
|
||||
gfx_slow_swizzling_blit(frambuffer, splashData, width, height, 0, 0, false);
|
||||
@ -362,15 +362,15 @@ void frontend_switch_showsplash()
|
||||
}
|
||||
}
|
||||
|
||||
// From rpng_test.c
|
||||
bool rpng_load_image_argb(const char *path, uint32_t **data, unsigned *width, unsigned *height)
|
||||
/* From rpng_test.c */
|
||||
bool rpng_load_image_argb(const char *path,
|
||||
uint32_t **data, unsigned *width, unsigned *height)
|
||||
{
|
||||
int retval;
|
||||
size_t file_len;
|
||||
bool ret = true;
|
||||
rpng_t *rpng = NULL;
|
||||
void *ptr = NULL;
|
||||
|
||||
bool ret = true;
|
||||
rpng_t *rpng = NULL;
|
||||
void *ptr = NULL;
|
||||
struct nbio_t *handle = (struct nbio_t *)nbio_open(path, NBIO_READ);
|
||||
|
||||
if (!handle)
|
||||
@ -463,7 +463,7 @@ ssize_t readlink(const char *restrict path, char *restrict buf, size_t bufsize)
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Taken from glibc
|
||||
/* Taken from glibc */
|
||||
char *realpath(const char *name, char *resolved)
|
||||
{
|
||||
char *rpath, *dest, *extra_buf = NULL;
|
||||
@ -592,14 +592,14 @@ error:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif // HAVE_LIBNX
|
||||
#endif /* HAVE_LIBNX */
|
||||
|
||||
static void frontend_switch_shutdown(bool unused)
|
||||
{
|
||||
(void)unused;
|
||||
}
|
||||
|
||||
// runloop_get_system_info isnt initialized that early..
|
||||
/* runloop_get_system_info isnt initialized that early.. */
|
||||
extern void retro_get_system_info(struct retro_system_info *info);
|
||||
|
||||
static void frontend_switch_init(void *data)
|
||||
@ -608,21 +608,21 @@ static void frontend_switch_init(void *data)
|
||||
|
||||
#ifdef HAVE_LIBNX
|
||||
#ifndef HAVE_OPENGL
|
||||
// Init Resolution before initDefault
|
||||
/* Init Resolution before initDefault */
|
||||
gfxInitResolution(1280, 720);
|
||||
|
||||
gfxInitDefault();
|
||||
gfxSetMode(GfxMode_TiledDouble);
|
||||
|
||||
gfxConfigureTransform(0);
|
||||
#endif // HAVE_OPENGL
|
||||
#endif /* HAVE_OPENGL */
|
||||
#ifdef NXLINK
|
||||
socketInitializeDefault();
|
||||
nxlink_connected = nxlinkStdio() != -1;
|
||||
#ifndef IS_SALAMANDER
|
||||
verbosity_enable();
|
||||
#endif // IS_SALAMANDER
|
||||
#endif // NXLINK
|
||||
#endif /* IS_SALAMANDER */
|
||||
#endif /* NXLINK */
|
||||
|
||||
Result rc;
|
||||
rc = psmInitialize();
|
||||
@ -642,8 +642,8 @@ static void frontend_switch_init(void *data)
|
||||
uint32_t width, height;
|
||||
width = height = 0;
|
||||
|
||||
// Load splash
|
||||
#ifndef HAVE_OPENGL
|
||||
/* Load splash */
|
||||
if (!splashData)
|
||||
{
|
||||
if (sys_info)
|
||||
@ -685,12 +685,12 @@ static void frontend_switch_init(void *data)
|
||||
frontend_switch_showsplash();
|
||||
}
|
||||
#endif
|
||||
#endif // HAVE_LIBNX (splash)
|
||||
#endif /* HAVE_LIBNX (splash) */
|
||||
}
|
||||
|
||||
static int frontend_switch_get_rating(void)
|
||||
{
|
||||
return 1000;
|
||||
return 11;
|
||||
}
|
||||
|
||||
enum frontend_architecture frontend_switch_get_architecture(void)
|
||||
@ -718,7 +718,7 @@ static int frontend_switch_parse_drive_list(void *data, bool load_content)
|
||||
static uint64_t frontend_switch_get_mem_total(void)
|
||||
{
|
||||
uint64_t memoryTotal = 0;
|
||||
svcGetInfo(&memoryTotal, 6, 0xffff8001, 0); // avaiable
|
||||
svcGetInfo(&memoryTotal, 6, 0xffff8001, 0);
|
||||
memoryTotal += frontend_switch_get_mem_used();
|
||||
|
||||
return memoryTotal;
|
||||
@ -727,7 +727,7 @@ static uint64_t frontend_switch_get_mem_total(void)
|
||||
static uint64_t frontend_switch_get_mem_used(void)
|
||||
{
|
||||
uint64_t memoryUsed = 0;
|
||||
svcGetInfo(&memoryUsed, 7, 0xffff8001, 0); // used
|
||||
svcGetInfo(&memoryUsed, 7, 0xffff8001, 0);
|
||||
|
||||
return memoryUsed;
|
||||
}
|
||||
@ -769,7 +769,7 @@ static void frontend_switch_get_os(char *s, size_t len, int *major, int *minor)
|
||||
strlcpy(s, "Horizon OS", len);
|
||||
|
||||
#ifdef HAVE_LIBNX
|
||||
// There is pretty sure a better way, but this will do just fine
|
||||
/* There is pretty sure a better way, but this will do just fine */
|
||||
if (kernelAbove600())
|
||||
{
|
||||
*major = 6;
|
||||
@ -796,18 +796,18 @@ static void frontend_switch_get_os(char *s, size_t len, int *major, int *minor)
|
||||
}
|
||||
else
|
||||
{
|
||||
// either 1.0 or > 5.x
|
||||
/* either 1.0 or > 5.x */
|
||||
*major = 1;
|
||||
*minor = 0;
|
||||
}
|
||||
#else
|
||||
// defaults in case we error out
|
||||
/* defaults in case we error out */
|
||||
*major = 0;
|
||||
*minor = 0;
|
||||
|
||||
char firmware_version[0x100];
|
||||
|
||||
result_t r; // used by LIB_ASSERT_OK macros
|
||||
result_t r; /* used by LIB_ASSERT_OK macros */
|
||||
LIB_ASSERT_OK(fail, sm_init());
|
||||
|
||||
ipc_object_t set_sys;
|
||||
@ -835,7 +835,7 @@ fail:
|
||||
|
||||
static void frontend_switch_get_name(char *s, size_t len)
|
||||
{
|
||||
// TODO: Add Mariko at some point
|
||||
/* TODO: Add Mariko at some point */
|
||||
strlcpy(s, "Nintendo Switch", len);
|
||||
}
|
||||
|
||||
@ -853,12 +853,12 @@ frontend_ctx_driver_t frontend_ctx_switch =
|
||||
#else
|
||||
frontend_switch_set_fork,
|
||||
#endif
|
||||
#else // HAVE_LIBNX
|
||||
#else /* HAVE_LIBNX */
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
#endif // HAVE_LIBNX
|
||||
#endif /* HAVE_LIBNX */
|
||||
frontend_switch_shutdown,
|
||||
frontend_switch_get_name,
|
||||
frontend_switch_get_os,
|
||||
|
@ -27,6 +27,7 @@ typedef struct gdi
|
||||
#endif
|
||||
HDC winDC;
|
||||
HDC memDC;
|
||||
HDC texDC;
|
||||
HBITMAP bmp;
|
||||
HBITMAP bmp_old;
|
||||
unsigned video_width;
|
||||
@ -35,4 +36,17 @@ typedef struct gdi
|
||||
unsigned screen_height;
|
||||
} gdi_t;
|
||||
|
||||
typedef struct gdi_texture
|
||||
{
|
||||
int width;
|
||||
int height;
|
||||
int active_width;
|
||||
int active_height;
|
||||
|
||||
enum texture_filter_type type;
|
||||
void* data;
|
||||
HBITMAP bmp;
|
||||
HBITMAP bmp_old;
|
||||
} gdi_texture_t;
|
||||
|
||||
#endif
|
||||
|
@ -837,18 +837,18 @@ LRESULT CALLBACK WndProcGDI(HWND hwnd, UINT message,
|
||||
/* draw menu contents behind a gradient background */
|
||||
if (gdi && gdi->memDC)
|
||||
{
|
||||
RECT rect;
|
||||
/*RECT rect;
|
||||
HBRUSH brush = CreateSolidBrush(RGB(1,81,127));
|
||||
|
||||
GetClientRect(hwnd, &rect);
|
||||
GetClientRect(hwnd, &rect);*/
|
||||
|
||||
StretchBlt(gdi->winDC,
|
||||
0, 0,
|
||||
gdi->screen_width, gdi->screen_height,
|
||||
gdi->memDC, 0, 0, gdi->video_width, gdi->video_height, SRCCOPY);
|
||||
|
||||
FillRect(gdi->memDC, &rect, brush);
|
||||
DeleteObject(brush);
|
||||
/*FillRect(gdi->memDC, &rect, brush);
|
||||
DeleteObject(brush);*/
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -16,6 +16,7 @@
|
||||
*/
|
||||
|
||||
#include <retro_miscellaneous.h>
|
||||
#include <formats/image.h>
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "../../config.h"
|
||||
@ -192,6 +193,9 @@ static bool gdi_gfx_frame(void *data, const void *frame,
|
||||
HWND hwnd = win32_get_window();
|
||||
BITMAPINFO *info;
|
||||
|
||||
/* FIXME */
|
||||
video_info->xmb_shadows_enable = false;
|
||||
|
||||
if (!frame || !frame_width || !frame_height)
|
||||
return true;
|
||||
|
||||
@ -414,9 +418,16 @@ static void gdi_gfx_free(void *data)
|
||||
if (!gdi)
|
||||
return;
|
||||
|
||||
if (gdi->bmp)
|
||||
DeleteObject(gdi->bmp);
|
||||
|
||||
if (gdi->texDC)
|
||||
{
|
||||
DeleteDC(gdi->texDC);
|
||||
gdi->texDC = 0;
|
||||
}
|
||||
if (gdi->memDC)
|
||||
{
|
||||
DeleteObject(gdi->bmp);
|
||||
DeleteDC(gdi->memDC);
|
||||
gdi->memDC = 0;
|
||||
}
|
||||
@ -532,12 +543,61 @@ static void gdi_set_video_mode(void *data, unsigned width, unsigned height,
|
||||
video_context_driver_set_video_mode(&mode);
|
||||
}
|
||||
|
||||
static uintptr_t gdi_load_texture(void *video_data, void *data,
|
||||
bool threaded, enum texture_filter_type filter_type)
|
||||
{
|
||||
struct texture_image *image = (struct texture_image*)data;
|
||||
int size = image->width * image->height * sizeof(uint32_t);
|
||||
gdi_texture_t *texture = NULL;
|
||||
void *tmpdata = NULL;
|
||||
|
||||
if (!image || image->width > 2048 || image->height > 2048)
|
||||
return 0;
|
||||
|
||||
texture = calloc(1, sizeof(*texture));
|
||||
texture->width = image->width;
|
||||
texture->height = image->height;
|
||||
texture->active_width = image->width;
|
||||
texture->active_height = image->height;
|
||||
texture->data = calloc(1, texture->width * texture->height * sizeof(uint32_t));
|
||||
texture->type = filter_type;
|
||||
|
||||
if (!texture->data)
|
||||
{
|
||||
free(texture);
|
||||
return 0;
|
||||
}
|
||||
|
||||
memcpy(texture->data, image->pixels, texture->width * texture->height * sizeof(uint32_t));
|
||||
|
||||
return (uintptr_t)texture;
|
||||
}
|
||||
|
||||
static void gdi_unload_texture(void *data, uintptr_t handle)
|
||||
{
|
||||
struct gdi_texture *texture = (struct gdi_texture*)handle;
|
||||
|
||||
if (!texture)
|
||||
return;
|
||||
|
||||
if (texture->data)
|
||||
free(texture->data);
|
||||
|
||||
if (texture->bmp)
|
||||
{
|
||||
DeleteObject(texture->bmp);
|
||||
texture->bmp = NULL;
|
||||
}
|
||||
|
||||
free(texture);
|
||||
}
|
||||
|
||||
static const video_poke_interface_t gdi_poke_interface = {
|
||||
NULL, /* get_flags */
|
||||
NULL, /* set_coords */
|
||||
NULL, /* set_mvp */
|
||||
NULL,
|
||||
NULL,
|
||||
gdi_load_texture,
|
||||
gdi_unload_texture,
|
||||
gdi_set_video_mode,
|
||||
win32_get_refresh_rate,
|
||||
NULL,
|
||||
|
@ -953,7 +953,7 @@ static bool gl_frame(void *data, const void *frame,
|
||||
return false;
|
||||
|
||||
#ifdef HAVE_LIBNX
|
||||
// Should be called once per frame
|
||||
/* Should be called once per frame */
|
||||
if(!appletMainLoop())
|
||||
return false;
|
||||
#endif
|
||||
@ -1506,31 +1506,38 @@ static const gfx_ctx_driver_t *gl_get_context(gl_t *gl)
|
||||
struct retro_hw_render_callback *hwr = video_driver_get_hw_context();
|
||||
unsigned major = hwr->version_major;
|
||||
unsigned minor = hwr->version_minor;
|
||||
enum retro_hw_context_type ctx_type = hwr->context_type;
|
||||
bool hw_context_in_use = ctx_type != RETRO_HW_CONTEXT_NONE;
|
||||
|
||||
#ifdef HAVE_OPENGLES
|
||||
api = GFX_CTX_OPENGL_ES_API;
|
||||
api_name = "OpenGL ES 2.0";
|
||||
|
||||
if (hwr->context_type == RETRO_HW_CONTEXT_OPENGLES3)
|
||||
switch (ctx_type)
|
||||
{
|
||||
major = 3;
|
||||
minor = 0;
|
||||
api_name = "OpenGL ES 3.0";
|
||||
case RETRO_HW_CONTEXT_OPENGLES3:
|
||||
major = 3;
|
||||
minor = 0;
|
||||
api_name = "OpenGL ES 3.0";
|
||||
break;
|
||||
case RETRO_HW_CONTEXT_OPENGLES_VERSION:
|
||||
api_name = "OpenGL ES 3.1+";
|
||||
break;
|
||||
case RETRO_HW_CONTEXT_NONE:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
else if (hwr->context_type == RETRO_HW_CONTEXT_OPENGLES_VERSION)
|
||||
api_name = "OpenGL ES 3.1+";
|
||||
#else
|
||||
api = GFX_CTX_OPENGL_API;
|
||||
api_name = "OpenGL";
|
||||
api = GFX_CTX_OPENGL_API;
|
||||
api_name = "OpenGL";
|
||||
#endif
|
||||
|
||||
(void)api_name;
|
||||
|
||||
gl_shared_context_use = settings->bools.video_shared_context
|
||||
&& hwr->context_type != RETRO_HW_CONTEXT_NONE;
|
||||
&& hw_context_in_use;
|
||||
|
||||
if ( (libretro_get_shared_context())
|
||||
&& (hwr->context_type != RETRO_HW_CONTEXT_NONE))
|
||||
if (libretro_get_shared_context() && hw_context_in_use)
|
||||
gl_shared_context_use = true;
|
||||
|
||||
return video_context_driver_init_first(gl,
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <string/stdstring.h>
|
||||
#include <encodings/utf.h>
|
||||
#include <lists/string_list.h>
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "../../config.h"
|
||||
@ -85,65 +86,113 @@ static void gdi_render_msg(
|
||||
void *data, const char *msg,
|
||||
const struct font_params *params)
|
||||
{
|
||||
float x, y, scale;
|
||||
unsigned newX, newY, len;
|
||||
float x, y, scale, drop_mod, alpha, drop_alpha;
|
||||
int drop_x, drop_y, msg_strlen;
|
||||
unsigned i;
|
||||
unsigned newX, newY, newDropX, newDropY;
|
||||
unsigned align;
|
||||
unsigned red;
|
||||
unsigned green;
|
||||
unsigned blue;
|
||||
unsigned red, green, blue;
|
||||
unsigned drop_red, drop_green, drop_blue;
|
||||
gdi_raster_t *font = (gdi_raster_t*)data;
|
||||
unsigned width = video_info->width;
|
||||
unsigned height = video_info->height;
|
||||
SIZE textSize = {0};
|
||||
struct string_list *msg_list = NULL;
|
||||
|
||||
if (!font || string_is_empty(msg) || !font->gdi)
|
||||
return;
|
||||
|
||||
if (params)
|
||||
{
|
||||
x = params->x;
|
||||
y = params->y;
|
||||
scale = params->scale;
|
||||
align = params->text_align;
|
||||
x = params->x;
|
||||
y = params->y;
|
||||
drop_x = params->drop_x;
|
||||
drop_y = params->drop_y;
|
||||
drop_mod = params->drop_mod;
|
||||
drop_alpha = params->drop_alpha;
|
||||
scale = params->scale;
|
||||
align = params->text_align;
|
||||
|
||||
red = FONT_COLOR_GET_RED(params->color);
|
||||
green = FONT_COLOR_GET_GREEN(params->color);
|
||||
blue = FONT_COLOR_GET_BLUE(params->color);
|
||||
red = FONT_COLOR_GET_RED(params->color);
|
||||
green = FONT_COLOR_GET_GREEN(params->color);
|
||||
blue = FONT_COLOR_GET_BLUE(params->color);
|
||||
alpha = FONT_COLOR_GET_ALPHA(params->color);
|
||||
}
|
||||
else
|
||||
{
|
||||
x = video_info->font_msg_pos_x;
|
||||
y = video_info->font_msg_pos_y;
|
||||
scale = 1.0f;
|
||||
align = TEXT_ALIGN_LEFT;
|
||||
red = video_info->font_msg_color_r * 255.0f;
|
||||
green = video_info->font_msg_color_g * 255.0f;
|
||||
blue = video_info->font_msg_color_b * 255.0f;
|
||||
x = video_info->font_msg_pos_x;
|
||||
y = video_info->font_msg_pos_y;
|
||||
drop_x = -2;
|
||||
drop_y = -2;
|
||||
drop_mod = 0.3f;
|
||||
drop_alpha = 1.0f;
|
||||
scale = 1.0f;
|
||||
align = TEXT_ALIGN_LEFT;
|
||||
red = video_info->font_msg_color_r * 255.0f;
|
||||
green = video_info->font_msg_color_g * 255.0f;
|
||||
blue = video_info->font_msg_color_b * 255.0f;
|
||||
alpha = 255;
|
||||
}
|
||||
|
||||
len = utf8len(msg);
|
||||
msg_strlen = strlen(msg);
|
||||
|
||||
GetTextExtentPoint32(font->gdi->memDC, msg, msg_strlen, &textSize);
|
||||
|
||||
switch (align)
|
||||
{
|
||||
case TEXT_ALIGN_LEFT:
|
||||
newX = x * width * scale;
|
||||
newDropX = drop_x * width * scale;
|
||||
break;
|
||||
case TEXT_ALIGN_RIGHT:
|
||||
newX = (x * width * scale) - len;
|
||||
newX = (x * width * scale) - textSize.cx;
|
||||
newDropX = (drop_x * width * scale) - textSize.cx;
|
||||
break;
|
||||
case TEXT_ALIGN_CENTER:
|
||||
newX = (x * width * scale) - (len / 2);
|
||||
newX = (x * width * scale) - (textSize.cx / 2);
|
||||
newDropX = (drop_x * width * scale) - (textSize.cx / 2);
|
||||
break;
|
||||
default:
|
||||
newX = 0;
|
||||
newDropX = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
newY = height - (y * height * scale);
|
||||
newY = height - (y * height * scale) - textSize.cy;
|
||||
newDropY = height - (drop_y * height * scale) - textSize.cy;
|
||||
|
||||
font->gdi->bmp_old = (HBITMAP)SelectObject(font->gdi->memDC, font->gdi->bmp);
|
||||
|
||||
SetBkMode(font->gdi->memDC, TRANSPARENT);
|
||||
|
||||
msg_list = string_split(msg, "\n");
|
||||
|
||||
if (drop_x || drop_y)
|
||||
{
|
||||
float dark_alpha = drop_alpha;
|
||||
drop_red = red * drop_mod * dark_alpha;
|
||||
drop_green = green * drop_mod * dark_alpha;
|
||||
drop_blue = blue * drop_mod * dark_alpha;
|
||||
|
||||
SetTextColor(font->gdi->memDC, RGB(drop_red, drop_green, drop_blue));
|
||||
|
||||
if (msg_list)
|
||||
{
|
||||
for (i = 0; i < msg_list->size; i++)
|
||||
TextOut(font->gdi->memDC, newDropX, newDropY + (textSize.cy * i), msg_list->elems[i].data, utf8len(msg_list->elems[i].data));
|
||||
}
|
||||
}
|
||||
|
||||
SetTextColor(font->gdi->memDC, RGB(red, green, blue));
|
||||
TextOut(font->gdi->memDC, newX, newY, msg, len);
|
||||
|
||||
if (msg_list)
|
||||
{
|
||||
for (i = 0; i < msg_list->size; i++)
|
||||
TextOut(font->gdi->memDC, newX, newY + (textSize.cy * i), msg_list->elems[i].data, utf8len(msg_list->elems[i].data));
|
||||
|
||||
string_list_free(msg_list);
|
||||
}
|
||||
|
||||
SelectObject(font->gdi->memDC, font->gdi->bmp_old);
|
||||
}
|
||||
|
||||
|
@ -181,9 +181,7 @@ ACHIEVEMENTS
|
||||
/*============================================================
|
||||
MD5
|
||||
============================================================ */
|
||||
#if defined(HAVE_CHEEVOS) || (defined(HAVE_HTTPSERVER) && defined(HAVE_ZLIB))
|
||||
#include "../libretro-common/utils/md5.c"
|
||||
#endif
|
||||
|
||||
/*============================================================
|
||||
CHEATS
|
||||
|
@ -159,7 +159,13 @@ static uint64_t switch_input_get_capabilities(void *data)
|
||||
{
|
||||
(void) data;
|
||||
|
||||
return (1 << RETRO_DEVICE_JOYPAD) | (1 << RETRO_DEVICE_ANALOG);
|
||||
uint64_t caps = (1 << RETRO_DEVICE_JOYPAD) | (1 << RETRO_DEVICE_ANALOG);
|
||||
|
||||
#ifdef HAVE_LIBNX
|
||||
caps |= (1 << RETRO_DEVICE_POINTER);
|
||||
#endif
|
||||
|
||||
return caps;
|
||||
}
|
||||
|
||||
static const input_device_driver_t *switch_input_get_joypad_driver(void *data)
|
||||
|
@ -1,3 +1,29 @@
|
||||
#ifdef HAVE_LAKKA_SWITCH
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_SWITCH_GPU_PROFILE,
|
||||
"GPU Übertakten"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_SWITCH_GPU_PROFILE,
|
||||
"Über- oder Untertakten der Switch GPU"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_SWITCH_BACKLIGHT_CONTROL,
|
||||
"Bildschirmhelligkeit"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_SWITCH_BACKLIGHT_CONTROL,
|
||||
"Anpassen der Switch Bildschirmhelligkeit"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_SWITCH_CPU_PROFILE,
|
||||
"CPU Übertakten"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_SWITCH_CPU_PROFILE,
|
||||
"Übertakten der Switch CPU"
|
||||
)
|
||||
#endif
|
||||
MSG_HASH(
|
||||
MSG_COMPILER,
|
||||
"Compiler"
|
||||
@ -3332,121 +3358,121 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_COLOR_BLUE,
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_FRAMECOUNT_SHOW,
|
||||
"Zeige die aktuelle Anzahl an Einzelbildern an")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_AUTOMATICALLY_ADD_CONTENT_TO_PLAYLIST,
|
||||
"Automatically add content to playlist")
|
||||
"Inhalt automatisch zur Playlist hinzufügen")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_AUTOMATICALLY_ADD_CONTENT_TO_PLAYLIST,
|
||||
"Automatically scans loaded content so they appear inside playlists.")
|
||||
"Scant automatisch den geladenen Inhalt, so dass er in Playlisten angezeigt wird.")
|
||||
MSG_HASH(MSG_SCANNING_OF_FILE_FINISHED,
|
||||
"Scanning of file finished")
|
||||
"Scannen von Datei beendet")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_AUDIO_RESAMPLER_QUALITY,
|
||||
"Audio Resampler Quality")
|
||||
"Audio Resampler Qualität")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_RESAMPLER_QUALITY,
|
||||
"Lower this value to favor performance/lower latency over audio quality, increase if you want better audio quality at the expense of performance/lower latency.")
|
||||
"Verkleinere diesen Wert um Performance/kleinere Latenz gegenüber Audio Qualität zu bevorzugen, erhöhe ihn wenn du bessere Audioqualität bevorzugst auf kosten der Performance/kleinerer Latenz.")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_STATISTICS_SHOW,
|
||||
"Display Statistics")
|
||||
"Statistiken anzeigen")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_STATISTICS_SHOW,
|
||||
"Show onscreen technical statistics.")
|
||||
"Technische Onscreen-Statistiken anzeigen.")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_RGUI_BORDER_FILLER_ENABLE,
|
||||
"Enable border filler")
|
||||
"Rahmenfüller aktivieren.")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_RGUI_BORDER_FILLER_THICKNESS_ENABLE,
|
||||
"Enable border filler thickness")
|
||||
"Rahmenfüllerdicke aktivieren")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_RGUI_BACKGROUND_FILLER_THICKNESS_ENABLE,
|
||||
"Enable background filler thickness")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CRT_SWITCH_RESOLUTION, "For CRT displays only. Attempts to use exact core/game resolution and refresh rate.")
|
||||
"Hintergrundfüllerdicke aktivieren")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CRT_SWITCH_RESOLUTION, "Nur für CRT Bildschirme. Versuche die exakte Core-/Spielauflösung und refresh Rate zu verwenden.")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_CRT_SWITCH_RESOLUTION, "CRT SwitchRes")
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_CRT_SWITCH_RESOLUTION_SUPER,
|
||||
"Switch among native and ultrawide super resolutions."
|
||||
"Umschalten zwischen Nativer- und ultraweiter Superauflösungen."
|
||||
)
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_CRT_SWITCH_RESOLUTION_SUPER, "CRT Super Resolution")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_CRT_SWITCH_RESOLUTION_SUPER, "CRT Superauflösung")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_CONTENT_SHOW_REWIND,
|
||||
"Show Rewind Settings")
|
||||
"Rückspuleinstellungen anzeigen")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CONTENT_SHOW_REWIND,
|
||||
"Show/hide the Rewind options.")
|
||||
"Rückspuleinstellungsoption anzeigen/verstecken ")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CONTENT_SHOW_LATENCY,
|
||||
"Show/hide the Latency options.")
|
||||
"Latenzoptionen anzeigen/verstecken")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_CONTENT_SHOW_LATENCY,
|
||||
"Show Latency Settings")
|
||||
"Latenzeinstellungen anzeigen")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CONTENT_SHOW_OVERLAYS,
|
||||
"Show/hide the Overlay options.")
|
||||
"Overlayoptionen anzeigen/verstecken")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_CONTENT_SHOW_OVERLAYS,
|
||||
"Show Overlay Settings")
|
||||
"Overlayeinstellungen anzeigen")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_AUDIO_ENABLE_MENU,
|
||||
"Enable menu audio")
|
||||
"Menuaudio aktivieren")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_ENABLE_MENU,
|
||||
"Enable or disable menu sound.")
|
||||
"Menuton aktivieren oder deaktivieren")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_AUDIO_MIXER_SETTINGS,
|
||||
"Mixer Settings")
|
||||
"Mixer-Einstellungen")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_MIXER_SETTINGS,
|
||||
"View and/or modify audio mixer settings.")
|
||||
"Anzeigen und/oder anzeigen von Audiomixer-Einstellungen.")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_QUICK_MENU_OVERRIDE_OPTIONS,
|
||||
"Overrides")
|
||||
"Überschreibungen")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_QUICK_MENU_OVERRIDE_OPTIONS,
|
||||
"Options for overriding the global configuration.")
|
||||
"Optionen zum überschreiben der globalen Konfiguration.")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_MIXER_ACTION_PLAY,
|
||||
"Will start playback of the audio stream. Once finished, it will remove the current audio stream from memory.")
|
||||
"Wird die Wiedergabe des Audiostreams starten. Sobald dieser fertig ist, wird der jetzige Audiostream aus dem Speicher entfernt werden.")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_MIXER_ACTION_PLAY_LOOPED,
|
||||
"Will start playback of the audio stream. Once finished, it will loop and play the track again from the beginning.")
|
||||
"Wird die Wiedergabe des Audiostreams starten. Sobald dieser fertig ist, wird dieser erneut von vorne gestartet")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_MIXER_ACTION_PLAY_SEQUENTIAL,
|
||||
"Will start playback of the audio stream. Once finished, it will jump to the next audio stream in sequential order and repeat this behavior. Useful as an album playback mode.")
|
||||
"Wird die Wiedergabe des Audiostreams starten. Sobald dieser fertig ist, springt er zum nächsten Audiostream in sequenzieller Reihenfolge und wiederholt dieses verhalten. Nützlich als Albumwiedergabemodus.")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_MIXER_ACTION_STOP,
|
||||
"This will stop playback of the audio stream, but not remove it from memory. You can start playing it again by selecting 'Play'.")
|
||||
"Dies wird die Wiedergabe des Audiostreams stoppen, aber ihn nicht aus dem Speicher entfernen. Du kannst die Wiedergabe fortsetzen in dem du erneut auf 'Abspielen' klickst.")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_MIXER_ACTION_REMOVE,
|
||||
"This will stop playback of the audio stream and remove it entirely from memory.")
|
||||
"Dies wird die Wiedergabe stoppen und den Audiostream komplett aus dem Speicher entfernen.")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_MIXER_ACTION_VOLUME,
|
||||
"Adjust the volume of the audio stream.")
|
||||
"Anpassen der Lautstärke des Audiostreams.")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_ADD_TO_MIXER,
|
||||
"Add this audio track to an available audio stream slot. If no slots are currently available, it will be ignored.")
|
||||
"Diese Audiospur einem verfügbaren Audiostreamslot hinzufügen. Wenn momentan kein Slot verfügbar ist, wird dies ignoriert.")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_ADD_TO_MIXER_AND_PLAY,
|
||||
"Add this audio track to an available audio stream slot and play it. If no slots are currently available, it will be ignored.")
|
||||
"Diese Audiospur einem verfügbaren Audiostreamslot hinzufügen und sie wiedergeben. Wenn momentan kein Slot verfügbar ist, wird dies ignoriert.")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MIXER_ACTION_PLAY,
|
||||
"Play")
|
||||
"Abspielen")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MIXER_ACTION_PLAY_LOOPED,
|
||||
"Play (Looped)")
|
||||
"Abspielen (Schleife)")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MIXER_ACTION_PLAY_SEQUENTIAL,
|
||||
"Play (Sequential)")
|
||||
"Abspielen (Sequenziell)")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MIXER_ACTION_STOP,
|
||||
"Stop")
|
||||
"Stopp")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MIXER_ACTION_REMOVE,
|
||||
"Remove")
|
||||
"Entfernen")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MIXER_ACTION_VOLUME,
|
||||
"Volume")
|
||||
"Lautstärke")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DETECT_CORE_LIST_OK_CURRENT_CORE,
|
||||
"Current core")
|
||||
"Aktueller Core")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_SEARCH_CLEAR,
|
||||
"Clear")
|
||||
"Leeren")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DISCORD_IN_MENU,
|
||||
"In-Menu")
|
||||
"Im Menu")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DISCORD_IN_GAME,
|
||||
"In-Game")
|
||||
"Im Spiel")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DISCORD_IN_GAME_PAUSED,
|
||||
"In-Game (Paused)")
|
||||
"Im Spiel (Pausiert)")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DISCORD_STATUS_PLAYING,
|
||||
"Playing")
|
||||
"Wiedergebend")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DISCORD_STATUS_PAUSED,
|
||||
"Paused")
|
||||
"Pausiert")
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_DISCORD_ALLOW,
|
||||
"Enable Discord"
|
||||
"Discord aktivieren"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_DISCORD_ALLOW,
|
||||
"Enable or disable Discord support. Will not work with the browser version, only native desktop client."
|
||||
"Discordunterstützung aktivieren oder deaktivieren. Funktioniert nicht in der Browserversion, nur im nativen Desktop Client."
|
||||
)
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_POWER_MANAGEMENT_SETTINGS,
|
||||
"Power Management")
|
||||
"Energieverwaltung")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_POWER_MANAGEMENT_SETTINGS,
|
||||
"Change power management settings.")
|
||||
"Ändere die Energieverwaltungs-Einstellungen")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_SUSTAINED_PERFORMANCE_MODE,
|
||||
"Sustained Performance Mode")
|
||||
"Dauerleistungsmodus")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_MPV_SUPPORT,
|
||||
"mpv support")
|
||||
"mpv unterstützung")
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_VIDEO_ADAPTIVE_VSYNC,
|
||||
"Adaptive Vsync"
|
||||
"Adaptiver Vsync"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_VIDEO_ADAPTIVE_VSYNC,
|
||||
"V-Sync is enabled until performance falls below the target refresh rate. Can minimize stuttering when performance falls below realtime, and can be more energy efficient."
|
||||
"V-Sync ist aktiviert bis die Leistung unter die Zielaktualisierungsrate fällt. Kann Ruckler vermeiden, wenn die Leistung unter realtime fällt, und kann energieeffizienter sein."
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_CRT_SWITCHRES_SETTINGS,
|
||||
@ -3454,75 +3480,75 @@ MSG_HASH(
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_CRT_SWITCHRES_SETTINGS,
|
||||
"Output native, low-resolution signals for use with CRT displays."
|
||||
"Native Signale mit niedgriger Auflösung ausgeben, welche mit CRT Bildschirmen benutzt werden können."
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_CRT_SWITCH_X_AXIS_CENTERING,
|
||||
"Cycle through these options if the image is not centered properly on the display."
|
||||
"Versuche eine dieser Optionen, wenn das Bild nicht richtig zentriert auf dem Bildschirm erscheint."
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_CRT_SWITCH_X_AXIS_CENTERING,
|
||||
"X-Axis Centering"
|
||||
"X-Achsenzentrierung"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_CRT_SWITCH_RESOLUTION_USE_CUSTOM_REFRESH_RATE,
|
||||
"Use a custom refresh rate specified in the config file if needed.")
|
||||
"Benutze eine, in der Konfiguration definierte, Aktualisierungsrate wenn notwendig.")
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_CRT_SWITCH_RESOLUTION_USE_CUSTOM_REFRESH_RATE,
|
||||
"Use Custom Refresh Rate")
|
||||
"Benutze eine benutzerdefinierte Aktualisierungsrate.")
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_CRT_SWITCH_RESOLUTION_OUTPUT_DISPLAY_ID,
|
||||
"Select the output port connected to the CRT display.")
|
||||
"Wähle den Ausgangsport aus, welcher mit dem CRT Bildschirm verbunden ist.")
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_CRT_SWITCH_RESOLUTION_OUTPUT_DISPLAY_ID,
|
||||
"Output Display ID")
|
||||
"Ausgangs Bildschirm ID")
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_QUICK_MENU_START_RECORDING,
|
||||
"Start Recording"
|
||||
"Aufnahme starten"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_QUICK_MENU_START_RECORDING,
|
||||
"Starts recording."
|
||||
"Startet die Aufnahme"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_QUICK_MENU_STOP_RECORDING,
|
||||
"Stop Recording"
|
||||
"Aufnahme beenden"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_QUICK_MENU_STOP_RECORDING,
|
||||
"Stops recording."
|
||||
"Beendet die Aufnahme"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_QUICK_MENU_START_STREAMING,
|
||||
"Start Streaming"
|
||||
"Streamen starten"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_QUICK_MENU_START_STREAMING,
|
||||
"Starts streaming."
|
||||
"Startet das Streamen"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_QUICK_MENU_STOP_STREAMING,
|
||||
"Stop Streaming"
|
||||
"Streamen beenden"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_QUICK_MENU_STOP_STREAMING,
|
||||
"Stops streaming."
|
||||
"Beendet das Streamen"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_INPUT_META_RECORDING_TOGGLE,
|
||||
"Recording toggle"
|
||||
"Aufnahme starten/stoppen"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_INPUT_META_STREAMING_TOGGLE,
|
||||
"Streaming toggle"
|
||||
"Streamen starten/stoppen"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_VIDEO_RECORD_QUALITY,
|
||||
"Record Quality"
|
||||
"Aufnahmequalität"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_VIDEO_STREAM_QUALITY,
|
||||
"Stream Quality"
|
||||
"Streamingqualität"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_STREAMING_URL,
|
||||
@ -3545,18 +3571,18 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_TWITCH_STREAM_KEY,
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_YOUTUBE_STREAM_KEY,
|
||||
"YouTube Stream Key")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_STREAMING_MODE,
|
||||
"Streaming Mode")
|
||||
"Streamingmodus")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_STREAMING_TITLE,
|
||||
"Title of Stream")
|
||||
"Streamtitel")
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_INPUT_SPLIT_JOYCON,
|
||||
"Split Joy-Con"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_RESET_TO_DEFAULT_CONFIG,
|
||||
"Reset To Defaults"
|
||||
"Auf Standardwerte zurücksetzen"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_RESET_TO_DEFAULT_CONFIG,
|
||||
"Reset the current configuration to default values."
|
||||
"Setzt die momentane Konfiguration auf die Standardwerte zurück."
|
||||
)
|
||||
|
@ -96,11 +96,11 @@ MSG_HASH(
|
||||
)
|
||||
MSG_HASH(
|
||||
MSG_NETPLAY_ENDIAN_DEPENDENT,
|
||||
"This core does not support inter-architecture netplay between these systems"
|
||||
"このコアはこれらのシステム間のアーキテクチャ間ネットプレイに対応していません"
|
||||
)
|
||||
MSG_HASH(
|
||||
MSG_NETPLAY_PLATFORM_DEPENDENT,
|
||||
"This core does not support inter-architecture netplay"
|
||||
"このコアはアーキテクチャ間ネットプレイに対応していません"
|
||||
)
|
||||
MSG_HASH(
|
||||
MSG_NETPLAY_ENTER_PASSWORD,
|
||||
@ -156,7 +156,7 @@ MSG_HASH(
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_LATENCY_SETTINGS,
|
||||
"ビデオやオーディオ、入力遅延に関係する設定を変更します。"
|
||||
"ビデオやオーディオ、入力の遅延に関係する設定を変更します。"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_VIDEO_HARD_SYNC,
|
||||
@ -715,9 +715,9 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_FAVORITES_TAB,
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_FPS_SHOW,
|
||||
"フレームレートを表示")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_ENABLE,
|
||||
"フレームの減速度")
|
||||
"フレーム制御")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_SETTINGS,
|
||||
"フレームの減速度")
|
||||
"フレーム制御")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_FRONTEND_COUNTERS,
|
||||
"Frontend Counters")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS,
|
||||
@ -1103,7 +1103,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_HEADER_OPACITY,
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_DRIVER,
|
||||
"メニューのドライバ")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_ENUM_THROTTLE_FRAMERATE,
|
||||
"メニューのフレームレートを減速")
|
||||
"メニューのフレームレートを制限")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FILE_BROWSER_SETTINGS,
|
||||
"設定")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_LINEAR_FILTER,
|
||||
@ -1894,17 +1894,17 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SWAP_INTERVAL,
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_TAB,
|
||||
"ビデオ")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_THREADED,
|
||||
"スレッドされているビデオ")
|
||||
"ビデオをスレッド化")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VFILTER,
|
||||
"非フリッカー")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_HEIGHT,
|
||||
"カスタムのビューポートの縦幅")
|
||||
"カスタムビューポートの縦幅")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_WIDTH,
|
||||
"カスタムのビューポートの横幅")
|
||||
"カスタムビューポートの横幅")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_X,
|
||||
"カスタムのビューポートのX")
|
||||
"カスタムビューポートのX位置")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_Y,
|
||||
"カスタムのビューポートのY")
|
||||
"カスタムビューポートのY位置")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VI_WIDTH,
|
||||
"Set VI Screen Width")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VSYNC,
|
||||
@ -1912,13 +1912,21 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VSYNC,
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOWED_FULLSCREEN,
|
||||
"ウィンドウフルスクリーンモード")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_WIDTH,
|
||||
"ウィンドウの幅")
|
||||
"ウィンドウの横幅")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_HEIGHT,
|
||||
"ウィンドウの縦")
|
||||
"ウィンドウの縦幅")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FULLSCREEN_X,
|
||||
"フルスクリーンの幅")
|
||||
"フルスクリーンの横幅")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FULLSCREEN_Y,
|
||||
"フルスクリーンの縦")
|
||||
"フルスクリーンの縦幅")
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_VIDEO_FULLSCREEN_X,
|
||||
"非ウィンドウフルスクリーンモードの横幅サイズを指定します。0を指定すると、デスクトップ解像度を使用します。"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_VIDEO_FULLSCREEN_Y,
|
||||
"非ウィンドウフルスクリーンモードの縦幅サイズを指定します。0を指定すると、デスクトップ解像度を使用します。"
|
||||
)
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_WIFI_DRIVER,
|
||||
"Wi-Fiのドライバ")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_WIFI_SETTINGS,
|
||||
@ -1984,7 +1992,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_RIBBON_ENABLE,
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SCALE_FACTOR,
|
||||
"メニューの倍率")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHADOWS_ENABLE,
|
||||
"アイコンの影を有効")
|
||||
"アイコンに影を表示")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_CONTENT_SHOW_HISTORY,
|
||||
"履歴タブを表示")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_CONTENT_SHOW_ADD,
|
||||
@ -2012,7 +2020,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_YES,
|
||||
MSG_HASH(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_TWO,
|
||||
"シェーダーのプリセット")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_ENABLE,
|
||||
"実績を有効または無効にする。詳細については、http://retroachievements.orgを参照。")
|
||||
"実績を有効または無効にします。詳細については、http://retroachievements.orgを参照してください。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_TEST_UNOFFICIAL,
|
||||
"非公式実績/ベータ機能をテスト目的で有効または無効にする。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_HARDCORE_MODE_ENABLE,
|
||||
@ -2090,7 +2098,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_SSH_ENABLE,
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_SUSPEND_SCREENSAVER_ENABLE,
|
||||
"システムのスクリーンセーバーをアクティブになることを予防する。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_WINDOW_SCALE,
|
||||
"Sets the window size relative to the core viewport size. Alternatively you can set a window width and height below for a fixed window size")
|
||||
"コアのビューポートサイズを基準にしたウィンドウサイズを指定します。横幅と縦幅が一定の固定ウィンドウサイズを指定することもできます(下の項目)。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_USER_LANGUAGE,
|
||||
"インタフェースの言語を変更する。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION,
|
||||
@ -2140,7 +2148,7 @@ MSG_HASH(MSG_AUTOSAVE_FAILED,
|
||||
MSG_HASH(MSG_AUTO_SAVE_STATE_TO,
|
||||
"自動ステートセーブ to")
|
||||
MSG_HASH(MSG_BLOCKING_SRAM_OVERWRITE,
|
||||
"Blocking SRAM Overwrite")
|
||||
"SRAMの上書きをブロックしています")
|
||||
MSG_HASH(MSG_BRINGING_UP_COMMAND_INTERFACE_ON_PORT,
|
||||
"Bringing up command interface on port")
|
||||
MSG_HASH(MSG_BYTES,
|
||||
@ -2166,9 +2174,9 @@ MSG_HASH(MSG_CORE_DOES_NOT_SUPPORT_SAVESTATES,
|
||||
MSG_HASH(MSG_CORE_OPTIONS_FILE_CREATED_SUCCESSFULLY,
|
||||
"コア設定ファイルの作成に成功しました")
|
||||
MSG_HASH(MSG_COULD_NOT_FIND_ANY_NEXT_DRIVER,
|
||||
"Could not find any next driver")
|
||||
"次のドライバを見つけることができませんでした")
|
||||
MSG_HASH(MSG_COULD_NOT_FIND_COMPATIBLE_SYSTEM,
|
||||
"Could not find compatible system.")
|
||||
"対応システムを見つけることができませんでした")
|
||||
MSG_HASH(MSG_COULD_NOT_FIND_VALID_DATA_TRACK,
|
||||
"有効なデータトラックを見つけることができませんでした")
|
||||
MSG_HASH(MSG_COULD_NOT_OPEN_DATA_TRACK,
|
||||
@ -2176,9 +2184,9 @@ MSG_HASH(MSG_COULD_NOT_OPEN_DATA_TRACK,
|
||||
MSG_HASH(MSG_COULD_NOT_READ_CONTENT_FILE,
|
||||
"コンテンツファイルを読み込むことができませんでした")
|
||||
MSG_HASH(MSG_COULD_NOT_READ_MOVIE_HEADER,
|
||||
"Could not read movie header.")
|
||||
"動画ヘッダーを読み込むことができませんでした")
|
||||
MSG_HASH(MSG_COULD_NOT_READ_STATE_FROM_MOVIE,
|
||||
"Could not read state from movie.")
|
||||
"動画から状態を読み込むことができませんでした")
|
||||
MSG_HASH(MSG_CRC32_CHECKSUM_MISMATCH,
|
||||
"CRC32 checksum mismatch between content file and saved content checksum in replay file header) replay highly likely to desync on playback.")
|
||||
MSG_HASH(MSG_CUSTOM_TIMING_GIVEN,
|
||||
@ -2188,7 +2196,7 @@ MSG_HASH(MSG_DECOMPRESSION_ALREADY_IN_PROGRESS,
|
||||
MSG_HASH(MSG_DECOMPRESSION_FAILED,
|
||||
"解凍に失敗しました")
|
||||
MSG_HASH(MSG_DETECTED_VIEWPORT_OF,
|
||||
"Detected viewport of")
|
||||
"ビューポートを検出しました of")
|
||||
MSG_HASH(MSG_DID_NOT_FIND_A_VALID_CONTENT_PATCH,
|
||||
"有効なコンテンツパッチが見つかりませんでした")
|
||||
MSG_HASH(MSG_DISCONNECT_DEVICE_FROM_A_VALID_PORT,
|
||||
@ -2286,7 +2294,7 @@ MSG_HASH(MSG_FAILED_TO_SEND_SRAM_DATA_TO_CLIENT,
|
||||
MSG_HASH(MSG_FAILED_TO_START_AUDIO_DRIVER,
|
||||
"オーディオドライバーの開始に失敗しました。オーディオなしで続行します")
|
||||
MSG_HASH(MSG_FAILED_TO_START_MOVIE_RECORD,
|
||||
"映像の録画の開始に失敗しました")
|
||||
"動画の録画の開始に失敗しました")
|
||||
MSG_HASH(MSG_FAILED_TO_START_RECORDING,
|
||||
"録画の開始に失敗しました")
|
||||
MSG_HASH(MSG_FAILED_TO_TAKE_SCREENSHOT,
|
||||
@ -2374,9 +2382,9 @@ MSG_HASH(MSG_MOVIE_FILE_IS_NOT_A_VALID_BSV1_FILE,
|
||||
MSG_HASH(MSG_MOVIE_FORMAT_DIFFERENT_SERIALIZER_VERSION,
|
||||
"Movie format seems to have a different serializer version. Will most likely fail.")
|
||||
MSG_HASH(MSG_MOVIE_PLAYBACK_ENDED,
|
||||
"Movie playback ended.")
|
||||
"動画の再生を終了しました")
|
||||
MSG_HASH(MSG_MOVIE_RECORD_STOPPED,
|
||||
"Stopping movie record.")
|
||||
"動画の録画を停止しました")
|
||||
MSG_HASH(MSG_NETPLAY_FAILED,
|
||||
"ネットプレイの初期化に失敗しました")
|
||||
MSG_HASH(MSG_NO_CONTENT_STARTING_DUMMY_CORE,
|
||||
@ -2386,7 +2394,7 @@ MSG_HASH(MSG_NO_SAVE_STATE_HAS_BEEN_OVERWRITTEN_YET,
|
||||
MSG_HASH(MSG_NO_STATE_HAS_BEEN_LOADED_YET,
|
||||
"ステートはまだロードされていません")
|
||||
MSG_HASH(MSG_OVERRIDES_ERROR_SAVING,
|
||||
"Error saving overrides.")
|
||||
"優先ファイルの保存でエラーが発生しました")
|
||||
MSG_HASH(MSG_OVERRIDES_SAVED_SUCCESSFULLY,
|
||||
"優先ファイルを保存しました")
|
||||
MSG_HASH(MSG_PAUSED,
|
||||
@ -2394,7 +2402,7 @@ MSG_HASH(MSG_PAUSED,
|
||||
MSG_HASH(MSG_PROGRAM,
|
||||
"RetroArch")
|
||||
MSG_HASH(MSG_READING_FIRST_DATA_TRACK,
|
||||
"Reading first data track...")
|
||||
"最初のデータトラックを読み込んでいます...")
|
||||
MSG_HASH(MSG_RECEIVED,
|
||||
"received")
|
||||
MSG_HASH(MSG_RECORDING_TERMINATED_DUE_TO_RESIZE,
|
||||
@ -2402,11 +2410,11 @@ MSG_HASH(MSG_RECORDING_TERMINATED_DUE_TO_RESIZE,
|
||||
MSG_HASH(MSG_RECORDING_TO,
|
||||
"Recording to")
|
||||
MSG_HASH(MSG_REDIRECTING_CHEATFILE_TO,
|
||||
"Redirecting cheat file to")
|
||||
"チートファイルの出力先を変更しています to")
|
||||
MSG_HASH(MSG_REDIRECTING_SAVEFILE_TO,
|
||||
"Redirecting save file to")
|
||||
"セーブファイルの出力先を変更しています to")
|
||||
MSG_HASH(MSG_REDIRECTING_SAVESTATE_TO,
|
||||
"Redirecting savestate to")
|
||||
"ステートセーブの出力先を変更しています to")
|
||||
MSG_HASH(MSG_REMAP_FILE_SAVED_SUCCESSFULLY,
|
||||
"リマップファイルを保存しました")
|
||||
MSG_HASH(MSG_REMAP_FILE_REMOVED_SUCCESSFULLY,
|
||||
@ -2420,7 +2428,7 @@ MSG_HASH(MSG_RESET,
|
||||
MSG_HASH(MSG_RESTARTING_RECORDING_DUE_TO_DRIVER_REINIT,
|
||||
"Restarting recording due to driver reinit.")
|
||||
MSG_HASH(MSG_RESTORED_OLD_SAVE_STATE,
|
||||
"Restored old save state.")
|
||||
"以前のステートセーブを復元しました")
|
||||
MSG_HASH(MSG_RESTORING_DEFAULT_SHADER_PRESET_TO,
|
||||
"Shaders: restoring default shader preset to")
|
||||
MSG_HASH(MSG_REVERTING_SAVEFILE_DIRECTORY_TO,
|
||||
@ -2539,15 +2547,15 @@ MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_SYNC,
|
||||
"オーディオを同期する。推奨。")
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_INPUT_AXIS_THRESHOLD,
|
||||
"How far an axis must be tilted to result in a button press."
|
||||
"入力を確定するために要するスティックの傾き量です。"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_INPUT_BIND_TIMEOUT,
|
||||
"Amount of seconds to wait until proceeding to the next bind."
|
||||
"次のバインドに移るまでの待機秒数です。"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_INPUT_BIND_HOLD,
|
||||
"Amount of seconds to hold an input to bind it."
|
||||
"入力をバインドするために要するホールド秒数です。"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_INPUT_TURBO_PERIOD,
|
||||
@ -2559,19 +2567,19 @@ MSG_HASH(
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_VIDEO_VSYNC,
|
||||
"Synchronizes the output video of the graphics card to the refresh rate of the screen. Recommended."
|
||||
"グラフィックカードから出力されるビデオと画面のリフレッシュレートを同期します(推奨)。"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_VIDEO_ALLOW_ROTATE,
|
||||
"Allow cores to set rotation. When disabled, rotation requests are ignored. Useful for setups where one manually rotates the screen."
|
||||
"コアに回転を許可します。無効にすると、回転リクエストは無視されます。手動で画面を回転したいときに便利です。"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_DUMMY_ON_CORE_SHUTDOWN,
|
||||
"Some cores might have a shutdown feature. If enabled, it will prevent the core from shutting RetroArch down. Instead, it loads a dummy core."
|
||||
"一部のコアはシャットダウン機能を有している場合があります。有効にすると、コアがRetroArchをシャットダウンすることを防止し、代わりにダミーのコアをロードします。"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_CHECK_FOR_MISSING_FIRMWARE,
|
||||
"Check if all the required firmware is present before attempting to load content."
|
||||
"コンテンツをロードする前に必要なファームウェアがすべて存在するかどうかを確認します。"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_VIDEO_REFRESH_RATE,
|
||||
@ -2715,11 +2723,11 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ROOM_NICKNAME_LAN,
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_COMPAT_CONTENT_FOUND,
|
||||
"対応するコンテンツが見つかりました")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_CROP_OVERSCAN,
|
||||
"Cuts off a few pixels around the edges of the image that were customarily left blank by developers and sometimes contain garbage pixels.")
|
||||
"開発者によって慣例的に空白にされていたイメージの端にあるいくつかのピクセルを切り取ります。 不正確なピクセルを含むこともあります。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SMOOTH,
|
||||
"Add a slight blur to the image to take the edge off of the hard pixel edges. This option has very little impact on performance.")
|
||||
"画像にわずかなぼかしを加えて、ピクセルのエッジを柔らかくします。このオプションは、パフォーマンスにはほとんど影響しません。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_FILTER,
|
||||
"Apply a CPU-powered video filter. NOTE: Might come at a high performance cost. Some video filters might only work for cores that use 32bit or 16bit color.")
|
||||
"CPUベースのビデオフィルターを適用します。備考: パフォーマンスを多く消費するかもしれません。一部のビデオフィルターは、32bitまたは16bitカラーを使用するコアでのみ動作する可能性があります。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_USERNAME,
|
||||
"RetroAchievementsアカウントのユーザー名")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_PASSWORD,
|
||||
@ -2739,9 +2747,9 @@ MSG_HASH(MENU_ENUM_SUBLABEL_SYSTEM_INFORMATION,
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_QUIT_RETROARCH,
|
||||
"アプリを終了する。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_WINDOW_WIDTH,
|
||||
"ディスプレイのカスタムビデオ横幅を指定します。ゼロを指定すると可能な限りウィンドウをスケールします。")
|
||||
"ディスプレイのカスタムビデオ横幅を指定します。0を指定すると可能な限りウィンドウをスケールします。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_WINDOW_HEIGHT,
|
||||
"ディスプレイのカスタムビデオ縦幅を指定します。ゼロを指定すると可能な限りウィンドウをスケールします。")
|
||||
"ディスプレイのカスタムビデオ縦幅を指定します。0を指定すると可能な限りウィンドウをスケールします。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_MESSAGE_POS_X,
|
||||
"OSDのカスタムX軸を指定する。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_MESSAGE_POS_Y,
|
||||
@ -2756,7 +2764,7 @@ MSG_HASH(
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_VIDEO_SCALE_INTEGER,
|
||||
"Only scales video in integer steps. The base size depends on system-reported geometry and aspect ratio. If 'Force Aspect' is not set, X/Y will be integer scaled independently."
|
||||
"ビデオのスケールを整数に限定します。基礎サイズはシステムによって報告されたジオメトリとアスペクト比に依存します。「強制アスペクト比」が指定されていない場合、横幅と縦幅はそれぞれ独立して整数でスケールされます。"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_VIDEO_GPU_SCREENSHOT,
|
||||
@ -2764,11 +2772,11 @@ MSG_HASH(
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_VIDEO_ROTATION,
|
||||
"Forces a certain rotation of the screen. The rotation is added to rotations which the core sets."
|
||||
"指定した角度で画面を強制的に回転させます。この回転はコアが指定する回転に追加されます。"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_VIDEO_FORCE_SRGB_DISABLE,
|
||||
"Forcibly disable sRGB FBO support. Some Intel OpenGL drivers on Windows have video problems with sRGB FBO support if this is enabled. Enabling this can work around it."
|
||||
"sRGB FBOの対応を強制的に無効にします。sRGB FBOの対応が有効になっている一部のWindows用Intel Open GLドライバはビデオ問題を有します。この機能を有効にすることで問題を回避できます。"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_VIDEO_FULLSCREEN,
|
||||
@ -2792,11 +2800,11 @@ MSG_HASH(
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_FASTFORWARD_RATIO,
|
||||
"The maximum rate at which content will be run when using fast forward (E.g. 5x for 60 fps content => 300 fps cap). If this is set at 0x, then fastforward ratio is unlimited (no FPS cap)."
|
||||
"早送り中のコンテンツの最大フレームレートです。例えば、60FPSコンテンツに5xを指定すると、最大フレームレートは300FPSになります。0xを指定した場合は無制限になります(フレームレート制限なし)。"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_SLOWMOTION_RATIO,
|
||||
"When slowmotion, content will slow down by a factor."
|
||||
"スローモーション時、コンテンツは設定した比率に応じて減速します。"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_REWIND_ENABLE,
|
||||
@ -2808,11 +2816,11 @@ MSG_HASH(
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_LIBRETRO_LOG_LEVEL,
|
||||
"Sets log level for cores. If a log level issued by a core is below this value, it is ignored."
|
||||
"コアのログレベルを設定します。コアによって発行されたログレベルがこの値を下回る場合、無視されます。"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_PERFCNT_ENABLE,
|
||||
"Enable performance counters for RetroArch (and cores)."
|
||||
"RetroArch(およびコア)のパフォーマンスカウンターを有効にします。"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_SAVE,
|
||||
@ -2932,15 +2940,15 @@ MSG_HASH(
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_NETPLAY_IP_ADDRESS,
|
||||
"The address of the host to connect to."
|
||||
"ホストのIPアドレス"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_NETPLAY_TCP_UDP_PORT,
|
||||
"The port of the host IP address. Can be either a TCP or UDP port."
|
||||
"ホストのIPアドレスのポート番号(TCPまたはUDPポート)"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_NETPLAY_PASSWORD,
|
||||
"The password for connecting to the netplay host. Used only in host mode."
|
||||
"ネットプレイのホストに接続するためのパスワードです。ホストモードでのみ使用されます。"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_NETPLAY_PUBLIC_ANNOUNCE,
|
||||
@ -2948,7 +2956,7 @@ MSG_HASH(
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_NETPLAY_SPECTATE_PASSWORD,
|
||||
"The password for connecting to the netplay host with only spectator privileges. Used only in host mode."
|
||||
"観戦者のみに適用されるネットプレイのホストに接続するためのパスワードです。ホストモードでのみ使用されます。"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_NETPLAY_STATELESS_MODE,
|
||||
@ -2992,34 +3000,34 @@ MSG_HASH(
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_NETPLAY_ENABLE_HOST,
|
||||
"ネットプレイをホスト(サーバー)モードで有効にする。"
|
||||
"ネットプレイをホスト(サーバー)モードで有効にします。"
|
||||
)
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY_ENABLE_CLIENT,
|
||||
"ネットプレイをクライアントモードで有効にする。")
|
||||
"ネットプレイをクライアントモードで有効にします。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY_DISCONNECT,
|
||||
"アクティブなネットプレイ接続を切断する。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_SCAN_DIRECTORY,
|
||||
"フォルダの対応ファイルをスキャンしてコレクションに追加する。")
|
||||
"対応ファイルをフォルダからスキャンしてコレクションに追加します。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_SCAN_FILE,
|
||||
"対応ファイルをスキャンしてコレクションに追加する。")
|
||||
"対応ファイルをスキャンしてコレクションに追加します。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SWAP_INTERVAL,
|
||||
"Uses a custom swap interval for Vsync. Set this to effectively halve monitor refresh rate."
|
||||
)
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_SORT_SAVEFILES_ENABLE,
|
||||
"使用したコアの名前に基づいてフォルダーのステートセーブを分類する。"
|
||||
"使用したコアの名前に基づいてセーブファイルをフォルダごとに分類します。"
|
||||
)
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_SORT_SAVESTATES_ENABLE,
|
||||
"使用したコアの名前に基づいてフォルダーのステートセーブを分類する。"
|
||||
"使用したコアの名前に基づいてステートセーブをフォルダごとに分類します。"
|
||||
)
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CORE_UPDATER_BUILDBOT_URL,
|
||||
"URL to core updater directory on the Libretro buildbot.")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_BUILDBOT_ASSETS_URL,
|
||||
"URL to assets updater directory on the Libretro buildbot.")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CORE_UPDATER_AUTO_EXTRACT_ARCHIVE,
|
||||
"After downloading, automatically extract archives that the downloads are contained inside."
|
||||
"ダウンロード後、ダウンロードしたコンテンツが含まれるアーカイブを自動的に展開します。"
|
||||
)
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY_REFRESH_ROOMS,
|
||||
"新しいネットプレイルームをスキャンする。")
|
||||
"新しいネットプレイルームをスキャンします。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_DELETE_ENTRY,
|
||||
"このエントリーをコレクションから削除する。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_INFORMATION,
|
||||
@ -3045,7 +3053,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_DATABASE_MANAGER,
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CURSOR_MANAGER,
|
||||
"以前の検索を表示する。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_TAKE_SCREENSHOT,
|
||||
"画面の画像をキャプチャーする。")
|
||||
"画面をキャプチャーする。")
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_CLOSE_CONTENT,
|
||||
"現在動作中のゲームを終了する。すべての保存されていない変更は失われる可能性がある。"
|
||||
@ -3066,7 +3074,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_UNDO_SAVE_STATE,
|
||||
"ステートが上書きされていた場合、以前のステートセーブにロールバックする。")
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_ACCOUNTS_RETRO_ACHIEVEMENTS,
|
||||
"Retro Achievements service. For more information, visit http://retroachievements.org"
|
||||
"RetroAchievementサービスです。詳細については、http://retroachievements.orgを参照してください。"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_ACCOUNTS_LIST,
|
||||
@ -3095,7 +3103,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_THREADED_DATA_RUNLOOP_ENABLE,
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_PLAYLIST_ENTRY_REMOVE,
|
||||
"ユーザーがコレクションからエントリーを削除できるようにする。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_SYSTEM_DIRECTORY,
|
||||
"Sets the System directory. Cores can query for this directory to load BIOSes, system-specific configs, etc.")
|
||||
"システムフォルダを指定します。コアはBIOSや特定システムの設定などをロードするため、このフォルダを探索することができます。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_RGUI_BROWSER_DIRECTORY,
|
||||
"ファイルブラウザーの開始ディレクトリを指定する。")
|
||||
MSG_HASH(
|
||||
@ -3103,12 +3111,12 @@ MSG_HASH(
|
||||
"Usually set by developers who bundle libretro/RetroArch apps to point to assets."
|
||||
)
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_DYNAMIC_WALLPAPERS_DIRECTORY,
|
||||
"The place to store the wallpapers dynamically loaded by the menu depending on context.")
|
||||
"表示内容に応じて動的にロードされる壁紙が存在するフォルダを指定します。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_THUMBNAILS_DIRECTORY,
|
||||
"サムネイルファイルの保存フォルダ"
|
||||
)
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_RGUI_CONFIG_DIRECTORY,
|
||||
"設定ファイルブラウザーの初期ディレクトリーを指定する。")
|
||||
"設定ファイルブラウザーの初期ディレクトリを指定する。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY_INPUT_LATENCY_FRAMES_MIN,
|
||||
"The number of frames of input latency for netplay to use to hide network latency. This reduces jitter and makes netplay less CPU-intensive, at the expense of noticeable input lag.")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY_INPUT_LATENCY_FRAMES_RANGE,
|
||||
@ -3128,7 +3136,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_XMB_LAYOUT,
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_XMB_THEME,
|
||||
"アイコンに異なるテーマを選択する。変更はプログラムの再起動後に反映される。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_XMB_SHADOWS_ENABLE,
|
||||
"すべてのアイコンにドロップシャドウを有効にする。この設定はわずかにパフォーマンスに影響を及ぼす。")
|
||||
"すべてのアイコンにドロップシャドウを適用します。この設定はわずかにパフォーマンスに影響を及ぼします。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_MENU_COLOR_THEME,
|
||||
"異なる背景色グラデーションテーマを選択する。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_MENU_WALLPAPER_OPACITY,
|
||||
@ -3136,7 +3144,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_MENU_WALLPAPER_OPACITY,
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_XMB_MENU_COLOR_THEME,
|
||||
"異なる背景色グラデーションテーマを選択する。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_XMB_RIBBON_ENABLE,
|
||||
"Select an animated background effect. Can be GPU-intensive depending on the effect. If performance is unsatisfactory, either turn this off or revert to a simpler effect.")
|
||||
"背景アニメーション効果を選択します。効果によってはGPUに大きな負荷をかけます。パフォーマンスが不足する場合、効果をオフにするか、より単純な効果を選択してください。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_XMB_FONT,
|
||||
"メニューの使用するフォントを選択する。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CONTENT_SHOW_IMAGES,
|
||||
@ -3160,9 +3168,9 @@ MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_MENU_HEADER_OPACITY,
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_MENU_FOOTER_OPACITY,
|
||||
"フッターの不透明度を調整する。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_DPI_OVERRIDE_ENABLE,
|
||||
"The menu normally scales itself dynamically. If you want to set a specific scaling size instead, enable this.")
|
||||
"通常、メニューは動的にスケールされます。特定のスケールサイズを指定したい場合に有効にしてください。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_DPI_OVERRIDE_VALUE,
|
||||
"Set the custom scaling size here. NOTE: You have to enable 'DPI Override' for this scaling size to take effect.")
|
||||
"カスタムスケールサイズを指定します。備考: このスケールサイズを反映するには、「優先DPI」を有効にする必要があります。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CORE_ASSETS_DIRECTORY,
|
||||
"すべてのダウンロードしたファイルをこのフォルダに保存する。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_REMAPPING_DIRECTORY,
|
||||
@ -3172,12 +3180,12 @@ MSG_HASH(MENU_ENUM_SUBLABEL_LIBRETRO_DIR_PATH,
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_LIBRETRO_INFO_PATH,
|
||||
"コアやアプリの情報ファイルをこのフォルダに存在する。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_JOYPAD_AUTOCONFIG_DIR,
|
||||
"If a joypad is plugged in, that joypad will be autoconfigured if a config file corresponding to it is present inside this directory.")
|
||||
"ジョイパッドを接続したとき、そのジョイパッドに対応した設定ファイルが指定したフォルダに存在していれば、そのジョイパッドは自動的に設定されます。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_PLAYLIST_DIRECTORY,
|
||||
"すべてのプレイリストをこのフォルダに保存する。")
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_CACHE_DIRECTORY,
|
||||
"If set to a directory, content which is temporarily extracted (e.g. from archives) will be extracted to this directory."
|
||||
"フォルダを指定すると、アーカイブなどから一時的に展開されるコンテンツが指定先に展開されるようになります。"
|
||||
)
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CURSOR_DIRECTORY,
|
||||
"保存したクエリをこのフォルダに保存する。")
|
||||
@ -3218,10 +3226,10 @@ MSG_HASH(MENU_ENUM_SUBLABEL_RECORDING_CONFIG_DIRECTORY,
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_FONT_PATH,
|
||||
"OSDの使用するフォントを選択する。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_SHADER_APPLY_CHANGES,
|
||||
"Changes to the shader configuration will take effect immediately. Use this if you changed the amount of shader passes, filtering, FBO scale, etc.")
|
||||
"シェーダーの設定の変更を直ちに反映します。シェーダーのパス数やフィルタリング、FBOスケールなどを変更したときに使用します。")
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_VIDEO_SHADER_NUM_PASSES,
|
||||
"Increase or decrease the amount of shader pipeline passes. You can bind a separate shader to each pipeline pass and configure its scale and filtering."
|
||||
"シェーダーパイプラインのパス数を増加または減少させます。各パイプラインに別々のシェーダーをバインドし、フィルタリングとスケールを設定することができます。"
|
||||
)
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_USE_MITM_SERVER,
|
||||
"中継サーバーを使用")
|
||||
@ -3310,7 +3318,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE,
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MAIN_MENU_ENABLE_SETTINGS,
|
||||
"設定タブを有効")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_CONTENT_SHOW_SETTINGS_PASSWORD,
|
||||
"設定タブを有効するパスワード")
|
||||
"設定タブを有効にするパスワード")
|
||||
MSG_HASH(MSG_INPUT_ENABLE_SETTINGS_PASSWORD,
|
||||
"パスワードを入力してください")
|
||||
MSG_HASH(MSG_INPUT_ENABLE_SETTINGS_PASSWORD_OK,
|
||||
@ -3320,7 +3328,7 @@ MSG_HASH(MSG_INPUT_ENABLE_SETTINGS_PASSWORD_NOK,
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_XMB_MAIN_MENU_ENABLE_SETTINGS,
|
||||
"設定タブを有効にする。タブを表示するには再起動が必要。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CONTENT_SHOW_SETTINGS_PASSWORD,
|
||||
"Supplying a password when hiding the settings tab makes it possible to later restore it from the menu, by going to the Main Menu tab, selecting Enable Settings Tab and entering the password.")
|
||||
"設定タブを隠す際にあらかじめパスワードを設定しておくことで、そのパスワードを使用してメニューから設定タブを復元することができます。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_PLAYLIST_ENTRY_RENAME,
|
||||
"コレクションのエントリーの名前変更をユーザーに許可する。")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_RENAME,
|
||||
@ -3432,13 +3440,13 @@ MSG_HASH(MENU_ENUM_SUBLABEL_MENU_DISABLE_KIOSK_MODE,
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_ENABLE_KIOSK_MODE,
|
||||
"キオスクモードを有効")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_MENU_ENABLE_KIOSK_MODE,
|
||||
"Protects the setup by hiding all configuration related settings.")
|
||||
"コンフィグに関係するあらゆる設定を隠すことでセットアップを保護します。")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_KIOSK_MODE_PASSWORD,
|
||||
"キオスクモードを無効するパスワードを設定")
|
||||
"キオスクモードを無効にするパスワードを設定")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_MENU_KIOSK_MODE_PASSWORD,
|
||||
"Supplying a password when enabling kiosk mode makes it possible to later disable it from the menu, by going to the Main Menu, selecting Disable Kiosk Mode and entering the password.")
|
||||
"キオスクモードを有効にする際にあらかじめパスワードを設定しておくことで、そのパスワードを使用してメニューからキオスクモードを無効にすることができます。")
|
||||
MSG_HASH(MSG_INPUT_KIOSK_MODE_PASSWORD,
|
||||
"パスワードを入力して下さい")
|
||||
"パスワードを入力してください")
|
||||
MSG_HASH(MSG_INPUT_KIOSK_MODE_PASSWORD_OK,
|
||||
"パスワードが一致しました")
|
||||
MSG_HASH(MSG_INPUT_KIOSK_MODE_PASSWORD_NOK,
|
||||
@ -3476,7 +3484,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_OPACITY,
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_AUDIO_RESAMPLER_QUALITY,
|
||||
"オーディオリサンプラーの音質")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_RESAMPLER_QUALITY,
|
||||
"Lower this value to favor performance/lower latency over audio quality, increase if you want better audio quality at the expense of performance/lower latency.")
|
||||
"オーディオ品質よりもパフォーマンス/遅延を優先する場合は低い設定を、パフォーマンス/遅延よりもオーディオ品質を優先する場合は高い設定を選択します。")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_WATCH_FOR_CHANGES,
|
||||
"シェーダーファイルの変更を監視")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_SHOW_DECORATIONS,
|
||||
@ -3674,9 +3682,9 @@ MSG_HASH(MENU_ENUM_SUBLABEL_MIXER_ACTION_PLAY,
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_MIXER_ACTION_PLAY_LOOPED,
|
||||
"オーディオストリームの再生を開始します。再生が終わると、トラックは最初から繰り返して再生されます。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_MIXER_ACTION_PLAY_SEQUENTIAL,
|
||||
"オーディオストリームの再生を開始します。再生が終わると、順番に次のオーディオストリームに移り、それを繰り返します。アルバム再生モードとして便利です。")
|
||||
"オーディオストリームの再生を開始します。再生が終わると、順番に次のオーディオストリームに\n移り、それを繰り返します。アルバム再生モードとして便利です。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_MIXER_ACTION_STOP,
|
||||
"オーディオストリームの再生を停止しますが、メモリからは取り除きません。「再生」を選択することで再び再生を開始できます。")
|
||||
"オーディオストリームの再生を停止します。メモリからは取り除かれず、「再生」を選択することで再び再生を開始できます。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_MIXER_ACTION_REMOVE,
|
||||
"オーディオストリームの再生を停止してメモリから完全に取り除きます。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_MIXER_ACTION_VOLUME,
|
||||
@ -3881,10 +3889,10 @@ MSG_HASH(
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_CRT_SWITCH_RESOLUTION_USE_CUSTOM_REFRESH_RATE,
|
||||
"Use a custom refresh rate specified in the config file if needed.")
|
||||
"設定ファイルで指定されたカスタムリフレッシュレートを使用します。")
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_CRT_SWITCH_RESOLUTION_USE_CUSTOM_REFRESH_RATE,
|
||||
"Use Custom Refresh Rate")
|
||||
"カスタムリフレッシュレートを使用")
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_CRT_SWITCH_RESOLUTION_OUTPUT_DISPLAY_ID,
|
||||
"Select the output port connected to the CRT display.")
|
||||
|
@ -1111,6 +1111,8 @@ MSG_HASH(MENU_ENUM_LABEL_THUMBNAILS_UPDATER_LIST,
|
||||
"thumbnails_updater_list")
|
||||
MSG_HASH(MENU_ENUM_LABEL_TIMEDATE_ENABLE,
|
||||
"menu_timedate_enable")
|
||||
MSG_HASH(MENU_ENUM_LABEL_TIMEDATE_STYLE,
|
||||
"menu_timedate_style")
|
||||
MSG_HASH(MENU_ENUM_LABEL_TITLE_COLOR,
|
||||
"menu_title_color")
|
||||
MSG_HASH(MENU_ENUM_LABEL_UI_COMPANION_ENABLE,
|
||||
|
@ -1738,6 +1738,10 @@ int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len)
|
||||
snprintf(s, len,
|
||||
"Shows current date and/or time inside menu.");
|
||||
break;
|
||||
case MENU_ENUM_LABEL_TIMEDATE_STYLE:
|
||||
snprintf(s, len,
|
||||
"Style to show the current date and/or time in.");
|
||||
break;
|
||||
case MENU_ENUM_LABEL_BATTERY_LEVEL_ENABLE:
|
||||
snprintf(s, len,
|
||||
"Shows current battery level inside menu.");
|
||||
|
@ -2906,6 +2906,46 @@ MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_TIMEDATE_ENABLE,
|
||||
"Show date / time"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE,
|
||||
"Style of date / time"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_TIMEDATE_STYLE,
|
||||
"Changes the style current date and/or time is shown inside the menu."
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_YMD_HMS,
|
||||
"YYYY-MM-DD HH:MM:SS"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_YMD_HM,
|
||||
"YYYY-MM-DD HH:MM"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_MDYYYY,
|
||||
"MM-DD-YYYY HH:MM"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_HMS,
|
||||
"HH:MM:SS"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_HM,
|
||||
"HH:MM"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_DM_HM,
|
||||
"DD/MM HH:MM"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_MD_HM,
|
||||
"MM/DD HH:MM"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_AM_PM,
|
||||
"HH:MM:SS (AM/PM)"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_TITLE_COLOR,
|
||||
"Menu title color"
|
||||
@ -5279,7 +5319,7 @@ MSG_HASH(
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_NETPLAY_ENABLE_CLIENT,
|
||||
"Enables netplay in client mode."
|
||||
"Enter netplay server address and connect in client mode."
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_NETPLAY_DISCONNECT,
|
||||
|
@ -66,7 +66,7 @@ struct config_include_list
|
||||
};
|
||||
|
||||
static config_file_t *config_file_new_internal(
|
||||
const char *path, unsigned depth);
|
||||
const char *path, unsigned depth, config_file_cb_t *cb);
|
||||
|
||||
static int config_sort_compare_func(struct config_entry_list *a,
|
||||
struct config_entry_list *b)
|
||||
@ -267,7 +267,7 @@ static void add_child_list(config_file_t *parent, config_file_t *child)
|
||||
parent->tail = NULL;
|
||||
}
|
||||
|
||||
static void add_sub_conf(config_file_t *conf, char *path)
|
||||
static void add_sub_conf(config_file_t *conf, char *path, config_file_cb_t *cb)
|
||||
{
|
||||
char real_path[PATH_MAX_LENGTH];
|
||||
config_file_t *sub_conf = NULL;
|
||||
@ -314,7 +314,7 @@ static void add_sub_conf(config_file_t *conf, char *path)
|
||||
#endif
|
||||
|
||||
sub_conf = (config_file_t*)
|
||||
config_file_new_internal(real_path, conf->include_depth + 1);
|
||||
config_file_new_internal(real_path, conf->include_depth + 1, cb);
|
||||
if (!sub_conf)
|
||||
return;
|
||||
|
||||
@ -324,7 +324,7 @@ static void add_sub_conf(config_file_t *conf, char *path)
|
||||
}
|
||||
|
||||
static bool parse_line(config_file_t *conf,
|
||||
struct config_entry_list *list, char *line)
|
||||
struct config_entry_list *list, char *line, config_file_cb_t *cb)
|
||||
{
|
||||
char *comment = NULL;
|
||||
char *key_tmp = NULL;
|
||||
@ -351,7 +351,7 @@ static bool parse_line(config_file_t *conf,
|
||||
if (conf->include_depth >= MAX_INCLUDE_DEPTH)
|
||||
fprintf(stderr, "!!! #include depth exceeded for config. Might be a cycle.\n");
|
||||
else
|
||||
add_sub_conf(conf, path);
|
||||
add_sub_conf(conf, path, cb);
|
||||
free(path);
|
||||
}
|
||||
goto error;
|
||||
@ -396,18 +396,19 @@ error:
|
||||
}
|
||||
|
||||
static config_file_t *config_file_new_internal(
|
||||
const char *path, unsigned depth)
|
||||
const char *path, unsigned depth, config_file_cb_t *cb)
|
||||
{
|
||||
RFILE *file = NULL;
|
||||
struct config_file *conf = (struct config_file*)malloc(sizeof(*conf));
|
||||
if (!conf)
|
||||
return NULL;
|
||||
|
||||
conf->path = NULL;
|
||||
conf->entries = NULL;
|
||||
conf->tail = NULL;
|
||||
conf->includes = NULL;
|
||||
conf->include_depth = 0;
|
||||
conf->path = NULL;
|
||||
conf->entries = NULL;
|
||||
conf->tail = NULL;
|
||||
conf->includes = NULL;
|
||||
conf->include_depth = 0;
|
||||
conf->guaranteed_no_duplicates = false ;
|
||||
|
||||
if (!path || !*path)
|
||||
return conf;
|
||||
@ -455,7 +456,7 @@ static config_file_t *config_file_new_internal(
|
||||
continue;
|
||||
}
|
||||
|
||||
if (*line && parse_line(conf, list, line))
|
||||
if (*line && parse_line(conf, list, line, cb))
|
||||
{
|
||||
if (conf->entries)
|
||||
conf->tail->next = list;
|
||||
@ -463,6 +464,9 @@ static config_file_t *config_file_new_internal(
|
||||
conf->entries = list;
|
||||
|
||||
conf->tail = list;
|
||||
|
||||
if (cb != NULL && list->key != NULL && list->value != NULL)
|
||||
cb->config_file_new_entry_cb(list->key, list->value) ;
|
||||
}
|
||||
|
||||
free(line);
|
||||
@ -551,11 +555,12 @@ config_file_t *config_file_new_from_string(const char *from_string)
|
||||
if (!from_string)
|
||||
return conf;
|
||||
|
||||
conf->path = NULL;
|
||||
conf->entries = NULL;
|
||||
conf->tail = NULL;
|
||||
conf->includes = NULL;
|
||||
conf->include_depth = 0;
|
||||
conf->path = NULL;
|
||||
conf->entries = NULL;
|
||||
conf->tail = NULL;
|
||||
conf->includes = NULL;
|
||||
conf->include_depth = 0;
|
||||
conf->guaranteed_no_duplicates = false ;
|
||||
|
||||
lines = string_split(from_string, "\n");
|
||||
if (!lines)
|
||||
@ -580,7 +585,7 @@ config_file_t *config_file_new_from_string(const char *from_string)
|
||||
|
||||
if (line && conf)
|
||||
{
|
||||
if (*line && parse_line(conf, list, line))
|
||||
if (*line && parse_line(conf, list, line, NULL))
|
||||
{
|
||||
if (conf->entries)
|
||||
conf->tail->next = list;
|
||||
@ -600,9 +605,13 @@ config_file_t *config_file_new_from_string(const char *from_string)
|
||||
return conf;
|
||||
}
|
||||
|
||||
config_file_t *config_file_new_with_callback(const char *path, config_file_cb_t *cb)
|
||||
{
|
||||
return config_file_new_internal(path, 0, cb);
|
||||
}
|
||||
config_file_t *config_file_new(const char *path)
|
||||
{
|
||||
return config_file_new_internal(path, 0);
|
||||
return config_file_new_internal(path, 0, NULL);
|
||||
}
|
||||
|
||||
static struct config_entry_list *config_get_entry(const config_file_t *conf,
|
||||
@ -834,7 +843,7 @@ bool config_get_bool(config_file_t *conf, const char *key, bool *in)
|
||||
void config_set_string(config_file_t *conf, const char *key, const char *val)
|
||||
{
|
||||
struct config_entry_list *last = conf->entries;
|
||||
struct config_entry_list *entry = config_get_entry(conf, key, &last);
|
||||
struct config_entry_list *entry = conf->guaranteed_no_duplicates?NULL:config_get_entry(conf, key, &last);
|
||||
|
||||
if (entry && !entry->readonly)
|
||||
{
|
||||
|
@ -58,6 +58,7 @@ struct config_file
|
||||
struct config_entry_list *entries;
|
||||
struct config_entry_list *tail;
|
||||
unsigned include_depth;
|
||||
bool guaranteed_no_duplicates;
|
||||
|
||||
struct config_include_list *includes;
|
||||
};
|
||||
@ -65,6 +66,13 @@ struct config_file
|
||||
|
||||
typedef struct config_file config_file_t;
|
||||
|
||||
struct config_file_cb
|
||||
{
|
||||
void (*config_file_new_entry_cb)(char*, char*);
|
||||
};
|
||||
|
||||
typedef struct config_file_cb config_file_cb_t ;
|
||||
|
||||
/* Config file format
|
||||
* - # are treated as comments. Rest of the line is ignored.
|
||||
* - Format is: key = value. There can be as many spaces as you like in-between.
|
||||
@ -79,6 +87,11 @@ typedef struct config_file config_file_t;
|
||||
* NULL path will create an empty config file. */
|
||||
config_file_t *config_file_new(const char *path);
|
||||
|
||||
/* Loads a config file. Returns NULL if file doesn't exist.
|
||||
* NULL path will create an empty config file.
|
||||
* Includes cb callbacks to run custom code during config file processing.*/
|
||||
config_file_t *config_file_new_with_callback(const char *path, config_file_cb_t *cb);
|
||||
|
||||
/* Load a config file from a string. */
|
||||
config_file_t *config_file_new_from_string(const char *from_string);
|
||||
|
||||
|
@ -52,6 +52,23 @@ typedef unsigned sthread_tls_t;
|
||||
*/
|
||||
sthread_t *sthread_create(void (*thread_func)(void*), void *userdata);
|
||||
|
||||
/**
|
||||
* sthread_create_with_priority:
|
||||
* @start_routine : thread entry callback function
|
||||
* @userdata : pointer to userdata that will be made
|
||||
* available in thread entry callback function
|
||||
* @thread_priority : thread priority hint value from [1-100]
|
||||
*
|
||||
* Create a new thread. It is possible for the caller to give a hint
|
||||
* for the thread's priority from [1-100]. Any passed in @thread_priority
|
||||
* values that are outside of this range will cause sthread_create() to
|
||||
* create a new thread using the operating system's default thread
|
||||
* priority.
|
||||
*
|
||||
* Returns: pointer to new thread if successful, otherwise NULL.
|
||||
*/
|
||||
sthread_t *sthread_create_with_priority(void (*thread_func)(void*), void *userdata, int thread_priority);
|
||||
|
||||
/**
|
||||
* sthread_detach:
|
||||
* @thread : pointer to thread object
|
||||
|
@ -27,6 +27,7 @@
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <boolean.h>
|
||||
#include <rthreads/rthreads.h>
|
||||
@ -161,6 +162,35 @@ static void *thread_wrap(void *data_)
|
||||
*/
|
||||
sthread_t *sthread_create(void (*thread_func)(void*), void *userdata)
|
||||
{
|
||||
return sthread_create_with_priority(thread_func, userdata, 0);
|
||||
}
|
||||
|
||||
/* TODO/FIXME - this needs to be implemented for Switch/3DS */
|
||||
#if !defined(SWITCH) && !defined(USE_WIN32_THREADS) && !defined(_3DS) && !defined(GEKKO)
|
||||
#define HAVE_THREAD_ATTR
|
||||
#endif
|
||||
|
||||
/**
|
||||
* sthread_create_with_priority:
|
||||
* @start_routine : thread entry callback function
|
||||
* @userdata : pointer to userdata that will be made
|
||||
* available in thread entry callback function
|
||||
* @thread_priority : thread priority hint value from [1-100]
|
||||
*
|
||||
* Create a new thread. It is possible for the caller to give a hint
|
||||
* for the thread's priority from [1-100]. Any passed in @thread_priority
|
||||
* values that are outside of this range will cause sthread_create() to
|
||||
* create a new thread using the operating system's default thread
|
||||
* priority.
|
||||
*
|
||||
* Returns: pointer to new thread if successful, otherwise NULL.
|
||||
*/
|
||||
sthread_t *sthread_create_with_priority(void (*thread_func)(void*), void *userdata, int thread_priority)
|
||||
{
|
||||
#ifdef HAVE_THREAD_ATTR
|
||||
pthread_attr_t thread_attr;
|
||||
bool thread_attr_needed = false;
|
||||
#endif
|
||||
bool thread_created = false;
|
||||
struct thread_data *data = NULL;
|
||||
sthread_t *thread = (sthread_t*)calloc(1, sizeof(*thread));
|
||||
@ -172,27 +202,48 @@ sthread_t *sthread_create(void (*thread_func)(void*), void *userdata)
|
||||
if (!data)
|
||||
goto error;
|
||||
|
||||
data->func = thread_func;
|
||||
data->userdata = userdata;
|
||||
data->func = thread_func;
|
||||
data->userdata = userdata;
|
||||
|
||||
#ifdef USE_WIN32_THREADS
|
||||
thread->thread = CreateThread(NULL, 0, thread_wrap, data, 0, &thread->id);
|
||||
thread_created = !!thread->thread;
|
||||
thread->thread = CreateThread(NULL, 0, thread_wrap, data, 0, &thread->id);
|
||||
thread_created = !!thread->thread;
|
||||
#else
|
||||
#if defined(VITA)
|
||||
pthread_attr_t thread_attr;
|
||||
|
||||
#ifdef HAVE_THREAD_ATTR
|
||||
pthread_attr_init(&thread_attr);
|
||||
|
||||
if ( (thread_priority >= 1) && (thread_priority <= 100) )
|
||||
{
|
||||
struct sched_param sp;
|
||||
memset(&sp, 0, sizeof(struct sched_param));
|
||||
sp.sched_priority = thread_priority;
|
||||
pthread_attr_setschedpolicy(&thread_attr, SCHED_RR);
|
||||
pthread_attr_setschedparam(&thread_attr, &sp);
|
||||
|
||||
thread_attr_needed = true;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(VITA)
|
||||
pthread_attr_setstacksize(&thread_attr , 0x10000 );
|
||||
thread_created = pthread_create(&thread->id, &thread_attr, thread_wrap, data) == 0;
|
||||
#else
|
||||
thread_created = pthread_create(&thread->id, NULL, thread_wrap, data) == 0;
|
||||
thread_attr_needed = true;
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_THREAD_ATTR
|
||||
if (thread_attr_needed)
|
||||
thread_created = pthread_create(&thread->id, &thread_attr, thread_wrap, data) == 0;
|
||||
else
|
||||
#endif
|
||||
thread_created = pthread_create(&thread->id, NULL, thread_wrap, data) == 0;
|
||||
|
||||
#ifdef HAVE_THREAD_ATTR
|
||||
pthread_attr_destroy(&thread_attr);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
if (!thread_created)
|
||||
goto error;
|
||||
|
||||
return thread;
|
||||
if (thread_created)
|
||||
return thread;
|
||||
|
||||
error:
|
||||
if (data)
|
||||
|
@ -28,30 +28,29 @@
|
||||
#include <switch.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "../include/retro_inline.h"
|
||||
#include "../../verbosity.h"
|
||||
#include <retro_inline.h>
|
||||
|
||||
#define THREADVARS_MAGIC 0x21545624 // !TV$
|
||||
#define THREADVARS_MAGIC 0x21545624 /* !TV$ */
|
||||
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);
|
||||
void pthread_exit(void *retval);
|
||||
|
||||
// This structure is exactly 0x20 bytes, if more is needed modify getThreadVars() below
|
||||
/* This structure is exactly 0x20 bytes, if more is needed modify getThreadVars() below */
|
||||
typedef struct
|
||||
{
|
||||
// Magic value used to check if the struct is initialized
|
||||
/* Magic value used to check if the struct is initialized */
|
||||
u32 magic;
|
||||
|
||||
// Thread handle, for mutexes
|
||||
/* Thread handle, for mutexes */
|
||||
Handle handle;
|
||||
|
||||
// Pointer to the current thread (if exists)
|
||||
/* Pointer to the current thread (if exists) */
|
||||
Thread *thread_ptr;
|
||||
|
||||
// Pointer to this thread's newlib state
|
||||
/* Pointer to this thread's newlib state */
|
||||
struct _reent *reent;
|
||||
|
||||
// Pointer to this thread's thread-local segment
|
||||
void *tls_tp; // !! Offset needs to be TLS+0x1F8 for __aarch64_read_tp !!
|
||||
/* Pointer to this thread's thread-local segment */
|
||||
void *tls_tp; /* !! Offset needs to be TLS+0x1F8 for __aarch64_read_tp !! */
|
||||
} ThreadVars;
|
||||
|
||||
static INLINE ThreadVars *getThreadVars(void)
|
||||
@ -77,9 +76,9 @@ static INLINE int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutex
|
||||
return 0;
|
||||
}
|
||||
|
||||
INLINE int pthread_mutex_destroy(pthread_mutex_t *mutex)
|
||||
static INLINE int pthread_mutex_destroy(pthread_mutex_t *mutex)
|
||||
{
|
||||
// Nothing
|
||||
/* Nothing */
|
||||
*mutex = 0;
|
||||
|
||||
return 0;
|
||||
@ -101,7 +100,7 @@ static INLINE int pthread_mutex_unlock(pthread_mutex_t *mutex)
|
||||
INLINE int pthread_detach(pthread_t thread)
|
||||
{
|
||||
(void)thread;
|
||||
// Nothing for now
|
||||
/* Nothing for now */
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -154,7 +153,7 @@ static INLINE int pthread_cond_broadcast(pthread_cond_t *cond)
|
||||
|
||||
INLINE int pthread_cond_destroy(pthread_cond_t *cond)
|
||||
{
|
||||
// Nothing
|
||||
/* Nothing */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <stddef.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <file/config_file.h>
|
||||
#include <file/file_path.h>
|
||||
@ -171,6 +172,8 @@ bool cheat_manager_save(const char *path, const char *cheat_database, bool overw
|
||||
if (!conf)
|
||||
return false;
|
||||
|
||||
conf->guaranteed_no_duplicates = true ;
|
||||
|
||||
config_set_int(conf, "cheats", cheat_manager_state.size);
|
||||
|
||||
for (i = 0; i < cheat_manager_state.size; i++)
|
||||
@ -303,39 +306,119 @@ static void cheat_manager_new(unsigned size)
|
||||
return ;
|
||||
}
|
||||
|
||||
void cheat_manager_load_cb_first_pass(char *key, char *value)
|
||||
{
|
||||
errno = 0 ;
|
||||
|
||||
if (string_is_equal(key, "cheats"))
|
||||
{
|
||||
cheat_manager_state.loading_cheat_size = (unsigned)strtoul(value, NULL, 0);
|
||||
|
||||
if (errno != 0)
|
||||
cheat_manager_state.loading_cheat_size = 0 ;
|
||||
}
|
||||
}
|
||||
|
||||
void cheat_manager_load_cb_second_pass(char *key, char *value)
|
||||
{
|
||||
char cheat_num_str[20] ;
|
||||
unsigned cheat_num ;
|
||||
unsigned cheat_idx ;
|
||||
int idx = 0 ;
|
||||
int key_length ;
|
||||
errno = 0 ;
|
||||
|
||||
if (strncmp(key, "cheat", 5) != 0)
|
||||
return ;
|
||||
|
||||
idx = 5 ;
|
||||
key_length = strlen(key) ;
|
||||
|
||||
while (idx < key_length && key[idx] >= '0' && key[idx] <= '9' && idx < 24)
|
||||
{
|
||||
cheat_num_str[idx-5] = key[idx] ;
|
||||
idx++ ;
|
||||
}
|
||||
|
||||
cheat_num_str[idx-5] = '\0' ;
|
||||
|
||||
cheat_num = (unsigned)strtoul(cheat_num_str, NULL, 0); ;
|
||||
|
||||
if (cheat_num+cheat_manager_state.loading_cheat_offset >= cheat_manager_state.size)
|
||||
return ;
|
||||
|
||||
key = key+idx+1 ;
|
||||
|
||||
cheat_idx = cheat_num+cheat_manager_state.loading_cheat_offset ;
|
||||
|
||||
if (string_is_equal(key, "address"))
|
||||
cheat_manager_state.cheats[cheat_idx].address = (unsigned)strtoul(value, NULL, 0);
|
||||
else if (string_is_equal(key, "address_bit_position"))
|
||||
cheat_manager_state.cheats[cheat_idx].address_mask = (unsigned)strtoul(value, NULL, 0);
|
||||
else if (string_is_equal(key, "big_endian"))
|
||||
cheat_manager_state.cheats[cheat_idx].big_endian = (string_is_equal(value,"true") || string_is_equal(value,"1"));
|
||||
else if (string_is_equal(key, "cheat_type"))
|
||||
cheat_manager_state.cheats[cheat_idx].cheat_type = (unsigned)strtoul(value, NULL, 0);
|
||||
else if (string_is_equal(key, "code"))
|
||||
cheat_manager_state.cheats[cheat_idx].code = strdup(value) ;
|
||||
else if (string_is_equal(key, "desc"))
|
||||
cheat_manager_state.cheats[cheat_idx].desc = strdup(value) ;
|
||||
else if (string_is_equal(key, "enable"))
|
||||
cheat_manager_state.cheats[cheat_idx].state = (string_is_equal(value,"true") || string_is_equal(value,"1"));
|
||||
else if (string_is_equal(key, "handler"))
|
||||
cheat_manager_state.cheats[cheat_idx].handler = (unsigned)strtoul(value, NULL, 0);
|
||||
else if (string_is_equal(key, "memory_search_size"))
|
||||
cheat_manager_state.cheats[cheat_idx].memory_search_size = (unsigned)strtoul(value, NULL, 0);
|
||||
else if (string_is_equal(key, "repeat_add_to_address"))
|
||||
cheat_manager_state.cheats[cheat_idx].repeat_add_to_address = (unsigned)strtoul(value, NULL, 0);
|
||||
else if (string_is_equal(key, "repeat_add_to_value"))
|
||||
cheat_manager_state.cheats[cheat_idx].repeat_add_to_value = (unsigned)strtoul(value, NULL, 0);
|
||||
else if (string_is_equal(key, "repeat_count"))
|
||||
cheat_manager_state.cheats[cheat_idx].repeat_count = (unsigned)strtoul(value, NULL, 0);
|
||||
else if (string_is_equal(key, "rumble_port"))
|
||||
cheat_manager_state.cheats[cheat_idx].rumble_port = (unsigned)strtoul(value, NULL, 0);
|
||||
else if (string_is_equal(key, "rumble_primary_duration"))
|
||||
cheat_manager_state.cheats[cheat_idx].rumble_primary_duration = (unsigned)strtoul(value, NULL, 0);
|
||||
else if (string_is_equal(key, "rumble_primary_strength"))
|
||||
cheat_manager_state.cheats[cheat_idx].rumble_primary_strength = (unsigned)strtoul(value, NULL, 0);
|
||||
else if (string_is_equal(key, "rumble_secondary_duration"))
|
||||
cheat_manager_state.cheats[cheat_idx].rumble_secondary_duration = (unsigned)strtoul(value, NULL, 0);
|
||||
else if (string_is_equal(key, "rumble_secondary_strength"))
|
||||
cheat_manager_state.cheats[cheat_idx].rumble_secondary_strength = (unsigned)strtoul(value, NULL, 0);
|
||||
else if (string_is_equal(key, "rumble_type"))
|
||||
cheat_manager_state.cheats[cheat_idx].rumble_type = (unsigned)strtoul(value, NULL, 0);
|
||||
else if (string_is_equal(key, "rumble_value"))
|
||||
cheat_manager_state.cheats[cheat_idx].rumble_value = (unsigned)strtoul(value, NULL, 0);
|
||||
else if (string_is_equal(key, "value"))
|
||||
cheat_manager_state.cheats[cheat_idx].value = (unsigned)strtoul(value, NULL, 0);
|
||||
|
||||
}
|
||||
|
||||
bool cheat_manager_load(const char *path, bool append)
|
||||
{
|
||||
unsigned orig_size;
|
||||
unsigned cheats = 0, i;
|
||||
config_file_t *conf = config_file_new(path);
|
||||
unsigned orig_size ;
|
||||
unsigned int* data_ptrs[16] = { NULL};
|
||||
char* keys[16] = {
|
||||
"cheat%u_handler",
|
||||
"cheat%u_memory_search_size",
|
||||
"cheat%u_cheat_type",
|
||||
"cheat%u_value",
|
||||
"cheat%u_address",
|
||||
"cheat%u_address_bit_position",
|
||||
"cheat%u_rumble_type",
|
||||
"cheat%u_rumble_value",
|
||||
"cheat%u_rumble_port",
|
||||
"cheat%u_rumble_primary_strength",
|
||||
"cheat%u_rumble_primary_duration",
|
||||
"cheat%u_rumble_secondary_strength",
|
||||
"cheat%u_rumble_secondary_duration",
|
||||
"cheat%u_repeat_count",
|
||||
"cheat%u_repeat_add_to_value",
|
||||
"cheat%u_repeat_add_to_address",
|
||||
};
|
||||
config_file_cb_t cb;
|
||||
config_file_t *conf = NULL;
|
||||
|
||||
cb.config_file_new_entry_cb = cheat_manager_load_cb_first_pass ;
|
||||
|
||||
cheat_manager_state.loading_cheat_size = 0 ;
|
||||
|
||||
conf = config_file_new_with_callback(path, &cb);
|
||||
|
||||
if (!conf)
|
||||
return false;
|
||||
|
||||
config_get_uint(conf, "cheats", &cheats);
|
||||
cheats = cheat_manager_state.loading_cheat_size ;
|
||||
|
||||
if (cheats == 0)
|
||||
goto error;
|
||||
|
||||
config_file_free(conf) ;
|
||||
conf = NULL ;
|
||||
|
||||
|
||||
cheat_manager_alloc_if_empty() ;
|
||||
|
||||
if ( append )
|
||||
@ -359,75 +442,25 @@ bool cheat_manager_load(const char *path, bool append)
|
||||
cheat_manager_new(cheats);
|
||||
}
|
||||
|
||||
|
||||
for (i = orig_size; i < cheats; i++)
|
||||
{
|
||||
unsigned j;
|
||||
char desc_key[256];
|
||||
char code_key[256];
|
||||
char enable_key[256];
|
||||
char endian_key[256];
|
||||
char *tmp = NULL;
|
||||
bool tmp_bool = false;
|
||||
|
||||
data_ptrs[0] = &cheat_manager_state.cheats[i].handler;
|
||||
data_ptrs[1] = &cheat_manager_state.cheats[i].memory_search_size;
|
||||
data_ptrs[2] = &cheat_manager_state.cheats[i].cheat_type;
|
||||
data_ptrs[3] = &cheat_manager_state.cheats[i].value;
|
||||
data_ptrs[4] = &cheat_manager_state.cheats[i].address;
|
||||
data_ptrs[5] = &cheat_manager_state.cheats[i].address_mask;
|
||||
data_ptrs[6] = &cheat_manager_state.cheats[i].rumble_type;
|
||||
data_ptrs[7] = &cheat_manager_state.cheats[i].rumble_value;
|
||||
data_ptrs[8] = &cheat_manager_state.cheats[i].rumble_port;
|
||||
data_ptrs[9] = &cheat_manager_state.cheats[i].rumble_primary_strength;
|
||||
data_ptrs[10] = &cheat_manager_state.cheats[i].rumble_primary_duration;
|
||||
data_ptrs[11] = &cheat_manager_state.cheats[i].rumble_secondary_strength;
|
||||
data_ptrs[12] = &cheat_manager_state.cheats[i].rumble_secondary_duration;
|
||||
data_ptrs[13] = &cheat_manager_state.cheats[i].repeat_count;
|
||||
data_ptrs[14] = &cheat_manager_state.cheats[i].repeat_add_to_value;
|
||||
data_ptrs[15] = &cheat_manager_state.cheats[i].repeat_add_to_address;
|
||||
|
||||
endian_key[0] = desc_key[0] = code_key[0] = enable_key[0] = '\0';
|
||||
|
||||
snprintf(desc_key, sizeof(desc_key), "cheat%u_desc", i-orig_size);
|
||||
snprintf(code_key, sizeof(code_key), "cheat%u_code", i-orig_size);
|
||||
snprintf(enable_key, sizeof(enable_key), "cheat%u_enable", i-orig_size);
|
||||
snprintf(endian_key, sizeof(endian_key), "cheat%u_endian", i-orig_size);
|
||||
|
||||
cheat_manager_state.cheats[i].idx = i ;
|
||||
|
||||
cheat_manager_state.cheats[i].desc = NULL ;
|
||||
cheat_manager_state.cheats[i].code = NULL ;
|
||||
cheat_manager_state.cheats[i].state = false ;
|
||||
cheat_manager_state.cheats[i].big_endian = false ;
|
||||
|
||||
if (config_get_string(conf, desc_key, &tmp) && !string_is_empty(tmp))
|
||||
cheat_manager_state.cheats[i].desc = strdup(tmp) ;
|
||||
|
||||
if (config_get_string(conf, code_key, &tmp) && !string_is_empty(tmp))
|
||||
cheat_manager_state.cheats[i].code = strdup(tmp) ;
|
||||
|
||||
if (config_get_bool(conf, enable_key, &tmp_bool))
|
||||
cheat_manager_state.cheats[i].state = tmp_bool;
|
||||
|
||||
if (config_get_bool(conf, endian_key, &tmp_bool))
|
||||
cheat_manager_state.cheats[i].big_endian = tmp_bool;
|
||||
|
||||
if (tmp)
|
||||
free(tmp);
|
||||
|
||||
cheat_manager_state.cheats[i].cheat_type = CHEAT_TYPE_SET_TO_VALUE ;
|
||||
cheat_manager_state.cheats[i].memory_search_size = 3;
|
||||
for (j = 0 ; j < 16 ; j++ )
|
||||
{
|
||||
char key[50] ;
|
||||
unsigned val = 0;
|
||||
snprintf(key, sizeof(key), keys[j], i-orig_size);
|
||||
|
||||
if ( config_get_uint(conf, key, &val))
|
||||
*(data_ptrs[j]) = val ;
|
||||
}
|
||||
}
|
||||
|
||||
cheat_manager_state.loading_cheat_offset = orig_size ;
|
||||
cb.config_file_new_entry_cb = cheat_manager_load_cb_second_pass ;
|
||||
conf = config_file_new_with_callback(path, &cb);
|
||||
|
||||
if (!conf)
|
||||
return false;
|
||||
|
||||
config_file_free(conf);
|
||||
|
||||
return true;
|
||||
|
@ -77,7 +77,8 @@ enum cheat_rumble_type
|
||||
RUMBLE_TYPE_LT_VALUE,
|
||||
RUMBLE_TYPE_GT_VALUE,
|
||||
RUMBLE_TYPE_INCREASE_BY_VALUE,
|
||||
RUMBLE_TYPE_DECREASE_BY_VALUE
|
||||
RUMBLE_TYPE_DECREASE_BY_VALUE,
|
||||
RUMBLE_TYPE_END_LIST
|
||||
};
|
||||
|
||||
/* Some codes are ridiculously large - over 10000 bytes */
|
||||
@ -178,6 +179,8 @@ struct cheat_manager
|
||||
unsigned browse_address;
|
||||
char working_desc[CHEAT_DESC_SCRATCH_SIZE] ;
|
||||
char working_code[CHEAT_CODE_SCRATCH_SIZE] ;
|
||||
unsigned int loading_cheat_size;
|
||||
unsigned int loading_cheat_offset;
|
||||
};
|
||||
|
||||
typedef struct cheat_manager cheat_manager_t;
|
||||
|
@ -3929,6 +3929,7 @@ void netplay_refresh_rooms_menu(file_list_t *list)
|
||||
{
|
||||
char s[8300];
|
||||
int i = 0;
|
||||
int room_type = 0;
|
||||
|
||||
s[0] = '\0';
|
||||
|
||||
@ -4008,14 +4009,16 @@ void netplay_refresh_rooms_menu(file_list_t *list)
|
||||
snprintf(s, sizeof(s), "%s: %s%s",
|
||||
netplay_room_list[i].lan ? "Local" :
|
||||
(netplay_room_list[i].host_method == NETPLAY_HOST_METHOD_MITM ?
|
||||
"Internet (relay)" : "Internet (direct)"),
|
||||
"Internet (Relay)" : "Internet"),
|
||||
netplay_room_list[i].nickname, country);
|
||||
|
||||
room_type = netplay_room_list[i].lan ? MENU_ROOM_LAN : (netplay_room_list[i].host_method == NETPLAY_HOST_METHOD_MITM ? MENU_ROOM_RELAY : MENU_ROOM);
|
||||
|
||||
menu_entries_append_enum(list,
|
||||
s,
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_CONNECT_NETPLAY_ROOM),
|
||||
MENU_ENUM_LABEL_CONNECT_NETPLAY_ROOM,
|
||||
MENU_SETTINGS_NETPLAY_ROOMS_START + i, 0, 0);
|
||||
room_type, 0, 0);
|
||||
}
|
||||
|
||||
netplay_rooms_free();
|
||||
|
@ -296,6 +296,7 @@ default_sublabel_macro(action_bind_sublabel_pointer_enable, MENU_
|
||||
default_sublabel_macro(action_bind_sublabel_thumbnails, MENU_ENUM_SUBLABEL_THUMBNAILS)
|
||||
default_sublabel_macro(action_bind_sublabel_left_thumbnails, MENU_ENUM_SUBLABEL_LEFT_THUMBNAILS)
|
||||
default_sublabel_macro(action_bind_sublabel_timedate_enable, MENU_ENUM_SUBLABEL_TIMEDATE_ENABLE)
|
||||
default_sublabel_macro(action_bind_sublabel_timedate_style, MENU_ENUM_SUBLABEL_TIMEDATE_STYLE)
|
||||
default_sublabel_macro(action_bind_sublabel_battery_level_enable, MENU_ENUM_SUBLABEL_BATTERY_LEVEL_ENABLE)
|
||||
default_sublabel_macro(action_bind_sublabel_navigation_wraparound, MENU_ENUM_SUBLABEL_NAVIGATION_WRAPAROUND)
|
||||
default_sublabel_macro(action_bind_sublabel_audio_resampler_quality, MENU_ENUM_SUBLABEL_AUDIO_RESAMPLER_QUALITY)
|
||||
@ -530,12 +531,14 @@ static int action_bind_sublabel_remap_kbd_sublabel(
|
||||
{
|
||||
unsigned user_idx = (type - MENU_SETTINGS_INPUT_DESC_KBD_BEGIN) / RARCH_FIRST_CUSTOM_BIND;
|
||||
|
||||
snprintf(s, len, "User #%d: %s", user_idx + 1,
|
||||
input_config_get_device_display_name(user_idx) ?
|
||||
input_config_get_device_display_name(user_idx) :
|
||||
(input_config_get_device_name(user_idx) ?
|
||||
input_config_get_device_name(user_idx) :
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE)));
|
||||
snprintf(s, len, "%s #%d: %s",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_USER),
|
||||
user_idx + 1,
|
||||
input_config_get_device_display_name(user_idx) ?
|
||||
input_config_get_device_display_name(user_idx) :
|
||||
(input_config_get_device_name(user_idx) ?
|
||||
input_config_get_device_name(user_idx) :
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE)));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -588,12 +591,14 @@ static int action_bind_sublabel_remap_sublabel(
|
||||
unsigned offset = (type - MENU_SETTINGS_INPUT_DESC_BEGIN)
|
||||
/ (RARCH_FIRST_CUSTOM_BIND + 8);
|
||||
|
||||
snprintf(s, len, "User #%d: %s", offset + 1,
|
||||
input_config_get_device_display_name(offset) ?
|
||||
input_config_get_device_display_name(offset) :
|
||||
(input_config_get_device_name(offset) ?
|
||||
input_config_get_device_name(offset) :
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE)));
|
||||
snprintf(s, len, "%s #%d: %s",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_USER),
|
||||
offset + 1,
|
||||
input_config_get_device_display_name(offset) ?
|
||||
input_config_get_device_display_name(offset) :
|
||||
(input_config_get_device_name(offset) ?
|
||||
input_config_get_device_name(offset) :
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE)));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1290,6 +1295,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
|
||||
case MENU_ENUM_LABEL_TIMEDATE_ENABLE:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_timedate_enable);
|
||||
break;
|
||||
case MENU_ENUM_LABEL_TIMEDATE_STYLE:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_timedate_style);
|
||||
break;
|
||||
case MENU_ENUM_LABEL_THUMBNAILS:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_thumbnails);
|
||||
break;
|
||||
|
@ -596,7 +596,7 @@ static void rgui_render(void *data, bool is_idle)
|
||||
|
||||
datetime.s = timedate;
|
||||
datetime.len = sizeof(timedate);
|
||||
datetime.time_mode = 3;
|
||||
datetime.time_mode = 4;
|
||||
|
||||
menu_display_timedate(&datetime);
|
||||
|
||||
|
@ -105,13 +105,8 @@ enum
|
||||
#ifdef HAVE_NETWORKING
|
||||
XMB_TEXTURE_NETPLAY,
|
||||
XMB_TEXTURE_ROOM,
|
||||
XMB_TEXTURE_IROOM,
|
||||
XMB_TEXTURE_LANROOM,
|
||||
#if 0
|
||||
/* stub these out until we have the icons */
|
||||
XMB_TEXTURE_ROOM_LAN,
|
||||
XMB_TEXTURE_ROOM_MITM,
|
||||
#endif
|
||||
XMB_TEXTURE_ROOM_RELAY,
|
||||
#endif
|
||||
#ifdef HAVE_IMAGEVIEWER
|
||||
XMB_TEXTURE_IMAGES,
|
||||
@ -2426,9 +2421,7 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
|
||||
case MENU_ENUM_LABEL_NETPLAY_ENABLE_CLIENT:
|
||||
return xmb->textures.list[XMB_TEXTURE_ROOM];
|
||||
case MENU_ENUM_LABEL_NETPLAY_REFRESH_ROOMS:
|
||||
return xmb->textures.list[XMB_TEXTURE_IROOM];
|
||||
case MENU_ENUM_LABEL_NETPLAY_LAN_SCAN_SETTINGS:
|
||||
return xmb->textures.list[XMB_TEXTURE_LANROOM];
|
||||
return xmb->textures.list[XMB_TEXTURE_RELOAD];
|
||||
#endif
|
||||
default:
|
||||
break;
|
||||
@ -2519,10 +2512,7 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
|
||||
return xmb->textures.list[XMB_TEXTURE_RESUME];
|
||||
case MENU_SETTING_ACTION_RESUME_ACHIEVEMENTS:
|
||||
return xmb->textures.list[XMB_TEXTURE_RUN];
|
||||
case MENU_SETTING_ACTION:
|
||||
if (xmb->depth == 3)
|
||||
return xmb->textures.list[XMB_TEXTURE_SUBSETTING];
|
||||
return xmb->textures.list[XMB_TEXTURE_SETTING];
|
||||
|
||||
case MENU_SETTING_GROUP:
|
||||
#ifdef HAVE_LAKKA_SWITCH
|
||||
case MENU_SET_SWITCH_BRIGHTNESS:
|
||||
@ -2535,14 +2525,16 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
|
||||
#ifdef HAVE_NETWORKING
|
||||
case MENU_ROOM:
|
||||
return xmb->textures.list[XMB_TEXTURE_ROOM];
|
||||
#if 0
|
||||
/* stub these out until we have the icons */
|
||||
case MENU_ROOM_LAN:
|
||||
return xmb->textures.list[XMB_TEXTURE_ROOM_LAN];
|
||||
case MENU_ROOM_MITM:
|
||||
return xmb->textures.list[XMB_TEXTURE_ROOM_MITM];
|
||||
#endif
|
||||
case MENU_ROOM_RELAY:
|
||||
return xmb->textures.list[XMB_TEXTURE_ROOM_RELAY];
|
||||
#endif
|
||||
case MENU_SETTING_ACTION:
|
||||
if (xmb->depth <= 3)
|
||||
return xmb->textures.list[XMB_TEXTURE_SETTING];
|
||||
default:
|
||||
return xmb->textures.list[XMB_TEXTURE_SUBSETTING];
|
||||
}
|
||||
|
||||
#ifdef HAVE_CHEEVOS
|
||||
@ -2748,7 +2740,7 @@ static int xmb_draw_item(
|
||||
if (i == current && width > 320 && height > 240
|
||||
&& !string_is_empty(entry->sublabel))
|
||||
{
|
||||
char entry_sublabel[255] = {0};
|
||||
char entry_sublabel[512] = {0};
|
||||
|
||||
label_offset = - xmb->margins_label_top;
|
||||
|
||||
@ -3636,7 +3628,7 @@ static void xmb_frame(void *data, video_frame_info_t *video_info)
|
||||
|
||||
datetime.s = timedate;
|
||||
datetime.len = sizeof(timedate);
|
||||
datetime.time_mode = 4;
|
||||
datetime.time_mode = settings->uints.menu_timedate_style;
|
||||
|
||||
menu_display_timedate(&datetime);
|
||||
|
||||
@ -4443,188 +4435,285 @@ static bool xmb_load_image(void *userdata, void *data, enum menu_image_type type
|
||||
|
||||
static const char *xmb_texture_path(unsigned id)
|
||||
{
|
||||
char *iconpath = (char*) malloc(PATH_MAX_LENGTH * sizeof(char));
|
||||
char *icon_name = (char*) malloc(PATH_MAX_LENGTH * sizeof(char));
|
||||
char *icon_fullpath = (char*) malloc(PATH_MAX_LENGTH * sizeof(char));
|
||||
|
||||
iconpath[0] = icon_name[0] = icon_fullpath[0] = '\0';
|
||||
|
||||
switch (id)
|
||||
{
|
||||
case XMB_TEXTURE_MAIN_MENU:
|
||||
#if defined(HAVE_LAKKA)
|
||||
return "lakka.png";
|
||||
icon_name = "lakka.png";
|
||||
break;
|
||||
#else
|
||||
return "retroarch.png";
|
||||
icon_name = "retroarch.png";
|
||||
break;
|
||||
#endif
|
||||
case XMB_TEXTURE_SETTINGS:
|
||||
return "settings.png";
|
||||
icon_name = "settings.png";
|
||||
break;
|
||||
case XMB_TEXTURE_HISTORY:
|
||||
return "history.png";
|
||||
icon_name = "history.png";
|
||||
break;
|
||||
case XMB_TEXTURE_FAVORITES:
|
||||
return "favorites.png";
|
||||
icon_name = "favorites.png";
|
||||
break;
|
||||
case XMB_TEXTURE_ADD_FAVORITE:
|
||||
return "add-favorite.png";
|
||||
icon_name = "add-favorite.png";
|
||||
break;
|
||||
case XMB_TEXTURE_MUSICS:
|
||||
return "musics.png";
|
||||
icon_name = "musics.png";
|
||||
break;
|
||||
#if defined(HAVE_FFMPEG) || defined(HAVE_MPV)
|
||||
case XMB_TEXTURE_MOVIES:
|
||||
return "movies.png";
|
||||
icon_name = "movies.png";
|
||||
break;
|
||||
#endif
|
||||
#ifdef HAVE_IMAGEVIEWER
|
||||
case XMB_TEXTURE_IMAGES:
|
||||
return "images.png";
|
||||
icon_name = "images.png";
|
||||
break;
|
||||
#endif
|
||||
case XMB_TEXTURE_SETTING:
|
||||
return "setting.png";
|
||||
icon_name = "setting.png";
|
||||
break;
|
||||
case XMB_TEXTURE_SUBSETTING:
|
||||
return "subsetting.png";
|
||||
icon_name = "subsetting.png";
|
||||
break;
|
||||
case XMB_TEXTURE_ARROW:
|
||||
return "arrow.png";
|
||||
icon_name = "arrow.png";
|
||||
break;
|
||||
case XMB_TEXTURE_RUN:
|
||||
return "run.png";
|
||||
icon_name = "run.png";
|
||||
break;
|
||||
case XMB_TEXTURE_CLOSE:
|
||||
return "close.png";
|
||||
icon_name = "close.png";
|
||||
break;
|
||||
case XMB_TEXTURE_RESUME:
|
||||
return "resume.png";
|
||||
icon_name = "resume.png";
|
||||
break;
|
||||
case XMB_TEXTURE_CLOCK:
|
||||
return "clock.png";
|
||||
icon_name = "clock.png";
|
||||
break;
|
||||
case XMB_TEXTURE_BATTERY_FULL:
|
||||
return "battery-full.png";
|
||||
icon_name = "battery-full.png";
|
||||
break;
|
||||
case XMB_TEXTURE_BATTERY_CHARGING:
|
||||
return "battery-charging.png";
|
||||
icon_name = "battery-charging.png";
|
||||
break;
|
||||
case XMB_TEXTURE_POINTER:
|
||||
return "pointer.png";
|
||||
icon_name = "pointer.png";
|
||||
break;
|
||||
case XMB_TEXTURE_SAVESTATE:
|
||||
return "savestate.png";
|
||||
icon_name = "savestate.png";
|
||||
break;
|
||||
case XMB_TEXTURE_LOADSTATE:
|
||||
return "loadstate.png";
|
||||
icon_name = "loadstate.png";
|
||||
break;
|
||||
case XMB_TEXTURE_UNDO:
|
||||
return "undo.png";
|
||||
icon_name = "undo.png";
|
||||
break;
|
||||
case XMB_TEXTURE_CORE_INFO:
|
||||
return "core-infos.png";
|
||||
icon_name = "core-infos.png";
|
||||
break;
|
||||
case XMB_TEXTURE_WIFI:
|
||||
return "wifi.png";
|
||||
icon_name = "wifi.png";
|
||||
break;
|
||||
case XMB_TEXTURE_CORE_OPTIONS:
|
||||
return "core-options.png";
|
||||
icon_name = "core-options.png";
|
||||
break;
|
||||
case XMB_TEXTURE_INPUT_REMAPPING_OPTIONS:
|
||||
return "core-input-remapping-options.png";
|
||||
icon_name = "core-input-remapping-options.png";
|
||||
break;
|
||||
case XMB_TEXTURE_CHEAT_OPTIONS:
|
||||
return "core-cheat-options.png";
|
||||
icon_name = "core-cheat-options.png";
|
||||
break;
|
||||
case XMB_TEXTURE_DISK_OPTIONS:
|
||||
return "core-disk-options.png";
|
||||
icon_name = "core-disk-options.png";
|
||||
break;
|
||||
case XMB_TEXTURE_SHADER_OPTIONS:
|
||||
return "core-shader-options.png";
|
||||
icon_name = "core-shader-options.png";
|
||||
break;
|
||||
case XMB_TEXTURE_ACHIEVEMENT_LIST:
|
||||
return "achievement-list.png";
|
||||
icon_name = "achievement-list.png";
|
||||
break;
|
||||
case XMB_TEXTURE_SCREENSHOT:
|
||||
return "screenshot.png";
|
||||
icon_name = "screenshot.png";
|
||||
break;
|
||||
case XMB_TEXTURE_RELOAD:
|
||||
return "reload.png";
|
||||
icon_name = "reload.png";
|
||||
break;
|
||||
case XMB_TEXTURE_RENAME:
|
||||
return "rename.png";
|
||||
icon_name = "rename.png";
|
||||
break;
|
||||
case XMB_TEXTURE_FILE:
|
||||
return "file.png";
|
||||
icon_name = "file.png";
|
||||
break;
|
||||
case XMB_TEXTURE_FOLDER:
|
||||
return "folder.png";
|
||||
icon_name = "folder.png";
|
||||
break;
|
||||
case XMB_TEXTURE_ZIP:
|
||||
return "zip.png";
|
||||
icon_name = "zip.png";
|
||||
break;
|
||||
case XMB_TEXTURE_MUSIC:
|
||||
return "music.png";
|
||||
icon_name = "music.png";
|
||||
break;
|
||||
case XMB_TEXTURE_FAVORITE:
|
||||
return "favorites-content.png";
|
||||
icon_name = "favorites-content.png";
|
||||
break;
|
||||
case XMB_TEXTURE_IMAGE:
|
||||
return "image.png";
|
||||
icon_name = "image.png";
|
||||
break;
|
||||
case XMB_TEXTURE_MOVIE:
|
||||
return "movie.png";
|
||||
icon_name = "movie.png";
|
||||
break;
|
||||
case XMB_TEXTURE_CORE:
|
||||
return "core.png";
|
||||
icon_name = "core.png";
|
||||
break;
|
||||
case XMB_TEXTURE_RDB:
|
||||
return "database.png";
|
||||
icon_name = "database.png";
|
||||
break;
|
||||
case XMB_TEXTURE_CURSOR:
|
||||
return "cursor.png";
|
||||
icon_name = "cursor.png";
|
||||
break;
|
||||
case XMB_TEXTURE_SWITCH_ON:
|
||||
return "on.png";
|
||||
icon_name = "on.png";
|
||||
break;
|
||||
case XMB_TEXTURE_SWITCH_OFF:
|
||||
return "off.png";
|
||||
icon_name = "off.png";
|
||||
break;
|
||||
case XMB_TEXTURE_ADD:
|
||||
return "add.png";
|
||||
icon_name = "add.png";
|
||||
break;
|
||||
#ifdef HAVE_NETWORKING
|
||||
case XMB_TEXTURE_NETPLAY:
|
||||
return "netplay.png";
|
||||
icon_name = "netplay.png";
|
||||
break;
|
||||
case XMB_TEXTURE_ROOM:
|
||||
return "room.png";
|
||||
case XMB_TEXTURE_LANROOM:
|
||||
return "netplay - LAN Room.png";
|
||||
case XMB_TEXTURE_IROOM:
|
||||
return "netplay - iRoom.png";
|
||||
#if 0
|
||||
/* stub these out until we have the icons */
|
||||
icon_name = "menu_room.png";
|
||||
break;
|
||||
case XMB_TEXTURE_ROOM_LAN:
|
||||
return "room_lan.png";
|
||||
case XMB_TEXTURE_ROOM_MITM:
|
||||
return "room_mitm.png";
|
||||
#endif
|
||||
icon_name = "menu_room_lan.png";
|
||||
break;
|
||||
case XMB_TEXTURE_ROOM_RELAY:
|
||||
icon_name = "menu_room_relay.png";
|
||||
break;
|
||||
#endif
|
||||
case XMB_TEXTURE_KEY:
|
||||
return "key.png";
|
||||
icon_name = "key.png";
|
||||
break;
|
||||
case XMB_TEXTURE_KEY_HOVER:
|
||||
return "key-hover.png";
|
||||
icon_name = "key-hover.png";
|
||||
break;
|
||||
case XMB_TEXTURE_DIALOG_SLICE:
|
||||
return "dialog-slice.png";
|
||||
icon_name = "dialog-slice.png";
|
||||
break;
|
||||
case XMB_TEXTURE_ACHIEVEMENTS:
|
||||
return "menu_achievements.png";
|
||||
icon_name = "menu_achievements.png";
|
||||
break;
|
||||
case XMB_TEXTURE_AUDIO:
|
||||
return "menu_audio.png";
|
||||
icon_name = "menu_audio.png";
|
||||
break;
|
||||
case XMB_TEXTURE_DRIVERS:
|
||||
return "menu_drivers.png";
|
||||
icon_name = "menu_drivers.png";
|
||||
break;
|
||||
case XMB_TEXTURE_EXIT:
|
||||
return "menu_exit.png";
|
||||
icon_name = "menu_exit.png";
|
||||
break;
|
||||
case XMB_TEXTURE_FRAMESKIP:
|
||||
return "menu_frameskip.png";
|
||||
icon_name = "menu_frameskip.png";
|
||||
break;
|
||||
case XMB_TEXTURE_HELP:
|
||||
return "menu_help.png";
|
||||
icon_name = "menu_help.png";
|
||||
break;
|
||||
case XMB_TEXTURE_INFO:
|
||||
return "menu_info.png";
|
||||
icon_name = "menu_info.png";
|
||||
break;
|
||||
case XMB_TEXTURE_INPUT:
|
||||
return "Libretro - Pad.png";
|
||||
icon_name = "Libretro - Pad.png";
|
||||
break;
|
||||
case XMB_TEXTURE_LATENCY:
|
||||
return "menu_latency.png";
|
||||
icon_name = "menu_latency.png";
|
||||
break;
|
||||
case XMB_TEXTURE_NETWORK:
|
||||
return "menu_network.png";
|
||||
icon_name = "menu_network.png";
|
||||
break;
|
||||
case XMB_TEXTURE_POWER:
|
||||
return "menu_power.png";
|
||||
icon_name = "menu_power.png";
|
||||
break;
|
||||
case XMB_TEXTURE_RECORD:
|
||||
return "menu_record.png";
|
||||
icon_name = "menu_record.png";
|
||||
break;
|
||||
case XMB_TEXTURE_SAVING:
|
||||
return "menu_saving.png";
|
||||
icon_name = "menu_saving.png";
|
||||
break;
|
||||
case XMB_TEXTURE_UPDATER:
|
||||
return "menu_updater.png";
|
||||
icon_name = "menu_updater.png";
|
||||
break;
|
||||
case XMB_TEXTURE_VIDEO:
|
||||
return "menu_video.png";
|
||||
icon_name = "menu_video.png";
|
||||
break;
|
||||
case XMB_TEXTURE_MIXER:
|
||||
return "menu_mixer.png";
|
||||
icon_name = "menu_mixer.png";
|
||||
break;
|
||||
case XMB_TEXTURE_LOG:
|
||||
return "menu_log.png";
|
||||
icon_name = "menu_log.png";
|
||||
break;
|
||||
case XMB_TEXTURE_OSD:
|
||||
return "menu_osd.png";
|
||||
icon_name = "menu_osd.png";
|
||||
break;
|
||||
case XMB_TEXTURE_UI:
|
||||
return "menu_ui.png";
|
||||
icon_name = "menu_ui.png";
|
||||
break;
|
||||
case XMB_TEXTURE_USER:
|
||||
return "menu_user.png";
|
||||
icon_name = "menu_user.png";
|
||||
break;
|
||||
case XMB_TEXTURE_PRIVACY:
|
||||
return "menu_privacy.png";
|
||||
icon_name = "menu_privacy.png";
|
||||
break;
|
||||
case XMB_TEXTURE_PLAYLIST:
|
||||
return "menu_playlist.png";
|
||||
icon_name = "menu_playlist.png";
|
||||
break;
|
||||
case XMB_TEXTURE_QUICKMENU:
|
||||
return "menu_quickmenu.png";
|
||||
icon_name = "menu_quickmenu.png";
|
||||
break;
|
||||
case XMB_TEXTURE_REWIND:
|
||||
return "menu_rewind.png";
|
||||
icon_name = "menu_rewind.png";
|
||||
break;
|
||||
case XMB_TEXTURE_OVERLAY:
|
||||
return "menu_overlay.png";
|
||||
icon_name = "menu_overlay.png";
|
||||
break;
|
||||
case XMB_TEXTURE_OVERRIDE:
|
||||
return "menu_override.png";
|
||||
icon_name = "menu_override.png";
|
||||
break;
|
||||
case XMB_TEXTURE_NOTIFICATIONS:
|
||||
return "menu_notifications.png";
|
||||
icon_name = "menu_notifications.png";
|
||||
break;
|
||||
case XMB_TEXTURE_STREAM:
|
||||
return "menu_stream.png";
|
||||
icon_name = "menu_stream.png";
|
||||
break;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
fill_pathname_application_special(iconpath,
|
||||
PATH_MAX_LENGTH * sizeof(char),
|
||||
APPLICATION_SPECIAL_DIRECTORY_ASSETS_XMB_ICONS);
|
||||
|
||||
icon_fullpath = iconpath;
|
||||
strlcat(icon_fullpath, icon_name, PATH_MAX_LENGTH * sizeof(char));
|
||||
|
||||
if (!filestream_exists(icon_fullpath))
|
||||
{
|
||||
/* If the icon doesn't exist at least try to return the subsetting icon*/
|
||||
if (id == XMB_TEXTURE_DIALOG_SLICE || id == XMB_TEXTURE_KEY_HOVER || id == XMB_TEXTURE_KEY_HOVER)
|
||||
return NULL;
|
||||
else
|
||||
return "subsetting.png";
|
||||
}
|
||||
else
|
||||
return icon_name;
|
||||
|
||||
}
|
||||
|
||||
static void xmb_context_reset_textures(
|
||||
|
@ -100,7 +100,7 @@ menu_display_ctx_driver_t menu_display_ctx_caca = {
|
||||
menu_display_caca_get_default_tex_coords,
|
||||
menu_display_caca_font_init_first,
|
||||
MENU_VIDEO_DRIVER_CACA,
|
||||
"menu_display_caca",
|
||||
"caca",
|
||||
false,
|
||||
NULL,
|
||||
NULL
|
||||
|
@ -210,7 +210,7 @@ menu_display_ctx_driver_t menu_display_ctx_ctr = {
|
||||
menu_display_ctr_get_default_tex_coords,
|
||||
menu_display_ctr_font_init_first,
|
||||
MENU_VIDEO_DRIVER_CTR,
|
||||
"menu_display_ctr",
|
||||
"ctr",
|
||||
true,
|
||||
NULL,
|
||||
NULL
|
||||
|
@ -288,7 +288,7 @@ menu_display_ctx_driver_t menu_display_ctx_d3d10 = {
|
||||
menu_display_d3d10_get_default_tex_coords,
|
||||
menu_display_d3d10_font_init_first,
|
||||
MENU_VIDEO_DRIVER_DIRECT3D10,
|
||||
"menu_display_d3d10",
|
||||
"d3d10",
|
||||
true,
|
||||
NULL,
|
||||
NULL
|
||||
|
@ -287,7 +287,7 @@ menu_display_ctx_driver_t menu_display_ctx_d3d11 = {
|
||||
menu_display_d3d11_get_default_tex_coords,
|
||||
menu_display_d3d11_font_init_first,
|
||||
MENU_VIDEO_DRIVER_DIRECT3D11,
|
||||
"menu_display_d3d11",
|
||||
"d3d11",
|
||||
true,
|
||||
NULL,
|
||||
NULL
|
||||
|
@ -308,7 +308,7 @@ menu_display_ctx_driver_t menu_display_ctx_d3d12 = {
|
||||
menu_display_d3d12_get_default_tex_coords,
|
||||
menu_display_d3d12_font_init_first,
|
||||
MENU_VIDEO_DRIVER_DIRECT3D12,
|
||||
"menu_display_d3d12",
|
||||
"d3d12",
|
||||
true,
|
||||
NULL,
|
||||
NULL
|
||||
|
@ -285,7 +285,7 @@ menu_display_ctx_driver_t menu_display_ctx_d3d8 = {
|
||||
menu_display_d3d8_get_default_tex_coords,
|
||||
menu_display_d3d8_font_init_first,
|
||||
MENU_VIDEO_DRIVER_DIRECT3D8,
|
||||
"menu_display_d3d8",
|
||||
"d3d8",
|
||||
false,
|
||||
NULL,
|
||||
NULL
|
||||
|
@ -322,7 +322,7 @@ menu_display_ctx_driver_t menu_display_ctx_d3d9 = {
|
||||
menu_display_d3d9_get_default_tex_coords,
|
||||
menu_display_d3d9_font_init_first,
|
||||
MENU_VIDEO_DRIVER_DIRECT3D9,
|
||||
"menu_display_d3d9",
|
||||
"d3d9",
|
||||
false,
|
||||
NULL,
|
||||
NULL
|
||||
|
@ -16,17 +16,20 @@
|
||||
|
||||
#include <time.h>
|
||||
|
||||
#include <clamping.h>
|
||||
#include <queues/message_queue.h>
|
||||
#include <retro_miscellaneous.h>
|
||||
|
||||
#include "../../config.def.h"
|
||||
#include "../../gfx/font_driver.h"
|
||||
#include "../../gfx/video_driver.h"
|
||||
#include "../../verbosity.h"
|
||||
|
||||
#include "../menu_driver.h"
|
||||
|
||||
#if defined(_WIN32) && !defined(_XBOX)
|
||||
#include "../../gfx/common/win32_common.h"
|
||||
#include "../../gfx/common/gdi_common.h"
|
||||
#endif
|
||||
|
||||
static void *menu_display_gdi_get_default_mvp(video_frame_info_t *video_info)
|
||||
@ -45,6 +48,63 @@ static void menu_display_gdi_blend_end(video_frame_info_t *video_info)
|
||||
static void menu_display_gdi_draw(menu_display_ctx_draw_t *draw,
|
||||
video_frame_info_t *video_info)
|
||||
{
|
||||
struct gdi_texture *texture = NULL;
|
||||
gdi_t *gdi = (gdi_t*)video_driver_get_ptr(false);
|
||||
BITMAPINFO info = {0};
|
||||
|
||||
if (!gdi || !draw || draw->x < 0 || draw->y < 0 || draw->width <= 1 || draw->height <= 1)
|
||||
return;
|
||||
|
||||
texture = (struct gdi_texture*)draw->texture;
|
||||
|
||||
if (!texture || texture->width <= 1 || texture->height <= 1)
|
||||
return;
|
||||
|
||||
info.bmiHeader.biBitCount = 32;
|
||||
info.bmiHeader.biWidth = texture->width;
|
||||
info.bmiHeader.biHeight = -texture->height;
|
||||
info.bmiHeader.biPlanes = 1;
|
||||
info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
||||
info.bmiHeader.biSizeImage = 0;
|
||||
info.bmiHeader.biCompression = BI_RGB;
|
||||
|
||||
if (gdi->memDC)
|
||||
{
|
||||
BLENDFUNCTION blend = {0};
|
||||
|
||||
if (!gdi->texDC)
|
||||
gdi->texDC = CreateCompatibleDC(gdi->winDC);
|
||||
|
||||
if (texture->bmp)
|
||||
{
|
||||
texture->bmp_old = SelectObject(gdi->texDC, texture->bmp);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* scale texture data into a bitmap we can easily blit later */
|
||||
texture->bmp = CreateCompatibleBitmap(gdi->winDC, draw->width, draw->height);
|
||||
texture->bmp_old = SelectObject(gdi->texDC, texture->bmp);
|
||||
|
||||
StretchDIBits(gdi->texDC, 0, 0, draw->width, draw->height, 0, 0, texture->width, texture->height, texture->data, &info, DIB_RGB_COLORS, SRCCOPY);
|
||||
}
|
||||
|
||||
gdi->bmp_old = SelectObject(gdi->memDC, gdi->bmp);
|
||||
|
||||
blend.BlendOp = AC_SRC_OVER;
|
||||
blend.BlendFlags = 0;
|
||||
blend.SourceConstantAlpha = 255;/*clamp_8bit(draw->coords->color[3] * 255.0f);*/
|
||||
blend.AlphaFormat = AC_SRC_ALPHA;
|
||||
|
||||
AlphaBlend(gdi->memDC, draw->x, video_info->height - draw->height - draw->y, draw->width, draw->height, gdi->texDC, 0, 0, draw->width, draw->height, blend);
|
||||
|
||||
/*TransparentBlt(gdi->memDC, draw->x, video_info->height - draw->height - draw->y, draw->width, draw->height, gdi->texDC, 0, 0, draw->width, draw->height, 0);*/
|
||||
|
||||
/* To draw without blending: */
|
||||
/*StretchBlt(gdi->memDC, draw->x, video_info->height - draw->height - draw->y, draw->width, draw->height, gdi->texDC, 0, 0, draw->width, draw->height, SRCCOPY);*/
|
||||
|
||||
SelectObject(gdi->memDC, gdi->bmp_old);
|
||||
SelectObject(gdi->texDC, texture->bmp_old);
|
||||
}
|
||||
}
|
||||
|
||||
static void menu_display_gdi_draw_pipeline(menu_display_ctx_draw_t *draw,
|
||||
@ -80,7 +140,7 @@ static bool menu_display_gdi_font_init_first(
|
||||
font_path, font_size, true,
|
||||
is_threaded,
|
||||
FONT_DRIVER_RENDER_GDI)))
|
||||
return false;
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -109,7 +169,7 @@ menu_display_ctx_driver_t menu_display_ctx_gdi = {
|
||||
menu_display_gdi_get_default_tex_coords,
|
||||
menu_display_gdi_font_init_first,
|
||||
MENU_VIDEO_DRIVER_GDI,
|
||||
"menu_display_gdi",
|
||||
"gdi",
|
||||
false,
|
||||
NULL,
|
||||
NULL
|
||||
|
@ -95,7 +95,7 @@ menu_display_ctx_driver_t menu_display_ctx_null = {
|
||||
menu_display_null_get_default_tex_coords,
|
||||
menu_display_null_font_init_first,
|
||||
MENU_VIDEO_DRIVER_GENERIC,
|
||||
"menu_display_null",
|
||||
"null",
|
||||
false,
|
||||
NULL,
|
||||
NULL
|
||||
|
@ -102,7 +102,7 @@ menu_display_ctx_driver_t menu_display_ctx_sixel = {
|
||||
menu_display_sixel_get_default_tex_coords,
|
||||
menu_display_sixel_font_init_first,
|
||||
MENU_VIDEO_DRIVER_SIXEL,
|
||||
"menu_display_sixel",
|
||||
"sixel",
|
||||
false,
|
||||
NULL,
|
||||
NULL
|
||||
|
@ -99,7 +99,7 @@ menu_display_ctx_driver_t menu_display_ctx_switch = {
|
||||
menu_display_switch_get_default_tex_coords,
|
||||
menu_display_switch_font_init_first,
|
||||
MENU_VIDEO_DRIVER_SWITCH,
|
||||
"menu_display_switch",
|
||||
"switch",
|
||||
false,
|
||||
NULL,
|
||||
NULL
|
||||
|
@ -386,7 +386,7 @@ menu_display_ctx_driver_t menu_display_ctx_vulkan = {
|
||||
menu_display_vk_get_default_tex_coords,
|
||||
menu_display_vk_font_init_first,
|
||||
MENU_VIDEO_DRIVER_VULKAN,
|
||||
"menu_display_vulkan",
|
||||
"vulkan",
|
||||
false,
|
||||
menu_display_vk_scissor_begin,
|
||||
menu_display_vk_scissor_end
|
||||
|
@ -352,7 +352,7 @@ menu_display_ctx_driver_t menu_display_ctx_wiiu = {
|
||||
menu_display_wiiu_get_default_tex_coords,
|
||||
menu_display_wiiu_font_init_first,
|
||||
MENU_VIDEO_DRIVER_WIIU,
|
||||
"menu_display_wiiu",
|
||||
"gx2",
|
||||
true,
|
||||
menu_display_wiiu_scissor_begin,
|
||||
menu_display_wiiu_scissor_end
|
||||
|
@ -1289,7 +1289,7 @@ static int menu_displaylist_parse_playlist(menu_displaylist_info_t *info,
|
||||
if (!string_is_empty(info->path))
|
||||
{
|
||||
size_t lpl_basename_size = PATH_MAX_LENGTH * sizeof(char);
|
||||
char *lpl_basename = (char*)malloc(PATH_MAX_LENGTH * sizeof(char));
|
||||
char *lpl_basename = (char*)malloc(lpl_basename_size);
|
||||
lpl_basename[0] = '\0';
|
||||
|
||||
fill_pathname_base_noext(lpl_basename, info->path, lpl_basename_size);
|
||||
@ -1302,9 +1302,9 @@ static int menu_displaylist_parse_playlist(menu_displaylist_info_t *info,
|
||||
|
||||
for (i = 0; i < list_size; i++)
|
||||
{
|
||||
char *path_copy = (char*)malloc(PATH_MAX_LENGTH * sizeof(char));
|
||||
char *fill_buf = (char*)malloc(PATH_MAX_LENGTH * sizeof(char));
|
||||
size_t path_size = PATH_MAX_LENGTH * sizeof(char);
|
||||
char *path_copy = (char*)malloc(path_size);
|
||||
char *fill_buf = (char*)malloc(path_size);
|
||||
const char *core_name = NULL;
|
||||
const char *path = NULL;
|
||||
const char *label = NULL;
|
||||
@ -1337,9 +1337,10 @@ static int menu_displaylist_parse_playlist(menu_displaylist_info_t *info,
|
||||
|
||||
if (path)
|
||||
{
|
||||
char *path_short = (char*)malloc(PATH_MAX_LENGTH * sizeof(char));
|
||||
size_t path_size = PATH_MAX_LENGTH * sizeof(char);
|
||||
char *path_short = (char*)malloc(path_size);
|
||||
|
||||
path_short[0] = '\0';
|
||||
path_short[0] = '\0';
|
||||
|
||||
fill_short_pathname_representation(path_short, path,
|
||||
path_size);
|
||||
@ -1352,10 +1353,9 @@ static int menu_displaylist_parse_playlist(menu_displaylist_info_t *info,
|
||||
if (!string_is_equal(core_name,
|
||||
file_path_str(FILE_PATH_DETECT)))
|
||||
{
|
||||
char *tmp = (char*)
|
||||
malloc(PATH_MAX_LENGTH * sizeof(char));
|
||||
char *tmp = (char*)malloc(path_size);
|
||||
|
||||
tmp[0] = '\0';
|
||||
tmp[0] = '\0';
|
||||
|
||||
snprintf(tmp, path_size, " (%s)", core_name);
|
||||
strlcat(fill_buf, tmp, path_size);
|
||||
@ -1486,12 +1486,13 @@ static int create_string_list_rdb_entry_string(
|
||||
char *output_label = NULL;
|
||||
int str_len = 0;
|
||||
struct string_list *str_list = string_list_new();
|
||||
size_t path_size = PATH_MAX_LENGTH * sizeof(char);
|
||||
|
||||
if (!str_list)
|
||||
return -1;
|
||||
|
||||
attr.i = 0;
|
||||
tmp = (char*)malloc(PATH_MAX_LENGTH * sizeof(char));
|
||||
tmp = (char*)malloc(path_size);
|
||||
tmp[0] = '\0';
|
||||
|
||||
str_len += strlen(label) + 1;
|
||||
@ -1515,8 +1516,7 @@ static int create_string_list_rdb_entry_string(
|
||||
string_list_join_concat(output_label, str_len, str_list, "|");
|
||||
|
||||
fill_pathname_join_concat_noext(tmp, desc, ": ",
|
||||
actual_string,
|
||||
PATH_MAX_LENGTH * sizeof(char));
|
||||
actual_string, path_size);
|
||||
menu_entries_append_enum(list, tmp, output_label,
|
||||
enum_idx,
|
||||
0, 0, 0);
|
||||
@ -1547,8 +1547,8 @@ static int create_string_list_rdb_entry_int(
|
||||
goto error;
|
||||
|
||||
attr.i = 0;
|
||||
tmp = (char*)malloc(PATH_MAX_LENGTH * sizeof(char));
|
||||
str = (char*)malloc(PATH_MAX_LENGTH * sizeof(char));
|
||||
tmp = (char*)malloc(path_size);
|
||||
str = (char*)malloc(path_size);
|
||||
tmp[0] = str[0] = '\0';
|
||||
|
||||
str_len += strlen(label) + 1;
|
||||
@ -1654,10 +1654,12 @@ static int menu_displaylist_parse_database_entry(menu_handle_t *menu,
|
||||
snprintf(crc_str, sizeof(crc_str), "%08X", db_info_entry->crc32);
|
||||
|
||||
if (!string_is_empty(db_info_entry->name))
|
||||
strlcpy(thumbnail_content, db_info_entry->name, sizeof(thumbnail_content));
|
||||
strlcpy(thumbnail_content, db_info_entry->name,
|
||||
sizeof(thumbnail_content));
|
||||
|
||||
if (!string_is_empty(thumbnail_content))
|
||||
menu_driver_set_thumbnail_content(thumbnail_content, sizeof(thumbnail_content));
|
||||
menu_driver_set_thumbnail_content(thumbnail_content,
|
||||
sizeof(thumbnail_content));
|
||||
|
||||
menu_driver_ctl(RARCH_MENU_CTL_UPDATE_THUMBNAIL_PATH, NULL);
|
||||
menu_driver_ctl(RARCH_MENU_CTL_UPDATE_THUMBNAIL_IMAGE, NULL);
|
||||
@ -3744,19 +3746,16 @@ static unsigned menu_displaylist_parse_cores(
|
||||
|
||||
if (type == FILE_TYPE_CORE)
|
||||
{
|
||||
char *core_path = (char*)
|
||||
malloc(PATH_MAX_LENGTH * sizeof(char));
|
||||
char *display_name = (char*)
|
||||
malloc(PATH_MAX_LENGTH * sizeof(char));
|
||||
size_t path_size = PATH_MAX_LENGTH * sizeof(char);
|
||||
char *core_path = (char*)malloc(path_size);
|
||||
char *display_name = (char*)malloc(path_size);
|
||||
core_path[0] =
|
||||
display_name[0] = '\0';
|
||||
|
||||
fill_pathname_join(core_path, dir, path,
|
||||
PATH_MAX_LENGTH * sizeof(char));
|
||||
fill_pathname_join(core_path, dir, path, path_size);
|
||||
|
||||
if (core_info_list_get_display_name(list,
|
||||
core_path, display_name,
|
||||
PATH_MAX_LENGTH * sizeof(char)))
|
||||
core_path, display_name, path_size))
|
||||
file_list_set_alt_at_offset(info->list, i, display_name);
|
||||
|
||||
free(core_path);
|
||||
@ -4280,19 +4279,22 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
|
||||
#ifdef HAVE_LAKKA_SWITCH
|
||||
case DISPLAYLIST_SWITCH_CPU_PROFILE:
|
||||
{
|
||||
runloop_msg_queue_push("Warning : extented overclocking can damage the Switch", 1, 90, true);
|
||||
|
||||
unsigned i;
|
||||
char text[PATH_MAX_LENGTH];
|
||||
char current_profile[PATH_MAX_LENGTH];
|
||||
FILE *profile = NULL;
|
||||
const size_t profiles_count = sizeof(SWITCH_CPU_PROFILES)/sizeof(SWITCH_CPU_PROFILES[1]);
|
||||
|
||||
runloop_msg_queue_push("Warning : extented overclocking can damage the Switch", 1, 90, true);
|
||||
|
||||
FILE* profile = popen("cpu-profile get", "r");
|
||||
profile = popen("cpu-profile get", "r");
|
||||
fgets(current_profile, PATH_MAX_LENGTH, profile);
|
||||
pclose(profile);
|
||||
|
||||
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
|
||||
|
||||
char text[PATH_MAX_LENGTH];
|
||||
|
||||
snprintf(text, sizeof(text), "Current profile : %s", current_profile);
|
||||
snprintf(text, sizeof(text),
|
||||
"Current profile : %s", current_profile);
|
||||
|
||||
menu_entries_append_enum(info->list,
|
||||
text,
|
||||
@ -4300,24 +4302,21 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
|
||||
0,
|
||||
MENU_INFO_MESSAGE, 0, 0);
|
||||
|
||||
const size_t profiles_count = sizeof(SWITCH_CPU_PROFILES)/sizeof(SWITCH_CPU_PROFILES[1]);
|
||||
|
||||
|
||||
for (int i = 0; i < profiles_count; i++)
|
||||
for (i = 0; i < profiles_count; i++)
|
||||
{
|
||||
char* profile = SWITCH_CPU_PROFILES[i];
|
||||
char* speed = SWITCH_CPU_SPEEDS[i];
|
||||
|
||||
char* profile = SWITCH_CPU_PROFILES[i];
|
||||
char* speed = SWITCH_CPU_SPEEDS[i];
|
||||
|
||||
char title[PATH_MAX_LENGTH] = {0};
|
||||
|
||||
|
||||
snprintf(title, sizeof(title), "%s (%s)", profile, speed);
|
||||
|
||||
menu_entries_append_enum(info->list,
|
||||
title,
|
||||
"",
|
||||
0, MENU_SET_SWITCH_CPU_PROFILE, 0, i);
|
||||
|
||||
}
|
||||
|
||||
menu_entries_append_enum(info->list,
|
||||
title,
|
||||
"",
|
||||
0, MENU_SET_SWITCH_CPU_PROFILE, 0, i);
|
||||
|
||||
}
|
||||
|
||||
info->need_push = true;
|
||||
info->need_refresh = true;
|
||||
@ -4327,18 +4326,20 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
|
||||
}
|
||||
case DISPLAYLIST_SWITCH_GPU_PROFILE:
|
||||
{
|
||||
unsigned i;
|
||||
char text[PATH_MAX_LENGTH];
|
||||
char current_profile[PATH_MAX_LENGTH];
|
||||
FILE *profile = NULL;
|
||||
const size_t profiles_count = sizeof(SWITCH_GPU_PROFILES)/sizeof(SWITCH_GPU_PROFILES[1]);
|
||||
|
||||
runloop_msg_queue_push("Warning : extented overclocking can damage the Switch", 1, 90, true);
|
||||
|
||||
char current_profile[PATH_MAX_LENGTH];
|
||||
|
||||
FILE* profile = popen("gpu-profile get", "r");
|
||||
profile = popen("gpu-profile get", "r");
|
||||
fgets(current_profile, PATH_MAX_LENGTH, profile);
|
||||
pclose(profile);
|
||||
|
||||
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
|
||||
|
||||
char text[PATH_MAX_LENGTH];
|
||||
|
||||
snprintf(text, sizeof(text), "Current profile : %s", current_profile);
|
||||
|
||||
menu_entries_append_enum(info->list,
|
||||
@ -4347,22 +4348,20 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
|
||||
0,
|
||||
MENU_INFO_MESSAGE, 0, 0);
|
||||
|
||||
const size_t profiles_count = sizeof(SWITCH_GPU_PROFILES)/sizeof(SWITCH_GPU_PROFILES[1]);
|
||||
|
||||
for (int i = 0; i < profiles_count; i++)
|
||||
for (i = 0; i < profiles_count; i++)
|
||||
{
|
||||
char* profile = SWITCH_GPU_PROFILES[i];
|
||||
char* speed = SWITCH_GPU_SPEEDS[i];
|
||||
|
||||
char* profile = SWITCH_GPU_PROFILES[i];
|
||||
char* speed = SWITCH_GPU_SPEEDS[i];
|
||||
char title[PATH_MAX_LENGTH] = {0};
|
||||
|
||||
|
||||
snprintf(title, sizeof(title), "%s (%s)", profile, speed);
|
||||
|
||||
menu_entries_append_enum(info->list,
|
||||
title,
|
||||
"",
|
||||
0, MENU_SET_SWITCH_GPU_PROFILE, 0, i);
|
||||
}
|
||||
|
||||
menu_entries_append_enum(info->list,
|
||||
title,
|
||||
"",
|
||||
0, MENU_SET_SWITCH_GPU_PROFILE, 0, i);
|
||||
}
|
||||
|
||||
info->need_push = true;
|
||||
info->need_refresh = true;
|
||||
@ -4372,26 +4371,27 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
|
||||
}
|
||||
case DISPLAYLIST_SWITCH_BACKLIGHT_CONTROL:
|
||||
{
|
||||
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
|
||||
|
||||
const size_t brightness_count = sizeof(SWITCH_BRIGHTNESS)/sizeof(SWITCH_BRIGHTNESS[1]);
|
||||
|
||||
for (int i = 0; i < brightness_count; i++)
|
||||
{
|
||||
char title[PATH_MAX_LENGTH] = {0};
|
||||
|
||||
snprintf(title, sizeof(title), "Set to %d%%", SWITCH_BRIGHTNESS[i]);
|
||||
|
||||
menu_entries_append_enum(info->list,
|
||||
title,
|
||||
"",
|
||||
0, MENU_SET_SWITCH_BRIGHTNESS, 0, i);
|
||||
unsigned i;
|
||||
const size_t brightness_count = sizeof(SWITCH_BRIGHTNESS)/sizeof(SWITCH_BRIGHTNESS[1]);
|
||||
|
||||
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
|
||||
|
||||
for (i = 0; i < brightness_count; i++)
|
||||
{
|
||||
char title[PATH_MAX_LENGTH] = {0};
|
||||
|
||||
snprintf(title, sizeof(title), "Set to %d%%", SWITCH_BRIGHTNESS[i]);
|
||||
|
||||
menu_entries_append_enum(info->list,
|
||||
title,
|
||||
"",
|
||||
0, MENU_SET_SWITCH_BRIGHTNESS, 0, i);
|
||||
}
|
||||
|
||||
|
||||
info->need_push = true;
|
||||
info->need_refresh = true;
|
||||
info->need_clear = true;
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
@ -5779,6 +5779,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
|
||||
menu_displaylist_parse_settings_enum(menu, info,
|
||||
MENU_ENUM_LABEL_TIMEDATE_ENABLE,
|
||||
PARSE_ONLY_BOOL, false);
|
||||
menu_displaylist_parse_settings_enum(menu, info,
|
||||
MENU_ENUM_LABEL_TIMEDATE_STYLE,
|
||||
PARSE_ONLY_UINT, false);
|
||||
menu_displaylist_parse_settings_enum(menu, info,
|
||||
MENU_ENUM_LABEL_BATTERY_LEVEL_ENABLE,
|
||||
PARSE_ONLY_BOOL, false);
|
||||
@ -7307,9 +7310,10 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
|
||||
if (!string_is_empty(system->info.library_name) &&
|
||||
!string_is_equal(system->info.library_name,
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_CORE)))
|
||||
menu_displaylist_parse_settings_enum(menu, info,
|
||||
MENU_ENUM_LABEL_CONTENT_SETTINGS,
|
||||
PARSE_ACTION, false);
|
||||
if (!rarch_ctl(RARCH_CTL_IS_DUMMY_CORE, NULL))
|
||||
menu_displaylist_parse_settings_enum(menu, info,
|
||||
MENU_ENUM_LABEL_CONTENT_SETTINGS,
|
||||
PARSE_ACTION, false);
|
||||
|
||||
if (system->load_no_content)
|
||||
menu_displaylist_parse_settings_enum(menu, info,
|
||||
|
@ -179,13 +179,12 @@ enum menu_displaylist_ctl_state
|
||||
DISPLAYLIST_CORE_CONTENT,
|
||||
DISPLAYLIST_CORE_CONTENT_DIRS,
|
||||
DISPLAYLIST_CORE_CONTENT_DIRS_SUBDIR,
|
||||
DISPLAYLIST_PENDING_CLEAR,
|
||||
|
||||
#ifdef HAVE_LAKKA_SWITCH
|
||||
DISPLAYLIST_SWITCH_GPU_PROFILE,
|
||||
DISPLAYLIST_SWITCH_BACKLIGHT_CONTROL,
|
||||
DISPLAYLIST_SWITCH_CPU_PROFILE,
|
||||
#endif
|
||||
DISPLAYLIST_PENDING_CLEAR
|
||||
};
|
||||
|
||||
typedef struct menu_displaylist_info
|
||||
|
@ -17,13 +17,14 @@
|
||||
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
|
||||
#include <locale.h>
|
||||
#include <compat/strl.h>
|
||||
#include <retro_miscellaneous.h>
|
||||
#include <formats/image.h>
|
||||
#include <file/file_path.h>
|
||||
#include <streams/file_stream.h>
|
||||
#include <string/stdstring.h>
|
||||
#include <encodings/utf.h>
|
||||
|
||||
#ifdef WIIU
|
||||
#include <wiiu/os/energy.h>
|
||||
@ -346,28 +347,58 @@ void menu_display_timedate(menu_display_ctx_datetime_t *datetime)
|
||||
|
||||
time(&time_);
|
||||
|
||||
setlocale(LC_TIME, "");
|
||||
|
||||
switch (datetime->time_mode)
|
||||
{
|
||||
case 0: /* Date and time */
|
||||
strftime(datetime->s, datetime->len,
|
||||
"%Y-%m-%d %H:%M:%S", localtime(&time_));
|
||||
break;
|
||||
case 1: /* Date */
|
||||
case 1: /* YY-MM-DD HH:MM */
|
||||
strftime(datetime->s, datetime->len,
|
||||
"%Y-%m-%d", localtime(&time_));
|
||||
"%Y-%m-%d %H:%M", localtime(&time_));
|
||||
break;
|
||||
case 2: /* Time */
|
||||
case 2: /* MM-DD-YYYY HH:MM */
|
||||
strftime(datetime->s, datetime->len,
|
||||
"%m-%d-%Y %H:%M", localtime(&time_));
|
||||
break;
|
||||
case 3: /* Time */
|
||||
strftime(datetime->s, datetime->len,
|
||||
"%H:%M:%S", localtime(&time_));
|
||||
break;
|
||||
case 3: /* Time (hours-minutes) */
|
||||
case 4: /* Time (hours-minutes) */
|
||||
strftime(datetime->s, datetime->len,
|
||||
"%H:%M", localtime(&time_));
|
||||
break;
|
||||
case 4: /* Date and time, without year and seconds */
|
||||
case 5: /* Date and time, without year and seconds */
|
||||
strftime(datetime->s, datetime->len,
|
||||
"%d/%m %H:%M", localtime(&time_));
|
||||
break;
|
||||
case 6:
|
||||
strftime(datetime->s, datetime->len,
|
||||
"%m/%d %H:%M", localtime(&time_));
|
||||
break;
|
||||
case 7: /* Time (hours-minutes), in 12 hour AM-PM designation */
|
||||
#if defined(__linux__) && !defined(ANDROID)
|
||||
strftime(datetime->s, datetime->len,
|
||||
"%r", localtime(&time_));
|
||||
#else
|
||||
{
|
||||
char *local;
|
||||
|
||||
strftime(datetime->s, datetime->len,
|
||||
|
||||
"%I:%M:%S %p", localtime(&time_));
|
||||
local = local_to_utf8_string_alloc(datetime->s);
|
||||
|
||||
if (local)
|
||||
{
|
||||
strlcpy(datetime->s, local, datetime->len);
|
||||
free(local);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -45,7 +45,7 @@ RETRO_BEGIN_DECLS
|
||||
#endif
|
||||
|
||||
#ifndef MAX_CHEAT_COUNTERS
|
||||
#define MAX_CHEAT_COUNTERS 100
|
||||
#define MAX_CHEAT_COUNTERS 6000
|
||||
#endif
|
||||
|
||||
#define MENU_SETTINGS_CORE_INFO_NONE 0xffff
|
||||
@ -171,10 +171,8 @@ enum menu_settings_type
|
||||
MENU_SETTING_ACTION_RESUME_ACHIEVEMENTS,
|
||||
MENU_WIFI,
|
||||
MENU_ROOM,
|
||||
/*
|
||||
MENU_ROOM_LAN,
|
||||
MENU_ROOM_MITM,
|
||||
*/
|
||||
MENU_ROOM_RELAY,
|
||||
MENU_NETPLAY_LAN_SCAN,
|
||||
MENU_INFO_MESSAGE,
|
||||
MENU_SETTINGS_SHADER_PARAMETER_0,
|
||||
|
@ -505,6 +505,56 @@ static void setting_get_string_representation_uint_menu_left_thumbnails(
|
||||
}
|
||||
}
|
||||
|
||||
static void setting_get_string_representation_uint_menu_timedate_style(
|
||||
rarch_setting_t *setting,
|
||||
char *s, size_t len)
|
||||
{
|
||||
if (!setting)
|
||||
return;
|
||||
|
||||
switch (*setting->value.target.unsigned_integer)
|
||||
{
|
||||
case 0:
|
||||
strlcpy(s, msg_hash_to_str(
|
||||
MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_YMD_HMS), len);
|
||||
break;
|
||||
case 1:
|
||||
strlcpy(s, msg_hash_to_str(
|
||||
MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_YMD_HM), len);
|
||||
break;
|
||||
case 2:
|
||||
strlcpy(s,
|
||||
msg_hash_to_str(
|
||||
MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_MDYYYY), len);
|
||||
break;
|
||||
case 3:
|
||||
strlcpy(s,
|
||||
msg_hash_to_str(
|
||||
MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_HMS), len);
|
||||
break;
|
||||
case 4:
|
||||
strlcpy(s,
|
||||
msg_hash_to_str(
|
||||
MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_HM), len);
|
||||
break;
|
||||
case 5:
|
||||
strlcpy(s,
|
||||
msg_hash_to_str(
|
||||
MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_DM_HM), len);
|
||||
break;
|
||||
case 6:
|
||||
strlcpy(s,
|
||||
msg_hash_to_str(
|
||||
MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_MD_HM), len);
|
||||
break;
|
||||
case 7:
|
||||
strlcpy(s,
|
||||
msg_hash_to_str(
|
||||
MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_AM_PM), len);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void setting_get_string_representation_uint_xmb_icon_theme(
|
||||
rarch_setting_t *setting,
|
||||
char *s, size_t len)
|
||||
@ -4695,7 +4745,7 @@ static bool setting_append_list(
|
||||
config_uint_cbs(cheat_manager_state.working_cheat.rumble_type, CHEAT_RUMBLE_TYPE,
|
||||
setting_uint_action_left_default,setting_uint_action_right_default,
|
||||
MENU_ENUM_LABEL_RUMBLE_TYPE_DISABLED,&setting_get_string_representation_uint_as_enum,
|
||||
RUMBLE_TYPE_DISABLED,RUMBLE_TYPE_GT_VALUE,1) ;
|
||||
RUMBLE_TYPE_DISABLED,RUMBLE_TYPE_END_LIST-1,1) ;
|
||||
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
|
||||
|
||||
config_uint_cbs(cheat_manager_state.working_cheat.rumble_value, CHEAT_RUMBLE_VALUE,
|
||||
@ -8317,6 +8367,21 @@ static bool setting_append_list(
|
||||
general_read_handler,
|
||||
SD_FLAG_ADVANCED);
|
||||
|
||||
CONFIG_UINT(list, list_info,
|
||||
&settings->uints.menu_timedate_style,
|
||||
MENU_ENUM_LABEL_TIMEDATE_STYLE,
|
||||
MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE,
|
||||
menu_timedate_style,
|
||||
&group_info,
|
||||
&subgroup_info,
|
||||
parent_group,
|
||||
general_write_handler,
|
||||
general_read_handler);
|
||||
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
|
||||
(*list)[list_info->index - 1].get_string_representation =
|
||||
&setting_get_string_representation_uint_menu_timedate_style;
|
||||
menu_settings_list_current_add_range(list, list_info, 0, 7, 1, true, true);
|
||||
|
||||
CONFIG_BOOL(
|
||||
list, list_info,
|
||||
&settings->bools.menu_battery_level_enable,
|
||||
|
@ -364,7 +364,7 @@ void menu_entry_get(menu_entry_t *entry, size_t stack_idx,
|
||||
|
||||
if (cbs->action_sublabel)
|
||||
{
|
||||
char tmp[255];
|
||||
char tmp[512];
|
||||
tmp[0] = '\0';
|
||||
|
||||
cbs->action_sublabel(list,
|
||||
|
@ -833,6 +833,7 @@ enum msg_hash_enums
|
||||
MENU_LABEL(LEFT_THUMBNAILS),
|
||||
MENU_LABEL(XMB_VERTICAL_THUMBNAILS),
|
||||
MENU_LABEL(TIMEDATE_ENABLE),
|
||||
MENU_LABEL(TIMEDATE_STYLE),
|
||||
MENU_LABEL(BATTERY_LEVEL_ENABLE),
|
||||
MENU_LABEL(MATERIALUI_MENU_COLOR_THEME),
|
||||
MENU_LABEL(QUICK_MENU_OVERRIDE_OPTIONS),
|
||||
@ -2129,6 +2130,14 @@ enum msg_hash_enums
|
||||
MSG_CHEAT_SEARCH_ADD_MATCH_FAIL,
|
||||
MSG_CHEAT_SEARCH_DELETE_MATCH_SUCCESS,
|
||||
MSG_CHEEVOS_HARDCORE_MODE_DISABLED,
|
||||
MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_YMD_HMS,
|
||||
MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_YMD_HM,
|
||||
MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_MDYYYY,
|
||||
MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_HMS,
|
||||
MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_HM,
|
||||
MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_DM_HM,
|
||||
MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_MD_HM,
|
||||
MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_AM_PM,
|
||||
|
||||
#ifdef HAVE_LAKKA_SWITCH
|
||||
MENU_ENUM_LABEL_SWITCH_GPU_PROFILE,
|
||||
|
@ -142,7 +142,7 @@
|
||||
053FC25521433F1700D98D46 /* QtConcurrent.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QtConcurrent.framework; path = /usr/local/opt/qt/lib/QtConcurrent.framework; sourceTree = "<group>"; };
|
||||
053FC25621433F1800D98D46 /* QtNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QtNetwork.framework; path = /usr/local/opt/qt/lib/QtNetwork.framework; sourceTree = "<group>"; };
|
||||
053FC25721433F1800D98D46 /* QtWidgets.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QtWidgets.framework; path = /usr/local/opt/qt/lib/QtWidgets.framework; sourceTree = "<group>"; };
|
||||
05422E592140C8DB00F09961 /* RetroArchQT.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RetroArchQT.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
05422E592140C8DB00F09961 /* RetroArch.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RetroArch.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
05422E5B2140CE3500F09961 /* VulkanConfig.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = VulkanConfig.xcconfig; sourceTree = "<group>"; };
|
||||
05422E5C2140CFC500F09961 /* Metal.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Metal.xcconfig; sourceTree = "<group>"; };
|
||||
0548E2B220F976E10094A083 /* driver.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = driver.c; path = ../../driver.c; sourceTree = "<group>"; };
|
||||
@ -1426,7 +1426,7 @@
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8D1107320486CEB800E47090 /* RetroArch.app */,
|
||||
05422E592140C8DB00F09961 /* RetroArchQT.app */,
|
||||
05422E592140C8DB00F09961 /* RetroArch.app */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
@ -1502,9 +1502,9 @@
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
05422E3C2140C8DB00F09961 /* RetroArchQT */ = {
|
||||
05422E3C2140C8DB00F09961 /* RetroArchQt */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 05422E562140C8DB00F09961 /* Build configuration list for PBXNativeTarget "RetroArchQT" */;
|
||||
buildConfigurationList = 05422E562140C8DB00F09961 /* Build configuration list for PBXNativeTarget "RetroArchQt" */;
|
||||
buildPhases = (
|
||||
053FC2782143764B00D98D46 /* ShellScript */,
|
||||
05422E3D2140C8DB00F09961 /* Resources */,
|
||||
@ -1518,10 +1518,10 @@
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = RetroArchQT;
|
||||
name = RetroArchQt;
|
||||
productInstallPath = "$(HOME)/Applications";
|
||||
productName = RetroArch;
|
||||
productReference = 05422E592140C8DB00F09961 /* RetroArchQT.app */;
|
||||
productReference = 05422E592140C8DB00F09961 /* RetroArch.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
8D1107260486CEB800E47090 /* RetroArch */ = {
|
||||
@ -1563,7 +1563,7 @@
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
8D1107260486CEB800E47090 /* RetroArch */,
|
||||
05422E3C2140C8DB00F09961 /* RetroArchQT */,
|
||||
05422E3C2140C8DB00F09961 /* RetroArchQt */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
@ -1690,7 +1690,7 @@
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = libretro.RetroArch;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PRODUCT_NAME = RetroArch;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
@ -1711,7 +1711,7 @@
|
||||
);
|
||||
PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = libretro.RetroArch;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PRODUCT_NAME = RetroArch;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
@ -1986,7 +1986,7 @@
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
05422E562140C8DB00F09961 /* Build configuration list for PBXNativeTarget "RetroArchQT" */ = {
|
||||
05422E562140C8DB00F09961 /* Build configuration list for PBXNativeTarget "RetroArchQt" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
05422E572140C8DB00F09961 /* Debug */,
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 20 KiB |
@ -79,7 +79,6 @@ static void ui_companion_cocoatouch_event_command(
|
||||
void *data, enum event_command cmd)
|
||||
{
|
||||
(void)data;
|
||||
command_event(cmd, NULL);
|
||||
}
|
||||
|
||||
static void rarch_draw_observer(CFRunLoopObserverRef observer,
|
||||
|
Loading…
x
Reference in New Issue
Block a user