mirror of
https://github.com/libretro/RetroArch
synced 2025-03-28 08:37:41 +00:00
Merge branch 'master' into cheater
This commit is contained in:
commit
c750235414
@ -6,6 +6,7 @@
|
|||||||
- COMMON: Automatically hide "Configuration Override options" in Quick Menu.
|
- COMMON: Automatically hide "Configuration Override options" in Quick Menu.
|
||||||
- COMMON: Small Bugfix to not trigger savestate code when pressing Reset.
|
- COMMON: Small Bugfix to not trigger savestate code when pressing Reset.
|
||||||
- COMMON: Added libsixel video driver.
|
- COMMON: Added libsixel video driver.
|
||||||
|
- EMSCRIPTEN: Fix Game Focus Toggle.
|
||||||
- HID/OSX: Fix to set hid device registration deterministic (#6497), to address issue #6640 re-adding dynamic device registration.
|
- HID/OSX: Fix to set hid device registration deterministic (#6497), to address issue #6640 re-adding dynamic device registration.
|
||||||
- LOCALIZATION: Update Italian translation.
|
- LOCALIZATION: Update Italian translation.
|
||||||
- LOCALIZATION: Update Japanese translation.
|
- LOCALIZATION: Update Japanese translation.
|
||||||
@ -17,18 +18,25 @@
|
|||||||
- MIDI: Add a Windows driver for MIDI, based on winmm.
|
- MIDI: Add a Windows driver for MIDI, based on winmm.
|
||||||
- MENU/QT/WIMP: QT QSlider styling for Dark Theme.
|
- MENU/QT/WIMP: QT QSlider styling for Dark Theme.
|
||||||
- MENU/QT/WIMP: Remove button ghostly inside highlighting.
|
- MENU/QT/WIMP: Remove button ghostly inside highlighting.
|
||||||
|
- MENU/QT/WIMP: Initial grid view.
|
||||||
- METAL: Initial work-in-progress video driver for Metal. macOS-only right now, and currently requires macOS 10.13.
|
- METAL: Initial work-in-progress video driver for Metal. macOS-only right now, and currently requires macOS 10.13.
|
||||||
- METAL: Supports XMB/MaterialUI, has a menu display driver. Has a font rendering driver.
|
- METAL: Supports XMB/MaterialUI, has a menu display driver. Has a font rendering driver.
|
||||||
- METAL/SLANG: Slang shaders should be compatible with Metal video driver.
|
- METAL/SLANG: Slang shaders should be compatible with Metal video driver.
|
||||||
|
- QNX: Fix Game Focus Toggle.
|
||||||
- PS3: Add audio mixer support for FLAC and MP3.
|
- PS3: Add audio mixer support for FLAC and MP3.
|
||||||
- PSP: Use proper button labels, fix inverted R-Stick Y axis.
|
- PSP: Use proper button labels, fix inverted R-Stick Y axis.
|
||||||
- REMAPS: Fix the way offsets are calculated for keyboard remapping.
|
- REMAPS: Fix the way offsets are calculated for keyboard remapping.
|
||||||
- RUNAHEAD: Fix full-screen mode change breaking Secondary Core's environment variables.
|
- RUNAHEAD: Fix full-screen mode change breaking Secondary Core's environment variables.
|
||||||
- VITA: Use proper button labels, fix inverted R-Stick Y axis.
|
- VITA: Use proper button labels, fix inverted R-Stick Y axis.
|
||||||
|
- VITA: Add imc0: mount.
|
||||||
|
- VITA: Use sceCtrlIsMultiControllerSupported to detect.
|
||||||
- VULKAN: Fix two validation errors.
|
- VULKAN: Fix two validation errors.
|
||||||
- VULKAN: Try to avoid creating swapchains redundantly. Should fix black screen and having to alt tab out of window again to get display working on Nvidia GPUs (Windows).
|
- VULKAN: Try to avoid creating swapchains redundantly. Should fix black screen and having to alt tab out of window again to get display working on Nvidia GPUs (Windows).
|
||||||
- VULKAN/OSX: Initial MoltenVK support. Not enabled yet, several MoltenVK bugs should be fixed first before we can have it fully working.
|
- VULKAN/OSX: Initial MoltenVK support. Not enabled yet, several MoltenVK bugs should be fixed first before we can have it fully working.
|
||||||
- WINDOWS/DINPUT: Add rumble support.
|
- WINDOWS/DINPUT: Add rumble support.
|
||||||
|
- WINDOWS/DINPUT: Fix Game Focus Toggle.
|
||||||
|
- WINDOWS/RAWINPUT: Fix Game Focus Toggle.
|
||||||
|
- X11: Fix Game Focus Toggle.
|
||||||
- WII: Change deflicker setting to work in 480p or higher, and always enables vfilter so that the user can easily change brightness.
|
- WII: Change deflicker setting to work in 480p or higher, and always enables vfilter so that the user can easily change brightness.
|
||||||
- WIIU: Fix out-of-bounds rendering bug
|
- WIIU: Fix out-of-bounds rendering bug
|
||||||
- WIIU: Implement UDP broadcast network logging on Wii U.
|
- WIIU: Implement UDP broadcast network logging on Wii U.
|
||||||
|
@ -334,14 +334,16 @@ OBJ += ui/drivers/ui_qt.o \
|
|||||||
ui/drivers/qt/ui_qt_window.o \
|
ui/drivers/qt/ui_qt_window.o \
|
||||||
ui/drivers/qt/ui_qt_browser_window.o \
|
ui/drivers/qt/ui_qt_browser_window.o \
|
||||||
ui/drivers/qt/ui_qt_load_core_window.o \
|
ui/drivers/qt/ui_qt_load_core_window.o \
|
||||||
ui/drivers/qt/ui_qt_msg_window.o
|
ui/drivers/qt/ui_qt_msg_window.o \
|
||||||
|
ui/drivers/qt/flowlayout.o
|
||||||
|
|
||||||
MOC_HEADERS += ui/drivers/ui_qt.h \
|
MOC_HEADERS += ui/drivers/ui_qt.h \
|
||||||
ui/drivers/qt/ui_qt_load_core_window.h
|
ui/drivers/qt/ui_qt_load_core_window.h \
|
||||||
|
ui/drivers/qt/flowlayout.h
|
||||||
|
|
||||||
DEFINES += $(QT5CORE_CFLAGS) $(QT5GUI_CFLAGS) $(QT5WIDGETS_CFLAGS) -DHAVE_MAIN
|
DEFINES += $(QT5CORE_CFLAGS) $(QT5GUI_CFLAGS) $(QT5WIDGETS_CFLAGS) $(QT5CONCURRENT_CFLAGS) -DHAVE_MAIN
|
||||||
#DEFINES += $(QT5WEBENGINE_CFLAGS)
|
#DEFINES += $(QT5WEBENGINE_CFLAGS)
|
||||||
LIBS += $(QT5CORE_LIBS) $(QT5GUI_LIBS) $(QT5WIDGETS_LIBS)
|
LIBS += $(QT5CORE_LIBS) $(QT5GUI_LIBS) $(QT5WIDGETS_LIBS) $(QT5CONCURRENT_LIBS)
|
||||||
#LIBS += $(QT5WEBENGINE_LIBS)
|
#LIBS += $(QT5WEBENGINE_LIBS)
|
||||||
NEED_CXX_LINKER = 1
|
NEED_CXX_LINKER = 1
|
||||||
|
|
||||||
@ -741,11 +743,16 @@ ifeq ($(HW_CONTEXT_MENU_DRIVERS), 1)
|
|||||||
ifeq ($(HAVE_XMB),)
|
ifeq ($(HAVE_XMB),)
|
||||||
HAVE_XMB = 1
|
HAVE_XMB = 1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(HAVE_STRIPES),)
|
||||||
|
HAVE_STRIPES = 1
|
||||||
|
endif
|
||||||
else
|
else
|
||||||
HAVE_ZARCH ?= 0
|
HAVE_ZARCH ?= 0
|
||||||
HAVE_MATERIALUI ?= 0
|
HAVE_MATERIALUI ?= 0
|
||||||
#HAVE_NUKLEAR ?= 0
|
#HAVE_NUKLEAR ?= 0
|
||||||
HAVE_XMB ?= 0
|
HAVE_XMB ?= 0
|
||||||
|
HAVE_STRIPES ?= 0
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(HAVE_RGUI), 1)
|
ifeq ($(HAVE_RGUI), 1)
|
||||||
@ -777,6 +784,12 @@ ifeq ($(HAVE_XMB), 1)
|
|||||||
HAVE_MENU_COMMON = 1
|
HAVE_MENU_COMMON = 1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(HAVE_STRIPES), 1)
|
||||||
|
OBJ += menu/drivers/stripes.o
|
||||||
|
DEFINES += -DHAVE_STRIPES
|
||||||
|
HAVE_MENU_COMMON = 1
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(HAVE_LAKKA), 1)
|
ifeq ($(HAVE_LAKKA), 1)
|
||||||
DEFINES += -DHAVE_LAKKA
|
DEFINES += -DHAVE_LAKKA
|
||||||
endif
|
endif
|
||||||
|
46
command.c
46
command.c
@ -1051,8 +1051,11 @@ static void command_event_deinit_core(bool reinit)
|
|||||||
cheevos_unload();
|
cheevos_unload();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
RARCH_LOG("Unloading game..\n");
|
||||||
core_unload_game();
|
core_unload_game();
|
||||||
|
RARCH_LOG("Unloading core..\n");
|
||||||
core_unload();
|
core_unload();
|
||||||
|
RARCH_LOG("Unloading core symbols..\n");
|
||||||
core_uninit_symbols();
|
core_uninit_symbols();
|
||||||
|
|
||||||
if (reinit)
|
if (reinit)
|
||||||
@ -1398,7 +1401,6 @@ static bool command_event_save_config(
|
|||||||
static bool command_event_save_core_config(void)
|
static bool command_event_save_core_config(void)
|
||||||
{
|
{
|
||||||
char msg[128];
|
char msg[128];
|
||||||
bool ret = false;
|
|
||||||
bool found_path = false;
|
bool found_path = false;
|
||||||
bool overrides_active = false;
|
bool overrides_active = false;
|
||||||
const char *core_path = NULL;
|
const char *core_path = NULL;
|
||||||
@ -1505,7 +1507,7 @@ static bool command_event_save_core_config(void)
|
|||||||
free(config_dir);
|
free(config_dir);
|
||||||
free(config_name);
|
free(config_name);
|
||||||
free(config_path);
|
free(config_path);
|
||||||
return ret;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1838,14 +1840,21 @@ bool command_event(enum event_command cmd, void *data)
|
|||||||
if (cheevos_hardcore_active)
|
if (cheevos_hardcore_active)
|
||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
|
if (!command_event_main_state(cmd))
|
||||||
return command_event_main_state(cmd);
|
return false;
|
||||||
|
break;
|
||||||
case CMD_EVENT_UNDO_LOAD_STATE:
|
case CMD_EVENT_UNDO_LOAD_STATE:
|
||||||
return command_event_main_state(cmd);
|
if (!command_event_main_state(cmd))
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
case CMD_EVENT_UNDO_SAVE_STATE:
|
case CMD_EVENT_UNDO_SAVE_STATE:
|
||||||
return command_event_main_state(cmd);
|
if (!command_event_main_state(cmd))
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
case CMD_EVENT_RESIZE_WINDOWED_SCALE:
|
case CMD_EVENT_RESIZE_WINDOWED_SCALE:
|
||||||
return command_event_resize_windowed_scale();
|
if (!command_event_resize_windowed_scale())
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
case CMD_EVENT_MENU_TOGGLE:
|
case CMD_EVENT_MENU_TOGGLE:
|
||||||
#ifdef HAVE_MENU
|
#ifdef HAVE_MENU
|
||||||
if (menu_driver_is_alive())
|
if (menu_driver_is_alive())
|
||||||
@ -1886,7 +1895,9 @@ bool command_event(enum event_command cmd, void *data)
|
|||||||
configuration_set_int(settings, settings->ints.state_slot, new_state_slot);
|
configuration_set_int(settings, settings->ints.state_slot, new_state_slot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return command_event_main_state(cmd);
|
if (!command_event_main_state(cmd))
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
case CMD_EVENT_SAVE_STATE_DECREMENT:
|
case CMD_EVENT_SAVE_STATE_DECREMENT:
|
||||||
{
|
{
|
||||||
settings_t *settings = config_get_ptr();
|
settings_t *settings = config_get_ptr();
|
||||||
@ -1936,7 +1947,9 @@ bool command_event(enum event_command cmd, void *data)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CMD_EVENT_QUIT:
|
case CMD_EVENT_QUIT:
|
||||||
return retroarch_main_quit();
|
if (!retroarch_main_quit())
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
case CMD_EVENT_CHEEVOS_HARDCORE_MODE_TOGGLE:
|
case CMD_EVENT_CHEEVOS_HARDCORE_MODE_TOGGLE:
|
||||||
#ifdef HAVE_CHEEVOS
|
#ifdef HAVE_CHEEVOS
|
||||||
cheevos_toggle_hardcore_mode();
|
cheevos_toggle_hardcore_mode();
|
||||||
@ -2046,9 +2059,13 @@ TODO: Add a setting for these tweaks */
|
|||||||
break;
|
break;
|
||||||
case CMD_EVENT_AUDIO_STOP:
|
case CMD_EVENT_AUDIO_STOP:
|
||||||
midi_driver_set_all_sounds_off();
|
midi_driver_set_all_sounds_off();
|
||||||
return audio_driver_stop();
|
if (!audio_driver_stop())
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
case CMD_EVENT_AUDIO_START:
|
case CMD_EVENT_AUDIO_START:
|
||||||
return audio_driver_start(rarch_ctl(RARCH_CTL_IS_SHUTDOWN, NULL));
|
if (!audio_driver_start(rarch_ctl(RARCH_CTL_IS_SHUTDOWN, NULL)))
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
case CMD_EVENT_AUDIO_MUTE_TOGGLE:
|
case CMD_EVENT_AUDIO_MUTE_TOGGLE:
|
||||||
{
|
{
|
||||||
bool audio_mute_enable = *(audio_get_bool_ptr(AUDIO_ACTION_MUTE_ENABLE));
|
bool audio_mute_enable = *(audio_get_bool_ptr(AUDIO_ACTION_MUTE_ENABLE));
|
||||||
@ -2633,7 +2650,6 @@ TODO: Add a setting for these tweaks */
|
|||||||
command_event(CMD_EVENT_REMOTE_DEINIT, NULL);
|
command_event(CMD_EVENT_REMOTE_DEINIT, NULL);
|
||||||
input_driver_init_remote();
|
input_driver_init_remote();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CMD_EVENT_MAPPER_DEINIT:
|
case CMD_EVENT_MAPPER_DEINIT:
|
||||||
input_driver_deinit_mapper();
|
input_driver_deinit_mapper();
|
||||||
break;
|
break;
|
||||||
@ -2649,8 +2665,10 @@ TODO: Add a setting for these tweaks */
|
|||||||
const char *path = (const char*)data;
|
const char *path = (const char*)data;
|
||||||
if (string_is_empty(path))
|
if (string_is_empty(path))
|
||||||
return false;
|
return false;
|
||||||
return command_event_disk_control_append_image(path);
|
if (!command_event_disk_control_append_image(path))
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
case CMD_EVENT_DISK_EJECT_TOGGLE:
|
case CMD_EVENT_DISK_EJECT_TOGGLE:
|
||||||
{
|
{
|
||||||
rarch_system_info_t *info = runloop_get_system_info();
|
rarch_system_info_t *info = runloop_get_system_info();
|
||||||
@ -2757,10 +2775,8 @@ TODO: Add a setting for these tweaks */
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CMD_EVENT_UI_COMPANION_TOGGLE:
|
case CMD_EVENT_UI_COMPANION_TOGGLE:
|
||||||
{
|
|
||||||
ui_companion_driver_toggle(true);
|
ui_companion_driver_toggle(true);
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
case CMD_EVENT_GAME_FOCUS_TOGGLE:
|
case CMD_EVENT_GAME_FOCUS_TOGGLE:
|
||||||
{
|
{
|
||||||
static bool game_focus_state = false;
|
static bool game_focus_state = false;
|
||||||
|
@ -284,6 +284,7 @@ enum menu_driver_enum
|
|||||||
MENU_XUI,
|
MENU_XUI,
|
||||||
MENU_MATERIALUI,
|
MENU_MATERIALUI,
|
||||||
MENU_XMB,
|
MENU_XMB,
|
||||||
|
MENU_STRIPES,
|
||||||
MENU_NUKLEAR,
|
MENU_NUKLEAR,
|
||||||
MENU_NULL
|
MENU_NULL
|
||||||
};
|
};
|
||||||
@ -1026,6 +1027,8 @@ const char *config_get_default_menu(void)
|
|||||||
return "glui";
|
return "glui";
|
||||||
case MENU_XMB:
|
case MENU_XMB:
|
||||||
return "xmb";
|
return "xmb";
|
||||||
|
case MENU_STRIPES:
|
||||||
|
return "stripes";
|
||||||
case MENU_NUKLEAR:
|
case MENU_NUKLEAR:
|
||||||
return "nuklear";
|
return "nuklear";
|
||||||
case MENU_NULL:
|
case MENU_NULL:
|
||||||
|
@ -130,6 +130,10 @@ bool fill_pathname_application_data(char *s, size_t len)
|
|||||||
const char* xmb_theme_ident(void);
|
const char* xmb_theme_ident(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_STRIPES
|
||||||
|
const char* stripes_theme_ident(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
void fill_pathname_application_special(char *s,
|
void fill_pathname_application_special(char *s,
|
||||||
size_t len, enum application_special_type type)
|
size_t len, enum application_special_type type)
|
||||||
{
|
{
|
||||||
|
@ -468,6 +468,11 @@ static int frontend_psp_parse_drive_list(void *data, bool load_content)
|
|||||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||||
enum_idx,
|
enum_idx,
|
||||||
FILE_TYPE_DIRECTORY, 0, 0);
|
FILE_TYPE_DIRECTORY, 0, 0);
|
||||||
|
menu_entries_append_enum(list,
|
||||||
|
"imc0:/",
|
||||||
|
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||||
|
enum_idx,
|
||||||
|
FILE_TYPE_DIRECTORY, 0, 0);
|
||||||
#else
|
#else
|
||||||
menu_entries_append_enum(list,
|
menu_entries_append_enum(list,
|
||||||
"ms0:/",
|
"ms0:/",
|
||||||
|
@ -104,6 +104,16 @@
|
|||||||
.height = _video.height,
|
.height = _video.height,
|
||||||
.fullscreen = _video.fullscreen,
|
.fullscreen = _video.fullscreen,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (mode.width == 0 || mode.height == 0)
|
||||||
|
{
|
||||||
|
// 0 indicates full screen, so we'll use the view's dimensions, which should already be full screen
|
||||||
|
// If this turns out to be the wrong assumption, we can use NSScreen to query the dimensions
|
||||||
|
CGSize size = view.frame.size;
|
||||||
|
mode.width = (unsigned int)size.width;
|
||||||
|
mode.height = (unsigned int)size.height;
|
||||||
|
}
|
||||||
|
|
||||||
[apple_platform setVideoMode:mode];
|
[apple_platform setVideoMode:mode];
|
||||||
|
|
||||||
*input = NULL;
|
*input = NULL;
|
||||||
@ -213,6 +223,8 @@
|
|||||||
|
|
||||||
- (void)_updateViewport:(CGSize)size
|
- (void)_updateViewport:(CGSize)size
|
||||||
{
|
{
|
||||||
|
RARCH_LOG("[Metal]: _updateViewport size %.0fx%.0f\n", size.width, size.height);
|
||||||
|
|
||||||
_viewport->full_width = (unsigned int)size.width;
|
_viewport->full_width = (unsigned int)size.width;
|
||||||
_viewport->full_height = (unsigned int)size.height;
|
_viewport->full_height = (unsigned int)size.height;
|
||||||
video_driver_set_size(&_viewport->full_width, &_viewport->full_height);
|
video_driver_set_size(&_viewport->full_width, &_viewport->full_height);
|
||||||
|
16
gfx/drivers/gl_shaders/pipeline_snow.glsl.vert.h
Normal file
16
gfx/drivers/gl_shaders/pipeline_snow.glsl.vert.h
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#include "shaders_common.h"
|
||||||
|
|
||||||
|
/* Need to duplicate these to work around broken stuff on Android.
|
||||||
|
* Must enforce alpha = 1.0 or 32-bit games can potentially go black. */
|
||||||
|
static const char *stock_vertex_xmb_snow = GLSL(
|
||||||
|
attribute vec2 TexCoord;
|
||||||
|
attribute vec2 VertexCoord;
|
||||||
|
attribute vec4 Color;
|
||||||
|
uniform mat4 MVPMatrix;
|
||||||
|
varying vec2 tex_coord;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
gl_Position = MVPMatrix * vec4(VertexCoord, 0.0, 1.0);
|
||||||
|
tex_coord = TexCoord;
|
||||||
|
}
|
||||||
|
);
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/* Need to duplicate these to work around broken stuff on Android.
|
/* Need to duplicate these to work around broken stuff on Android.
|
||||||
* Must enforce alpha = 1.0 or 32-bit games can potentially go black. */
|
* Must enforce alpha = 1.0 or 32-bit games can potentially go black. */
|
||||||
static const char *stock_vertex_xmb_snow_modern = GLSL(
|
static const char *stock_vertex_xmb_snow_core = GLSL(
|
||||||
in vec2 TexCoord;
|
in vec2 TexCoord;
|
||||||
in vec2 VertexCoord;
|
in vec2 VertexCoord;
|
||||||
in vec4 Color;
|
in vec4 Color;
|
@ -129,18 +129,13 @@ static void caca_render_msg(video_frame_info_t *video_info,
|
|||||||
caca_refresh_display(*font->caca->caca_display);
|
caca_refresh_display(*font->caca->caca_display);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void caca_font_bind_block(void* data, void* userdata)
|
|
||||||
{
|
|
||||||
(void)data;
|
|
||||||
}
|
|
||||||
|
|
||||||
font_renderer_t caca_font = {
|
font_renderer_t caca_font = {
|
||||||
caca_init_font,
|
caca_init_font,
|
||||||
caca_render_free_font,
|
caca_render_free_font,
|
||||||
caca_render_msg,
|
caca_render_msg,
|
||||||
"caca font",
|
"caca font",
|
||||||
caca_font_get_glyph, /* get_glyph */
|
caca_font_get_glyph, /* get_glyph */
|
||||||
caca_font_bind_block, /* bind_block */
|
NULL, /* bind_block */
|
||||||
NULL, /* flush */
|
NULL, /* flush */
|
||||||
caca_get_message_width /* get_message_width */
|
caca_get_message_width /* get_message_width */
|
||||||
};
|
};
|
||||||
|
@ -447,12 +447,6 @@ static const struct font_glyph* ctr_font_get_glyph(
|
|||||||
return font->font_driver->get_glyph((void*)font->font_driver, code);
|
return font->font_driver->get_glyph((void*)font->font_driver, code);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ctr_font_bind_block(void* data, void* userdata)
|
|
||||||
{
|
|
||||||
(void)data;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
font_renderer_t ctr_font =
|
font_renderer_t ctr_font =
|
||||||
{
|
{
|
||||||
ctr_font_init_font,
|
ctr_font_init_font,
|
||||||
@ -460,7 +454,7 @@ font_renderer_t ctr_font =
|
|||||||
ctr_font_render_msg,
|
ctr_font_render_msg,
|
||||||
"ctrfont",
|
"ctrfont",
|
||||||
ctr_font_get_glyph,
|
ctr_font_get_glyph,
|
||||||
ctr_font_bind_block,
|
NULL, /* bind_block */
|
||||||
NULL, /* flush_block */
|
NULL, /* flush_block */
|
||||||
ctr_font_get_message_width,
|
ctr_font_get_message_width,
|
||||||
};
|
};
|
||||||
|
@ -362,18 +362,13 @@ static const struct font_glyph* d3d10_font_get_glyph(void *data, uint32_t code)
|
|||||||
return font->font_driver->get_glyph((void*)font->font_driver, code);
|
return font->font_driver->get_glyph((void*)font->font_driver, code);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void d3d10_font_bind_block(void* data, void *userdata)
|
|
||||||
{
|
|
||||||
(void)data;
|
|
||||||
}
|
|
||||||
|
|
||||||
font_renderer_t d3d10_font = {
|
font_renderer_t d3d10_font = {
|
||||||
d3d10_font_init_font,
|
d3d10_font_init_font,
|
||||||
d3d10_font_free_font,
|
d3d10_font_free_font,
|
||||||
d3d10_font_render_msg,
|
d3d10_font_render_msg,
|
||||||
"d3d10font",
|
"d3d10font",
|
||||||
d3d10_font_get_glyph,
|
d3d10_font_get_glyph,
|
||||||
d3d10_font_bind_block,
|
NULL, /* bind_block */
|
||||||
NULL, /* flush */
|
NULL, /* flush */
|
||||||
d3d10_font_get_message_width,
|
d3d10_font_get_message_width,
|
||||||
};
|
};
|
||||||
|
@ -359,18 +359,13 @@ static const struct font_glyph* d3d11_font_get_glyph(void *data, uint32_t code)
|
|||||||
return font->font_driver->get_glyph((void*)font->font_driver, code);
|
return font->font_driver->get_glyph((void*)font->font_driver, code);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void d3d11_font_bind_block(void* data, void *userdata)
|
|
||||||
{
|
|
||||||
(void)data;
|
|
||||||
}
|
|
||||||
|
|
||||||
font_renderer_t d3d11_font = {
|
font_renderer_t d3d11_font = {
|
||||||
d3d11_font_init_font,
|
d3d11_font_init_font,
|
||||||
d3d11_font_free_font,
|
d3d11_font_free_font,
|
||||||
d3d11_font_render_msg,
|
d3d11_font_render_msg,
|
||||||
"d3d11font",
|
"d3d11font",
|
||||||
d3d11_font_get_glyph,
|
d3d11_font_get_glyph,
|
||||||
d3d11_font_bind_block,
|
NULL, /* bind_block */
|
||||||
NULL, /* flush */
|
NULL, /* flush */
|
||||||
d3d11_font_get_message_width,
|
d3d11_font_get_message_width,
|
||||||
};
|
};
|
||||||
|
@ -376,18 +376,13 @@ static const struct font_glyph* d3d12_font_get_glyph(
|
|||||||
return font->font_driver->get_glyph((void*)font->font_driver, code);
|
return font->font_driver->get_glyph((void*)font->font_driver, code);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void d3d12_font_bind_block(void* data, void* userdata)
|
|
||||||
{
|
|
||||||
(void)data;
|
|
||||||
}
|
|
||||||
|
|
||||||
font_renderer_t d3d12_font = {
|
font_renderer_t d3d12_font = {
|
||||||
d3d12_font_init_font,
|
d3d12_font_init_font,
|
||||||
d3d12_font_free_font,
|
d3d12_font_free_font,
|
||||||
d3d12_font_render_msg,
|
d3d12_font_render_msg,
|
||||||
"d3d12font",
|
"d3d12font",
|
||||||
d3d12_font_get_glyph,
|
d3d12_font_get_glyph,
|
||||||
d3d12_font_bind_block,
|
NULL, /* bind_block */
|
||||||
NULL, /* flush */
|
NULL, /* flush */
|
||||||
d3d12_font_get_message_width,
|
d3d12_font_get_message_width,
|
||||||
};
|
};
|
||||||
|
@ -127,24 +127,13 @@ static void sixel_render_msg(video_frame_info_t *video_info,
|
|||||||
/* FIXME: add text drawing support */
|
/* FIXME: add text drawing support */
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sixel_font_flush_block(unsigned width, unsigned height,
|
|
||||||
void* data)
|
|
||||||
{
|
|
||||||
(void)data;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void sixel_font_bind_block(void* data, void* userdata)
|
|
||||||
{
|
|
||||||
(void)data;
|
|
||||||
}
|
|
||||||
|
|
||||||
font_renderer_t sixel_font = {
|
font_renderer_t sixel_font = {
|
||||||
sixel_init_font,
|
sixel_init_font,
|
||||||
sixel_render_free_font,
|
sixel_render_free_font,
|
||||||
sixel_render_msg,
|
sixel_render_msg,
|
||||||
"sixel font",
|
"sixel font",
|
||||||
sixel_font_get_glyph, /* get_glyph */
|
sixel_font_get_glyph, /* get_glyph */
|
||||||
sixel_font_bind_block, /* bind_block */
|
NULL, /* bind_block */
|
||||||
sixel_font_flush_block, /* flush */
|
NULL, /* flush */
|
||||||
sixel_get_message_width /* get_message_width */
|
sixel_get_message_width /* get_message_width */
|
||||||
};
|
};
|
||||||
|
@ -126,18 +126,13 @@ static void vga_render_msg(video_frame_info_t *video_info,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vga_font_bind_block(void* data, void* userdata)
|
|
||||||
{
|
|
||||||
(void)data;
|
|
||||||
}
|
|
||||||
|
|
||||||
font_renderer_t vga_font = {
|
font_renderer_t vga_font = {
|
||||||
vga_init_font,
|
vga_init_font,
|
||||||
vga_render_free_font,
|
vga_render_free_font,
|
||||||
vga_render_msg,
|
vga_render_msg,
|
||||||
"vga font",
|
"vga font",
|
||||||
vga_font_get_glyph, /* get_glyph */
|
vga_font_get_glyph, /* get_glyph */
|
||||||
vga_font_bind_block, /* bind_block */
|
NULL, /* bind_block */
|
||||||
NULL, /* flush */
|
NULL, /* flush */
|
||||||
vga_get_message_width /* get_message_width */
|
vga_get_message_width /* get_message_width */
|
||||||
};
|
};
|
||||||
|
@ -347,18 +347,13 @@ static const struct font_glyph *vita2d_font_get_glyph(
|
|||||||
return font->font_driver->get_glyph((void*)font->font_driver, code);
|
return font->font_driver->get_glyph((void*)font->font_driver, code);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vita2d_font_bind_block(void *data, void *userdata)
|
|
||||||
{
|
|
||||||
(void)data;
|
|
||||||
}
|
|
||||||
|
|
||||||
font_renderer_t vita2d_vita_font = {
|
font_renderer_t vita2d_vita_font = {
|
||||||
vita2d_font_init_font,
|
vita2d_font_init_font,
|
||||||
vita2d_font_free_font,
|
vita2d_font_free_font,
|
||||||
vita2d_font_render_msg,
|
vita2d_font_render_msg,
|
||||||
"vita2dfont",
|
"vita2dfont",
|
||||||
vita2d_font_get_glyph,
|
vita2d_font_get_glyph,
|
||||||
vita2d_font_bind_block,
|
NULL, /* bind_block */
|
||||||
NULL, /* flush */
|
NULL, /* flush */
|
||||||
vita2d_font_get_message_width,
|
vita2d_font_get_message_width,
|
||||||
};
|
};
|
||||||
|
@ -436,24 +436,13 @@ static const struct font_glyph *vulkan_raster_font_get_glyph(
|
|||||||
return glyph;
|
return glyph;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vulkan_raster_font_flush_block(unsigned width, unsigned height,
|
|
||||||
void *data, video_frame_info_t *video_info)
|
|
||||||
{
|
|
||||||
(void)data;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void vulkan_raster_font_bind_block(void *data, void *userdata)
|
|
||||||
{
|
|
||||||
(void)data;
|
|
||||||
}
|
|
||||||
|
|
||||||
font_renderer_t vulkan_raster_font = {
|
font_renderer_t vulkan_raster_font = {
|
||||||
vulkan_raster_font_init_font,
|
vulkan_raster_font_init_font,
|
||||||
vulkan_raster_font_free_font,
|
vulkan_raster_font_free_font,
|
||||||
vulkan_raster_font_render_msg,
|
vulkan_raster_font_render_msg,
|
||||||
"Vulkan raster",
|
"Vulkan raster",
|
||||||
vulkan_raster_font_get_glyph,
|
vulkan_raster_font_get_glyph,
|
||||||
vulkan_raster_font_bind_block,
|
NULL, /* bind_block */
|
||||||
vulkan_raster_font_flush_block,
|
NULL, /* flush_block */
|
||||||
vulkan_get_message_width
|
vulkan_get_message_width
|
||||||
};
|
};
|
||||||
|
@ -377,12 +377,6 @@ static const struct font_glyph* wiiu_font_get_glyph(
|
|||||||
return font->font_driver->get_glyph((void*)font->font_driver, code);
|
return font->font_driver->get_glyph((void*)font->font_driver, code);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void wiiu_font_bind_block(void* data, void* userdata)
|
|
||||||
{
|
|
||||||
(void)data;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
font_renderer_t wiiu_font =
|
font_renderer_t wiiu_font =
|
||||||
{
|
{
|
||||||
wiiu_font_init_font,
|
wiiu_font_init_font,
|
||||||
@ -390,7 +384,7 @@ font_renderer_t wiiu_font =
|
|||||||
wiiu_font_render_msg,
|
wiiu_font_render_msg,
|
||||||
"wiiufont",
|
"wiiufont",
|
||||||
wiiu_font_get_glyph,
|
wiiu_font_get_glyph,
|
||||||
wiiu_font_bind_block,
|
NULL, /* bind_block */
|
||||||
NULL, /* flush */
|
NULL, /* flush */
|
||||||
wiiu_font_get_message_width,
|
wiiu_font_get_message_width,
|
||||||
};
|
};
|
||||||
|
@ -125,9 +125,10 @@ static const char *glsl_prefixes[] = {
|
|||||||
#include "../drivers/gl_shaders/core_pipeline_snowflake.glsl.frag.h"
|
#include "../drivers/gl_shaders/core_pipeline_snowflake.glsl.frag.h"
|
||||||
#include "../drivers/gl_shaders/legacy_pipeline_xmb_ribbon_simple.glsl.vert.h"
|
#include "../drivers/gl_shaders/legacy_pipeline_xmb_ribbon_simple.glsl.vert.h"
|
||||||
#include "../drivers/gl_shaders/modern_pipeline_xmb_ribbon_simple.glsl.vert.h"
|
#include "../drivers/gl_shaders/modern_pipeline_xmb_ribbon_simple.glsl.vert.h"
|
||||||
#include "../drivers/gl_shaders/modern_pipeline_snow.glsl.vert.h"
|
|
||||||
#include "../drivers/gl_shaders/pipeline_xmb_ribbon_simple.glsl.frag.h"
|
#include "../drivers/gl_shaders/pipeline_xmb_ribbon_simple.glsl.frag.h"
|
||||||
#include "../drivers/gl_shaders/pipeline_snow.glsl.frag.h"
|
#include "../drivers/gl_shaders/pipeline_snow.glsl.frag.h"
|
||||||
|
#include "../drivers/gl_shaders/pipeline_snow.glsl.vert.h"
|
||||||
|
#include "../drivers/gl_shaders/pipeline_snow_core.glsl.vert.h"
|
||||||
#include "../drivers/gl_shaders/pipeline_snow_simple.glsl.frag.h"
|
#include "../drivers/gl_shaders/pipeline_snow_simple.glsl.frag.h"
|
||||||
#include "../drivers/gl_shaders/legacy_pipeline_snow.glsl.vert.h"
|
#include "../drivers/gl_shaders/legacy_pipeline_snow.glsl.vert.h"
|
||||||
#include "../drivers/gl_shaders/legacy_pipeline_xmb_ribbon.glsl.vert.h"
|
#include "../drivers/gl_shaders/legacy_pipeline_xmb_ribbon.glsl.vert.h"
|
||||||
@ -843,10 +844,10 @@ static void gl_glsl_init_menu_shaders(void *data)
|
|||||||
&glsl->uniforms[VIDEO_SHADER_MENU_2]);
|
&glsl->uniforms[VIDEO_SHADER_MENU_2]);
|
||||||
|
|
||||||
#if defined(HAVE_OPENGLES)
|
#if defined(HAVE_OPENGLES)
|
||||||
shader_prog_info.vertex = stock_vertex_xmb_snow_modern;
|
shader_prog_info.vertex = stock_vertex_xmb_snow;
|
||||||
shader_prog_info.fragment = stock_fragment_xmb_simple_snow;
|
shader_prog_info.fragment = stock_fragment_xmb_simple_snow;
|
||||||
#else
|
#else
|
||||||
shader_prog_info.vertex = glsl_core ? stock_vertex_xmb_snow_modern : stock_vertex_xmb_snow_legacy;
|
shader_prog_info.vertex = glsl_core ? stock_vertex_xmb_snow_core : stock_vertex_xmb_snow_legacy;
|
||||||
shader_prog_info.fragment = glsl_core ? stock_fragment_xmb_simple_snow_core : stock_fragment_xmb_simple_snow;
|
shader_prog_info.fragment = glsl_core ? stock_fragment_xmb_simple_snow_core : stock_fragment_xmb_simple_snow;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -860,10 +861,10 @@ static void gl_glsl_init_menu_shaders(void *data)
|
|||||||
&glsl->uniforms[VIDEO_SHADER_MENU_3]);
|
&glsl->uniforms[VIDEO_SHADER_MENU_3]);
|
||||||
|
|
||||||
#if defined(HAVE_OPENGLES)
|
#if defined(HAVE_OPENGLES)
|
||||||
shader_prog_info.vertex = stock_vertex_xmb_snow_modern;
|
shader_prog_info.vertex = stock_vertex_xmb_snow;
|
||||||
shader_prog_info.fragment = stock_fragment_xmb_snow;
|
shader_prog_info.fragment = stock_fragment_xmb_snow;
|
||||||
#else
|
#else
|
||||||
shader_prog_info.vertex = glsl_core ? stock_vertex_xmb_snow_modern : stock_vertex_xmb_snow_legacy;
|
shader_prog_info.vertex = glsl_core ? stock_vertex_xmb_snow_core : stock_vertex_xmb_snow_legacy;
|
||||||
shader_prog_info.fragment = glsl_core ? stock_fragment_xmb_snow_core : stock_fragment_xmb_snow;
|
shader_prog_info.fragment = glsl_core ? stock_fragment_xmb_snow_core : stock_fragment_xmb_snow;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -877,10 +878,10 @@ static void gl_glsl_init_menu_shaders(void *data)
|
|||||||
&glsl->uniforms[VIDEO_SHADER_MENU_4]);
|
&glsl->uniforms[VIDEO_SHADER_MENU_4]);
|
||||||
|
|
||||||
#if defined(HAVE_OPENGLES)
|
#if defined(HAVE_OPENGLES)
|
||||||
shader_prog_info.vertex = stock_vertex_xmb_snow_modern;
|
shader_prog_info.vertex = stock_vertex_xmb_snow;
|
||||||
shader_prog_info.fragment = stock_fragment_xmb_bokeh;
|
shader_prog_info.fragment = stock_fragment_xmb_bokeh;
|
||||||
#else
|
#else
|
||||||
shader_prog_info.vertex = glsl_core ? stock_vertex_xmb_snow_modern : stock_vertex_xmb_snow_legacy;
|
shader_prog_info.vertex = glsl_core ? stock_vertex_xmb_snow_core : stock_vertex_xmb_snow_legacy;
|
||||||
shader_prog_info.fragment = glsl_core ? stock_fragment_xmb_bokeh_core : stock_fragment_xmb_bokeh;
|
shader_prog_info.fragment = glsl_core ? stock_fragment_xmb_bokeh_core : stock_fragment_xmb_bokeh;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -894,10 +895,10 @@ static void gl_glsl_init_menu_shaders(void *data)
|
|||||||
&glsl->uniforms[VIDEO_SHADER_MENU_5]);
|
&glsl->uniforms[VIDEO_SHADER_MENU_5]);
|
||||||
|
|
||||||
#if defined(HAVE_OPENGLES)
|
#if defined(HAVE_OPENGLES)
|
||||||
shader_prog_info.vertex = stock_vertex_xmb_snow_modern;
|
shader_prog_info.vertex = stock_vertex_xmb_snow;
|
||||||
shader_prog_info.fragment = stock_fragment_xmb_snowflake;
|
shader_prog_info.fragment = stock_fragment_xmb_snowflake;
|
||||||
#else
|
#else
|
||||||
shader_prog_info.vertex = glsl_core ? stock_vertex_xmb_snow_modern : stock_vertex_xmb_snow_legacy;
|
shader_prog_info.vertex = glsl_core ? stock_vertex_xmb_snow_core : stock_vertex_xmb_snow_legacy;
|
||||||
shader_prog_info.fragment = glsl_core ? stock_fragment_xmb_snowflake_core : stock_fragment_xmb_snowflake;
|
shader_prog_info.fragment = glsl_core ? stock_fragment_xmb_snowflake_core : stock_fragment_xmb_snowflake;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1240,6 +1240,10 @@ MENU
|
|||||||
#include "../menu/drivers/xmb.c"
|
#include "../menu/drivers/xmb.c"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_STRIPES
|
||||||
|
#include "../menu/drivers/stripes.c"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_MATERIALUI
|
#ifdef HAVE_MATERIALUI
|
||||||
#include "../menu/drivers/materialui.c"
|
#include "../menu/drivers/materialui.c"
|
||||||
#endif
|
#endif
|
||||||
|
@ -68,6 +68,9 @@ enum {
|
|||||||
/* Use this to enable/disable using the touch screen as mouse */
|
/* Use this to enable/disable using the touch screen as mouse */
|
||||||
#define ENABLE_TOUCH_SCREEN_MOUSE 1
|
#define ENABLE_TOUCH_SCREEN_MOUSE 1
|
||||||
|
|
||||||
|
/* TODO/FIXME -
|
||||||
|
* fix game focus toggle */
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
float x;
|
float x;
|
||||||
|
@ -33,6 +33,9 @@
|
|||||||
|
|
||||||
#include "../drivers_keyboard/keyboard_event_apple.h"
|
#include "../drivers_keyboard/keyboard_event_apple.h"
|
||||||
|
|
||||||
|
/* TODO/FIXME -
|
||||||
|
* fix game focus toggle */
|
||||||
|
|
||||||
/* Forward declarations */
|
/* Forward declarations */
|
||||||
float get_backing_scale_factor(void);
|
float get_backing_scale_factor(void);
|
||||||
|
|
||||||
|
@ -29,6 +29,9 @@
|
|||||||
|
|
||||||
#define MAX_PADS 1
|
#define MAX_PADS 1
|
||||||
|
|
||||||
|
/* TODO/FIXME -
|
||||||
|
* fix game focus toggle */
|
||||||
|
|
||||||
typedef struct ctr_input
|
typedef struct ctr_input
|
||||||
{
|
{
|
||||||
bool blocked;
|
bool blocked;
|
||||||
|
@ -328,8 +328,10 @@ static bool dinput_is_pressed(struct dinput_input *di,
|
|||||||
{
|
{
|
||||||
const struct retro_keybind *bind = &binds[id];
|
const struct retro_keybind *bind = &binds[id];
|
||||||
|
|
||||||
if (!di->blocked && (bind->key < RETROK_LAST) && dinput_keyboard_pressed(di, bind->key))
|
if ((bind->key < RETROK_LAST) && dinput_keyboard_pressed(di, bind->key))
|
||||||
|
if ((id == RARCH_GAME_FOCUS_TOGGLE) || !di->blocked)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (binds && binds[id].valid)
|
if (binds && binds[id].valid)
|
||||||
{
|
{
|
||||||
if (dinput_mbutton_pressed(di, port, bind->mbutton))
|
if (dinput_mbutton_pressed(di, port, bind->mbutton))
|
||||||
|
@ -21,6 +21,9 @@
|
|||||||
#include "../input_keymaps.h"
|
#include "../input_keymaps.h"
|
||||||
#include "../drivers_keyboard/keyboard_event_dos.h"
|
#include "../drivers_keyboard/keyboard_event_dos.h"
|
||||||
|
|
||||||
|
/* TODO/FIXME -
|
||||||
|
* fix game focus toggle */
|
||||||
|
|
||||||
typedef struct dos_input
|
typedef struct dos_input
|
||||||
{
|
{
|
||||||
const input_device_driver_t *joypad;
|
const input_device_driver_t *joypad;
|
||||||
|
@ -31,6 +31,9 @@
|
|||||||
#define MAX_PADS 4
|
#define MAX_PADS 4
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* TODO/FIXME -
|
||||||
|
* fix game focus toggle */
|
||||||
|
|
||||||
typedef struct gx_input
|
typedef struct gx_input
|
||||||
{
|
{
|
||||||
bool blocked;
|
bool blocked;
|
||||||
|
@ -32,6 +32,9 @@
|
|||||||
#include "../input_keymaps.h"
|
#include "../input_keymaps.h"
|
||||||
#include "../input_driver.h"
|
#include "../input_driver.h"
|
||||||
|
|
||||||
|
/* TODO/FIXME -
|
||||||
|
* fix game focus toggle */
|
||||||
|
|
||||||
typedef struct linuxraw_input
|
typedef struct linuxraw_input
|
||||||
{
|
{
|
||||||
bool blocked;
|
bool blocked;
|
||||||
|
@ -40,6 +40,9 @@
|
|||||||
#define MAX_PADS 7
|
#define MAX_PADS 7
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* TODO/FIXME -
|
||||||
|
* fix game focus toggle */
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
float x;
|
float x;
|
||||||
|
@ -43,6 +43,9 @@
|
|||||||
|
|
||||||
#include "../input_driver.h"
|
#include "../input_driver.h"
|
||||||
|
|
||||||
|
/* TODO/FIXME -
|
||||||
|
* fix game focus toggle */
|
||||||
|
|
||||||
typedef struct psp_input
|
typedef struct psp_input
|
||||||
{
|
{
|
||||||
bool blocked;
|
bool blocked;
|
||||||
|
@ -736,11 +736,13 @@ static bool qnx_is_pressed(qnx_input_t *qnx,
|
|||||||
unsigned port, unsigned id)
|
unsigned port, unsigned id)
|
||||||
{
|
{
|
||||||
const struct retro_keybind *bind = &binds[id];
|
const struct retro_keybind *bind = &binds[id];
|
||||||
|
int key = bind->key;
|
||||||
|
|
||||||
if (id >= RARCH_BIND_LIST_END)
|
if (id >= RARCH_BIND_LIST_END)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!qnx->blocked && qnx_keyboard_pressed(qnx, bind->key))
|
if (qnx_keyboard_pressed(qnx, key))
|
||||||
|
if ((id == RARCH_GAME_FOCUS_TOGGLE) || !qnx->blocked)
|
||||||
return true;
|
return true;
|
||||||
if (binds && binds[id].valid && input_joypad_pressed(qnx->joypad, joypad_info, port, binds, id))
|
if (binds && binds[id].valid && input_joypad_pressed(qnx->joypad, joypad_info, port, binds, id))
|
||||||
return true;
|
return true;
|
||||||
|
@ -479,8 +479,8 @@ static bool rwebinput_is_pressed(rwebinput_input_t *rwebinput,
|
|||||||
const struct retro_keybind *bind = &binds[id];
|
const struct retro_keybind *bind = &binds[id];
|
||||||
int key = bind->key;
|
int key = bind->key;
|
||||||
|
|
||||||
if (!rwebinput->blocked && (bind->key < RETROK_LAST) &&
|
if ((key < RETROK_LAST) && rwebinput_key_pressed(rwebinput, key))
|
||||||
rwebinput_key_pressed(rwebinput, key))
|
if ((id == RARCH_GAME_FOCUS_TOGGLE) || !rwebinput->blocked)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (bind->valid)
|
if (bind->valid)
|
||||||
|
@ -31,6 +31,9 @@
|
|||||||
#include "../../verbosity.h"
|
#include "../../verbosity.h"
|
||||||
#include "../../tasks/tasks_internal.h"
|
#include "../../tasks/tasks_internal.h"
|
||||||
|
|
||||||
|
/* TODO/FIXME -
|
||||||
|
* fix game focus toggle */
|
||||||
|
|
||||||
typedef struct sdl_input
|
typedef struct sdl_input
|
||||||
{
|
{
|
||||||
bool blocked;
|
bool blocked;
|
||||||
|
@ -13,6 +13,9 @@
|
|||||||
|
|
||||||
#define MAX_PADS 10
|
#define MAX_PADS 10
|
||||||
|
|
||||||
|
/* TODO/FIXME -
|
||||||
|
* fix game focus toggle */
|
||||||
|
|
||||||
typedef struct switch_input
|
typedef struct switch_input
|
||||||
{
|
{
|
||||||
const input_device_driver_t *joypad;
|
const input_device_driver_t *joypad;
|
||||||
|
@ -900,6 +900,7 @@ static bool udev_is_pressed(udev_input_t *udev,
|
|||||||
const struct retro_keybind *bind = &binds[id];
|
const struct retro_keybind *bind = &binds[id];
|
||||||
|
|
||||||
if ( (bind->key < RETROK_LAST) && udev_keyboard_pressed(udev, bind->key) )
|
if ( (bind->key < RETROK_LAST) && udev_keyboard_pressed(udev, bind->key) )
|
||||||
|
if ((id == RARCH_GAME_FOCUS_TOGGLE) || !udev->blocked)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (binds && binds[id].valid)
|
if (binds && binds[id].valid)
|
||||||
|
@ -47,6 +47,9 @@
|
|||||||
|
|
||||||
#include "../../verbosity.h"
|
#include "../../verbosity.h"
|
||||||
|
|
||||||
|
/* TODO/FIXME -
|
||||||
|
* fix game focus toggle */
|
||||||
|
|
||||||
/* Forward declaration */
|
/* Forward declaration */
|
||||||
|
|
||||||
void flush_wayland_fd(void *data);
|
void flush_wayland_fd(void *data);
|
||||||
|
@ -403,7 +403,8 @@ static bool winraw_is_pressed(winraw_input_t *wr,
|
|||||||
{
|
{
|
||||||
const struct retro_keybind *bind = &binds[id];
|
const struct retro_keybind *bind = &binds[id];
|
||||||
|
|
||||||
if (!wr->kbd_mapp_block && (bind->key < RETROK_LAST) && winraw_keyboard_pressed(wr, bind->key))
|
if ((bind->key < RETROK_LAST) && winraw_keyboard_pressed(wr, bind->key))
|
||||||
|
if ((id == RARCH_GAME_FOCUS_TOGGLE) || !wr->kbd_mapp_block)
|
||||||
return true;
|
return true;
|
||||||
if (binds && binds[id].valid)
|
if (binds && binds[id].valid)
|
||||||
{
|
{
|
||||||
|
@ -132,6 +132,7 @@ static bool x_is_pressed(x11_input_t *x11,
|
|||||||
const struct retro_keybind *bind = &binds[id];
|
const struct retro_keybind *bind = &binds[id];
|
||||||
|
|
||||||
if ((bind->key < RETROK_LAST) && x_keyboard_pressed(x11, bind->key) )
|
if ((bind->key < RETROK_LAST) && x_keyboard_pressed(x11, bind->key) )
|
||||||
|
if ((id == RARCH_GAME_FOCUS_TOGGLE) || !x11->blocked)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (binds && binds[id].valid)
|
if (binds && binds[id].valid)
|
||||||
|
@ -32,6 +32,9 @@
|
|||||||
|
|
||||||
#define MAX_PADS 4
|
#define MAX_PADS 4
|
||||||
|
|
||||||
|
/* TODO/FIXME -
|
||||||
|
* fix game focus toggle */
|
||||||
|
|
||||||
typedef struct xdk_input
|
typedef struct xdk_input
|
||||||
{
|
{
|
||||||
bool blocked;
|
bool blocked;
|
||||||
|
@ -27,6 +27,9 @@
|
|||||||
|
|
||||||
#define MAX_PADS 4
|
#define MAX_PADS 4
|
||||||
|
|
||||||
|
/* TODO/FIXME -
|
||||||
|
* fix game focus toggle */
|
||||||
|
|
||||||
static uint64_t state[MAX_PADS];
|
static uint64_t state[MAX_PADS];
|
||||||
|
|
||||||
static void xenon360_input_poll(void *data)
|
static void xenon360_input_poll(void *data)
|
||||||
|
@ -34,7 +34,6 @@
|
|||||||
#include <psp2/ctrl.h>
|
#include <psp2/ctrl.h>
|
||||||
#include <psp2/touch.h>
|
#include <psp2/touch.h>
|
||||||
#define PSP_MAX_PADS 4
|
#define PSP_MAX_PADS 4
|
||||||
static int psp2_model;
|
|
||||||
static SceCtrlPortInfo old_ctrl_info, curr_ctrl_info;
|
static SceCtrlPortInfo old_ctrl_info, curr_ctrl_info;
|
||||||
static SceCtrlActuator actuators[PSP_MAX_PADS] = {0};
|
static SceCtrlActuator actuators[PSP_MAX_PADS] = {0};
|
||||||
|
|
||||||
@ -64,7 +63,7 @@ extern uint64_t lifecycle_state;
|
|||||||
static const char *psp_joypad_name(unsigned pad)
|
static const char *psp_joypad_name(unsigned pad)
|
||||||
{
|
{
|
||||||
#ifdef VITA
|
#ifdef VITA
|
||||||
if (psp2_model != SCE_KERNEL_MODEL_VITATV)
|
if (!sceCtrlIsMultiControllerSupported())
|
||||||
return "Vita Controller";
|
return "Vita Controller";
|
||||||
|
|
||||||
switch (curr_ctrl_info.port[pad + 1])
|
switch (curr_ctrl_info.port[pad + 1])
|
||||||
@ -89,8 +88,7 @@ static bool psp_joypad_init(void *data)
|
|||||||
(void)data;
|
(void)data;
|
||||||
|
|
||||||
#if defined(VITA)
|
#if defined(VITA)
|
||||||
psp2_model = sceKernelGetModelForCDialog();
|
if (!sceCtrlIsMultiControllerSupported())
|
||||||
if (psp2_model != SCE_KERNEL_MODEL_VITATV)
|
|
||||||
{
|
{
|
||||||
sceTouchSetSamplingState(SCE_TOUCH_PORT_BACK, SCE_TOUCH_SAMPLING_STATE_START);
|
sceTouchSetSamplingState(SCE_TOUCH_PORT_BACK, SCE_TOUCH_SAMPLING_STATE_START);
|
||||||
sceTouchSetSamplingState(SCE_TOUCH_PORT_FRONT, SCE_TOUCH_SAMPLING_STATE_START);
|
sceTouchSetSamplingState(SCE_TOUCH_PORT_FRONT, SCE_TOUCH_SAMPLING_STATE_START);
|
||||||
@ -192,7 +190,7 @@ static void psp_joypad_poll(void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef VITA
|
#ifdef VITA
|
||||||
if (psp2_model != SCE_KERNEL_MODEL_VITATV)
|
if (!sceCtrlIsMultiControllerSupported())
|
||||||
players_count = 1;
|
players_count = 1;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -237,7 +235,7 @@ static void psp_joypad_poll(void)
|
|||||||
SceCtrlData state_tmp;
|
SceCtrlData state_tmp;
|
||||||
unsigned i = player;
|
unsigned i = player;
|
||||||
#if defined(VITA)
|
#if defined(VITA)
|
||||||
unsigned p = (psp2_model == SCE_KERNEL_MODEL_VITATV) ? player + 1 : player;
|
unsigned p = (sceCtrlIsMultiControllerSupported()) ? player + 1 : player;
|
||||||
if (curr_ctrl_info.port[p] == SCE_CTRL_TYPE_UNPAIRED)
|
if (curr_ctrl_info.port[p] == SCE_CTRL_TYPE_UNPAIRED)
|
||||||
continue;
|
continue;
|
||||||
#elif defined(SN_TARGET_PSP2)
|
#elif defined(SN_TARGET_PSP2)
|
||||||
@ -261,7 +259,7 @@ static void psp_joypad_poll(void)
|
|||||||
continue;
|
continue;
|
||||||
#endif
|
#endif
|
||||||
#if defined(VITA)
|
#if defined(VITA)
|
||||||
if (psp2_model == SCE_KERNEL_MODEL_VITA
|
if (!sceCtrlIsMultiControllerSupported()
|
||||||
&& settings->bools.input_backtouch_enable)
|
&& settings->bools.input_backtouch_enable)
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
@ -332,7 +330,7 @@ static bool psp_joypad_rumble(unsigned pad,
|
|||||||
enum retro_rumble_effect effect, uint16_t strength)
|
enum retro_rumble_effect effect, uint16_t strength)
|
||||||
{
|
{
|
||||||
#ifdef VITA
|
#ifdef VITA
|
||||||
if (psp2_model != SCE_KERNEL_MODEL_VITATV)
|
if (!sceCtrlIsMultiControllerSupported())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
switch (effect)
|
switch (effect)
|
||||||
|
@ -124,7 +124,10 @@ void input_mapper_poll(input_mapper_t *handle)
|
|||||||
if (remap_valid)
|
if (remap_valid)
|
||||||
{
|
{
|
||||||
unsigned current_button_value = BIT256_GET(current_input, j);
|
unsigned current_button_value = BIT256_GET(current_input, j);
|
||||||
|
#ifdef HAVE_OVERLAY
|
||||||
|
if (poll_overlay && i == 0)
|
||||||
|
current_button_value |= input_overlay_key_pressed(overlay_ptr, j);
|
||||||
|
#endif
|
||||||
if ((current_button_value == 1) && (j != remap_button))
|
if ((current_button_value == 1) && (j != remap_button))
|
||||||
{
|
{
|
||||||
MAPPER_SET_KEY (handle,
|
MAPPER_SET_KEY (handle,
|
||||||
|
@ -3479,7 +3479,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_SAVE_GEOMETRY,
|
|||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_SAVE_LAST_TAB,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_SAVE_LAST_TAB,
|
||||||
"最後のコンテンツブラウザーのタブを記憶:")
|
"最後のコンテンツブラウザーのタブを記憶:")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_THEME,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_THEME,
|
||||||
"テーマ")
|
"テーマ:")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_THEME_SYSTEM_DEFAULT,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_THEME_SYSTEM_DEFAULT,
|
||||||
"<システムデフォルト>")
|
"<システムデフォルト>")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_THEME_DARK,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_THEME_DARK,
|
||||||
@ -3543,7 +3543,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_HIDDEN_PLAYLISTS,
|
|||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_HIDE,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_HIDE,
|
||||||
"隠す")
|
"隠す")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_HIGHLIGHT_COLOR,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_HIGHLIGHT_COLOR,
|
||||||
"ハイライトカラー")
|
"ハイライトカラー:")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_CHOOSE,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_CHOOSE,
|
||||||
"選択(&C)...")
|
"選択(&C)...")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_SELECT_COLOR,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_SELECT_COLOR,
|
||||||
@ -3561,7 +3561,15 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_FILE_READ_OPEN_FAILED,
|
|||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_FILE_DOES_NOT_EXIST,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_FILE_DOES_NOT_EXIST,
|
||||||
"ファイルは存在しません。")
|
"ファイルは存在しません。")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_SUGGEST_LOADED_CORE_FIRST,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_SUGGEST_LOADED_CORE_FIRST,
|
||||||
"ロードしたコアを最初に優先する")
|
"ロードしたコアを最初に優先する:")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_ZOOM,
|
||||||
|
"ズーム")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_VIEW,
|
||||||
|
"表示")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_VIEW_TYPE_ICONS,
|
||||||
|
"アイコン")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_VIEW_TYPE_LIST,
|
||||||
|
"一覧")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_QUICK_MENU_OVERRIDE_OPTIONS,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QUICK_MENU_OVERRIDE_OPTIONS,
|
||||||
"オーバーライド")
|
"オーバーライド")
|
||||||
MSG_HASH(MENU_ENUM_SUBLABEL_QUICK_MENU_OVERRIDE_OPTIONS,
|
MSG_HASH(MENU_ENUM_SUBLABEL_QUICK_MENU_OVERRIDE_OPTIONS,
|
||||||
@ -3622,3 +3630,11 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_SUSTAINED_PERFORMANCE_MODE,
|
|||||||
"パフォーマンス維持モード")
|
"パフォーマンス維持モード")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_MPV_SUPPORT,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_MPV_SUPPORT,
|
||||||
"mpv対応")
|
"mpv対応")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_PROGRESS,
|
||||||
|
"進行状況:")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_ALL_PLAYLISTS_LIST_MAX_COUNT,
|
||||||
|
"「すべてのプレイリスト」一覧の最大個数:")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_ALL_PLAYLISTS_GRID_MAX_COUNT,
|
||||||
|
"「すべてのプレイリスト」アイコンの最大個数:")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_SHOW_HIDDEN_FILES,
|
||||||
|
"隠しファイルとフォルダを表示:")
|
||||||
|
@ -3739,7 +3739,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_SAVE_GEOMETRY,
|
|||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_SAVE_LAST_TAB,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_SAVE_LAST_TAB,
|
||||||
"Remember last content browser tab:")
|
"Remember last content browser tab:")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_THEME,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_THEME,
|
||||||
"Theme")
|
"Theme:")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_THEME_SYSTEM_DEFAULT,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_THEME_SYSTEM_DEFAULT,
|
||||||
"<System Default>")
|
"<System Default>")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_THEME_DARK,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_THEME_DARK,
|
||||||
@ -3811,7 +3811,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_HIDDEN_PLAYLISTS,
|
|||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_HIDE,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_HIDE,
|
||||||
"Hide")
|
"Hide")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_HIGHLIGHT_COLOR,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_HIGHLIGHT_COLOR,
|
||||||
"Highlight Color")
|
"Highlight color:")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_CHOOSE,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_CHOOSE,
|
||||||
"&Choose...")
|
"&Choose...")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_SELECT_COLOR,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_SELECT_COLOR,
|
||||||
@ -3829,7 +3829,15 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_FILE_READ_OPEN_FAILED,
|
|||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_FILE_DOES_NOT_EXIST,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_FILE_DOES_NOT_EXIST,
|
||||||
"File does not exist.")
|
"File does not exist.")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_SUGGEST_LOADED_CORE_FIRST,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_SUGGEST_LOADED_CORE_FIRST,
|
||||||
"Suggest loaded core first")
|
"Suggest loaded core first:")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_ZOOM,
|
||||||
|
"Zoom")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_VIEW,
|
||||||
|
"View")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_VIEW_TYPE_ICONS,
|
||||||
|
"Icons")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_VIEW_TYPE_LIST,
|
||||||
|
"List")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_QUICK_MENU_OVERRIDE_OPTIONS,
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QUICK_MENU_OVERRIDE_OPTIONS,
|
||||||
"Overrides")
|
"Overrides")
|
||||||
MSG_HASH(MENU_ENUM_SUBLABEL_QUICK_MENU_OVERRIDE_OPTIONS,
|
MSG_HASH(MENU_ENUM_SUBLABEL_QUICK_MENU_OVERRIDE_OPTIONS,
|
||||||
@ -4132,3 +4140,11 @@ MSG_HASH(MSG_CHEAT_COPY_AFTER_SUCCESS,
|
|||||||
"Cheat copied after this one.")
|
"Cheat copied after this one.")
|
||||||
MSG_HASH(MSG_CHEAT_DELETE_SUCCESS,
|
MSG_HASH(MSG_CHEAT_DELETE_SUCCESS,
|
||||||
"Cheat deleted.")
|
"Cheat deleted.")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_PROGRESS,
|
||||||
|
"Progress:")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_ALL_PLAYLISTS_LIST_MAX_COUNT,
|
||||||
|
"\"All Playlists\" max list entries:")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_ALL_PLAYLISTS_GRID_MAX_COUNT,
|
||||||
|
"\"All Playlists\" max grid entries:")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_SHOW_HIDDEN_FILES,
|
||||||
|
"Show hidden files and folders:")
|
||||||
|
@ -68,6 +68,84 @@ struct config_include_list
|
|||||||
static config_file_t *config_file_new_internal(
|
static config_file_t *config_file_new_internal(
|
||||||
const char *path, unsigned depth);
|
const char *path, unsigned depth);
|
||||||
|
|
||||||
|
static int config_sort_compare_func(struct config_entry_list *a,
|
||||||
|
struct config_entry_list *b)
|
||||||
|
{
|
||||||
|
const char *a_key = a ? a->key : NULL;
|
||||||
|
const char *b_key = b ? b->key : NULL;
|
||||||
|
|
||||||
|
if (!a_key || !b_key)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return strcasecmp(a_key, b_key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* https://stackoverflow.com/questions/7685/merge-sort-a-linked-list */
|
||||||
|
static struct config_entry_list* merge_sort_linked_list(struct config_entry_list *list, int (*compare)(struct config_entry_list *one,struct config_entry_list *two))
|
||||||
|
{
|
||||||
|
struct config_entry_list
|
||||||
|
*right = list,
|
||||||
|
*temp = list,
|
||||||
|
*last = list,
|
||||||
|
*result = 0,
|
||||||
|
*next = 0,
|
||||||
|
*tail = 0;
|
||||||
|
|
||||||
|
/* Trivial case. */
|
||||||
|
if (!list || !list->next)
|
||||||
|
return list;
|
||||||
|
|
||||||
|
/* Find halfway through the list (by running two pointers, one at twice the speed of the other). */
|
||||||
|
while (temp && temp->next)
|
||||||
|
{
|
||||||
|
last = right;
|
||||||
|
right = right->next;
|
||||||
|
temp = temp->next->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Break the list in two. (prev pointers are broken here, but we fix later) */
|
||||||
|
last->next = 0;
|
||||||
|
|
||||||
|
/* Recurse on the two smaller lists: */
|
||||||
|
list = merge_sort_linked_list(list, compare);
|
||||||
|
right = merge_sort_linked_list(right, compare);
|
||||||
|
|
||||||
|
/* Merge: */
|
||||||
|
while (list || right)
|
||||||
|
{
|
||||||
|
/* Take from empty lists, or compare: */
|
||||||
|
if (!right)
|
||||||
|
{
|
||||||
|
next = list;
|
||||||
|
list = list->next;
|
||||||
|
}
|
||||||
|
else if (!list)
|
||||||
|
{
|
||||||
|
next = right;
|
||||||
|
right = right->next;
|
||||||
|
}
|
||||||
|
else if (compare(list, right) < 0)
|
||||||
|
{
|
||||||
|
next = list;
|
||||||
|
list = list->next;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
next = right;
|
||||||
|
right = right->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!result)
|
||||||
|
result = next;
|
||||||
|
else
|
||||||
|
tail->next = next;
|
||||||
|
|
||||||
|
tail = next;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
static char *strip_comment(char *str)
|
static char *strip_comment(char *str)
|
||||||
{
|
{
|
||||||
/* Remove everything after comment.
|
/* Remove everything after comment.
|
||||||
@ -920,7 +998,7 @@ void config_file_dump(config_file_t *conf, FILE *file)
|
|||||||
includes = includes->next;
|
includes = includes->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
list = (struct config_entry_list*)conf->entries;
|
list = merge_sort_linked_list((struct config_entry_list*)conf->entries, config_sort_compare_func);
|
||||||
|
|
||||||
while (list)
|
while (list)
|
||||||
{
|
{
|
||||||
|
4469
menu/drivers/stripes.c
Executable file
4469
menu/drivers/stripes.c
Executable file
File diff suppressed because it is too large
Load Diff
@ -4002,8 +4002,6 @@ static void xmb_init_ribbon(xmb_handle_t * xmb)
|
|||||||
free(ribbon_verts);
|
free(ribbon_verts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void *xmb_init(void **userdata, bool video_is_threaded)
|
static void *xmb_init(void **userdata, bool video_is_threaded)
|
||||||
{
|
{
|
||||||
unsigned width, height;
|
unsigned width, height;
|
||||||
|
@ -85,6 +85,9 @@ static const menu_ctx_driver_t *menu_ctx_drivers[] = {
|
|||||||
#if defined(HAVE_XMB)
|
#if defined(HAVE_XMB)
|
||||||
&menu_ctx_xmb,
|
&menu_ctx_xmb,
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(HAVE_STRIPES)
|
||||||
|
&menu_ctx_stripes,
|
||||||
|
#endif
|
||||||
#if defined(HAVE_RGUI)
|
#if defined(HAVE_RGUI)
|
||||||
&menu_ctx_rgui,
|
&menu_ctx_rgui,
|
||||||
#endif
|
#endif
|
||||||
@ -743,6 +746,56 @@ void menu_display_draw_quad(
|
|||||||
menu_disp->blend_end(video_info);
|
menu_disp->blend_end(video_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void menu_display_draw_polygon(
|
||||||
|
video_frame_info_t *video_info,
|
||||||
|
int x1, int y1,
|
||||||
|
int x2, int y2,
|
||||||
|
int x3, int y3,
|
||||||
|
int x4, int y4,
|
||||||
|
unsigned width, unsigned height,
|
||||||
|
float *color)
|
||||||
|
{
|
||||||
|
menu_display_ctx_draw_t draw;
|
||||||
|
struct video_coords coords;
|
||||||
|
|
||||||
|
float vertex[8];
|
||||||
|
|
||||||
|
vertex[0] = x1 / (float)width;
|
||||||
|
vertex[1] = y1 / (float)height;
|
||||||
|
vertex[2] = x2 / (float)width;
|
||||||
|
vertex[3] = y2 / (float)height;
|
||||||
|
vertex[4] = x3 / (float)width;
|
||||||
|
vertex[5] = y3 / (float)height;
|
||||||
|
vertex[6] = x4 / (float)width;
|
||||||
|
vertex[7] = y4 / (float)height;
|
||||||
|
|
||||||
|
coords.vertices = 4;
|
||||||
|
coords.vertex = &vertex[0];
|
||||||
|
coords.tex_coord = NULL;
|
||||||
|
coords.lut_tex_coord = NULL;
|
||||||
|
coords.color = color;
|
||||||
|
|
||||||
|
if (menu_disp && menu_disp->blend_begin)
|
||||||
|
menu_disp->blend_begin(video_info);
|
||||||
|
|
||||||
|
draw.x = 0;
|
||||||
|
draw.y = 0;
|
||||||
|
draw.width = width;
|
||||||
|
draw.height = height;
|
||||||
|
draw.coords = &coords;
|
||||||
|
draw.matrix_data = NULL;
|
||||||
|
draw.texture = menu_display_white_texture;
|
||||||
|
draw.prim_type = MENU_DISPLAY_PRIM_TRIANGLESTRIP;
|
||||||
|
draw.pipeline.id = 0;
|
||||||
|
draw.scale_factor = 1.0f;
|
||||||
|
draw.rotation = 0.0f;
|
||||||
|
|
||||||
|
menu_display_draw(&draw, video_info);
|
||||||
|
|
||||||
|
if (menu_disp && menu_disp->blend_end)
|
||||||
|
menu_disp->blend_end(video_info);
|
||||||
|
}
|
||||||
|
|
||||||
void menu_display_draw_texture(
|
void menu_display_draw_texture(
|
||||||
video_frame_info_t *video_info,
|
video_frame_info_t *video_info,
|
||||||
int x, int y, unsigned w, unsigned h,
|
int x, int y, unsigned w, unsigned h,
|
||||||
|
@ -726,6 +726,14 @@ void menu_display_draw_quad(
|
|||||||
int x, int y, unsigned w, unsigned h,
|
int x, int y, unsigned w, unsigned h,
|
||||||
unsigned width, unsigned height,
|
unsigned width, unsigned height,
|
||||||
float *color);
|
float *color);
|
||||||
|
void menu_display_draw_polygon(
|
||||||
|
video_frame_info_t *video_info,
|
||||||
|
int x1, int y1,
|
||||||
|
int x2, int y2,
|
||||||
|
int x3, int y3,
|
||||||
|
int x4, int y4,
|
||||||
|
unsigned width, unsigned height,
|
||||||
|
float *color);
|
||||||
void menu_display_draw_texture(
|
void menu_display_draw_texture(
|
||||||
video_frame_info_t *video_info,
|
video_frame_info_t *video_info,
|
||||||
int x, int y, unsigned w, unsigned h,
|
int x, int y, unsigned w, unsigned h,
|
||||||
@ -817,6 +825,7 @@ extern menu_ctx_driver_t menu_ctx_rgui;
|
|||||||
extern menu_ctx_driver_t menu_ctx_mui;
|
extern menu_ctx_driver_t menu_ctx_mui;
|
||||||
extern menu_ctx_driver_t menu_ctx_nuklear;
|
extern menu_ctx_driver_t menu_ctx_nuklear;
|
||||||
extern menu_ctx_driver_t menu_ctx_xmb;
|
extern menu_ctx_driver_t menu_ctx_xmb;
|
||||||
|
extern menu_ctx_driver_t menu_ctx_stripes;
|
||||||
extern menu_ctx_driver_t menu_ctx_zarch;
|
extern menu_ctx_driver_t menu_ctx_zarch;
|
||||||
extern menu_ctx_driver_t menu_ctx_null;
|
extern menu_ctx_driver_t menu_ctx_null;
|
||||||
|
|
||||||
|
@ -1891,6 +1891,9 @@ enum msg_hash_enums
|
|||||||
MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_TITLE,
|
MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_TITLE,
|
||||||
MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_HIGHLIGHT_COLOR,
|
MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_HIGHLIGHT_COLOR,
|
||||||
MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_SUGGEST_LOADED_CORE_FIRST,
|
MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_SUGGEST_LOADED_CORE_FIRST,
|
||||||
|
MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_SHOW_HIDDEN_FILES,
|
||||||
|
MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_ALL_PLAYLISTS_LIST_MAX_COUNT,
|
||||||
|
MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS_ALL_PLAYLISTS_GRID_MAX_COUNT,
|
||||||
MENU_ENUM_LABEL_VALUE_QT_MENU_DOCK_CONTENT_BROWSER,
|
MENU_ENUM_LABEL_VALUE_QT_MENU_DOCK_CONTENT_BROWSER,
|
||||||
MENU_ENUM_LABEL_VALUE_QT_THUMBNAIL_BOXART,
|
MENU_ENUM_LABEL_VALUE_QT_THUMBNAIL_BOXART,
|
||||||
MENU_ENUM_LABEL_VALUE_QT_THUMBNAIL_SCREENSHOT,
|
MENU_ENUM_LABEL_VALUE_QT_THUMBNAIL_SCREENSHOT,
|
||||||
@ -1927,6 +1930,11 @@ enum msg_hash_enums
|
|||||||
MENU_ENUM_LABEL_VALUE_QT_FILE_IS_EMPTY,
|
MENU_ENUM_LABEL_VALUE_QT_FILE_IS_EMPTY,
|
||||||
MENU_ENUM_LABEL_VALUE_QT_FILE_READ_OPEN_FAILED,
|
MENU_ENUM_LABEL_VALUE_QT_FILE_READ_OPEN_FAILED,
|
||||||
MENU_ENUM_LABEL_VALUE_QT_FILE_DOES_NOT_EXIST,
|
MENU_ENUM_LABEL_VALUE_QT_FILE_DOES_NOT_EXIST,
|
||||||
|
MENU_ENUM_LABEL_VALUE_QT_ZOOM,
|
||||||
|
MENU_ENUM_LABEL_VALUE_QT_VIEW,
|
||||||
|
MENU_ENUM_LABEL_VALUE_QT_VIEW_TYPE_ICONS,
|
||||||
|
MENU_ENUM_LABEL_VALUE_QT_VIEW_TYPE_LIST,
|
||||||
|
MENU_ENUM_LABEL_VALUE_QT_PROGRESS,
|
||||||
|
|
||||||
MENU_LABEL(MIDI_INPUT),
|
MENU_LABEL(MIDI_INPUT),
|
||||||
MENU_LABEL(MIDI_OUTPUT),
|
MENU_LABEL(MIDI_OUTPUT),
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>1.7.2</string>
|
<string>1.7.3</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
|
@ -541,7 +541,7 @@
|
|||||||
"-DHAVE_MATERIALUI",
|
"-DHAVE_MATERIALUI",
|
||||||
"-DHAVE_HID",
|
"-DHAVE_HID",
|
||||||
"-DHAVE_XMB",
|
"-DHAVE_XMB",
|
||||||
"-DHAVE_SEGA",
|
"-DHAVE_STRIPES",
|
||||||
"-DHAVE_SHADERPIPELINE",
|
"-DHAVE_SHADERPIPELINE",
|
||||||
"-DHAVE_MMAP",
|
"-DHAVE_MMAP",
|
||||||
"-DHAVE_LIBRETRODB",
|
"-DHAVE_LIBRETRODB",
|
||||||
@ -604,7 +604,7 @@
|
|||||||
"-DHAVE_MATERIALUI",
|
"-DHAVE_MATERIALUI",
|
||||||
"-DHAVE_HID",
|
"-DHAVE_HID",
|
||||||
"-DHAVE_XMB",
|
"-DHAVE_XMB",
|
||||||
"-DHAVE_SEGA",
|
"-DHAVE_STRIPES",
|
||||||
"-DHAVE_SHADERPIPELINE",
|
"-DHAVE_SHADERPIPELINE",
|
||||||
"-DHAVE_MMAP",
|
"-DHAVE_MMAP",
|
||||||
"-DHAVE_LIBRETRODB",
|
"-DHAVE_LIBRETRODB",
|
||||||
|
@ -55,6 +55,14 @@
|
|||||||
0538875720DE11D300769232 /* retro_assert.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = retro_assert.h; sourceTree = "<group>"; };
|
0538875720DE11D300769232 /* retro_assert.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = retro_assert.h; sourceTree = "<group>"; };
|
||||||
0538875820DE11D300769232 /* retro_endianness.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = retro_endianness.h; sourceTree = "<group>"; };
|
0538875820DE11D300769232 /* retro_endianness.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = retro_endianness.h; sourceTree = "<group>"; };
|
||||||
0538875920DE11D300769232 /* libretro.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = libretro.h; sourceTree = "<group>"; };
|
0538875920DE11D300769232 /* libretro.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = libretro.h; sourceTree = "<group>"; };
|
||||||
|
0548E2B220F976E10094A083 /* driver.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = driver.c; path = ../../driver.c; sourceTree = "<group>"; };
|
||||||
|
0548E2B320F976E10094A083 /* dynamic.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = dynamic.c; path = ../../dynamic.c; sourceTree = "<group>"; };
|
||||||
|
0548E2B420F976E10094A083 /* dynamic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dynamic.h; path = ../../dynamic.h; sourceTree = "<group>"; };
|
||||||
|
0548E2B520F976E20094A083 /* driver.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = driver.h; path = ../../driver.h; sourceTree = "<group>"; };
|
||||||
|
0548E2B620F977060094A083 /* playlist.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = playlist.h; path = ../../playlist.h; sourceTree = "<group>"; };
|
||||||
|
0548E2B720F977060094A083 /* performance_counters.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = performance_counters.h; path = ../../performance_counters.h; sourceTree = "<group>"; };
|
||||||
|
0548E2B820F977060094A083 /* performance_counters.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = performance_counters.c; path = ../../performance_counters.c; sourceTree = "<group>"; };
|
||||||
|
0548E2B920F977060094A083 /* playlist.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = playlist.c; path = ../../playlist.c; sourceTree = "<group>"; };
|
||||||
055312AB20DE130A00C4D7F4 /* gl_capabilities.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = gl_capabilities.c; sourceTree = "<group>"; };
|
055312AB20DE130A00C4D7F4 /* gl_capabilities.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = gl_capabilities.c; sourceTree = "<group>"; };
|
||||||
055312AD20DE130A00C4D7F4 /* scaler_int.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = scaler_int.c; sourceTree = "<group>"; };
|
055312AD20DE130A00C4D7F4 /* scaler_int.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = scaler_int.c; sourceTree = "<group>"; };
|
||||||
055312AE20DE130A00C4D7F4 /* pixconv.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = pixconv.c; sourceTree = "<group>"; };
|
055312AE20DE130A00C4D7F4 /* pixconv.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = pixconv.c; sourceTree = "<group>"; };
|
||||||
@ -1070,8 +1078,6 @@
|
|||||||
05BF821320ED69A500D95B19 /* core */ = {
|
05BF821320ED69A500D95B19 /* core */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
05B5F91120ED6AAE009C521F /* retroarch.c */,
|
|
||||||
05B5F91220ED6AAF009C521F /* retroarch.h */,
|
|
||||||
05B5F90F20ED6A03009C521F /* command.c */,
|
05B5F90F20ED6A03009C521F /* command.c */,
|
||||||
05BF821720ED69D100D95B19 /* command.h */,
|
05BF821720ED69D100D95B19 /* command.h */,
|
||||||
05BF821420ED69D100D95B19 /* config.def.h */,
|
05BF821420ED69D100D95B19 /* config.def.h */,
|
||||||
@ -1085,6 +1091,16 @@
|
|||||||
05BF821B20ED69D100D95B19 /* core_info.h */,
|
05BF821B20ED69D100D95B19 /* core_info.h */,
|
||||||
05B5F90E20ED6A03009C521F /* core_type.h */,
|
05B5F90E20ED6A03009C521F /* core_type.h */,
|
||||||
05BF821920ED69D100D95B19 /* core.h */,
|
05BF821920ED69D100D95B19 /* core.h */,
|
||||||
|
0548E2B220F976E10094A083 /* driver.c */,
|
||||||
|
0548E2B520F976E20094A083 /* driver.h */,
|
||||||
|
0548E2B320F976E10094A083 /* dynamic.c */,
|
||||||
|
0548E2B420F976E10094A083 /* dynamic.h */,
|
||||||
|
0548E2B820F977060094A083 /* performance_counters.c */,
|
||||||
|
0548E2B720F977060094A083 /* performance_counters.h */,
|
||||||
|
0548E2B920F977060094A083 /* playlist.c */,
|
||||||
|
0548E2B620F977060094A083 /* playlist.h */,
|
||||||
|
05B5F91120ED6AAE009C521F /* retroarch.c */,
|
||||||
|
05B5F91220ED6AAF009C521F /* retroarch.h */,
|
||||||
);
|
);
|
||||||
name = core;
|
name = core;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -278,14 +278,16 @@ if [ "$HAVE_QT" != 'no' ] && [ "$MOC_PATH" != 'none' ]; then
|
|||||||
check_pkgconf QT5CORE Qt5Core 5.2
|
check_pkgconf QT5CORE Qt5Core 5.2
|
||||||
check_pkgconf QT5GUI Qt5Gui 5.2
|
check_pkgconf QT5GUI Qt5Gui 5.2
|
||||||
check_pkgconf QT5WIDGETS Qt5Widgets 5.2
|
check_pkgconf QT5WIDGETS Qt5Widgets 5.2
|
||||||
|
check_pkgconf QT5CONCURRENT Qt5Concurrent 5.2
|
||||||
#check_pkgconf QT5WEBENGINE Qt5WebEngine 5.4
|
#check_pkgconf QT5WEBENGINE Qt5WebEngine 5.4
|
||||||
|
|
||||||
check_val '' QT5CORE -lQt5Core QT5CORE
|
check_val '' QT5CORE -lQt5Core QT5CORE
|
||||||
check_val '' QT5GUI -lQt5Gui QT5GUI
|
check_val '' QT5GUI -lQt5Gui QT5GUI
|
||||||
check_val '' QT5WIDGETS -lQt5Widgets QT5WIDGETS
|
check_val '' QT5WIDGETS -lQt5Widgets QT5WIDGETS
|
||||||
|
check_val '' QT5CONCURRENT -lQt5Widgets QT5CONCURRENT
|
||||||
#check_val '' QT5WEBENGINE -lQt5WebEngine QT5WEBENGINE
|
#check_val '' QT5WEBENGINE -lQt5WebEngine QT5WEBENGINE
|
||||||
|
|
||||||
if [ "$HAVE_QT5CORE" = "no" ] || [ "$HAVE_QT5GUI" = "no" ] || [ "$HAVE_QT5WIDGETS" = "no" ]; then
|
if [ "$HAVE_QT5CORE" = "no" ] || [ "$HAVE_QT5GUI" = "no" ] || [ "$HAVE_QT5WIDGETS" = "no" ] || [ "$HAVE_QT5CONCURRENT" = "no" ]; then
|
||||||
die : 'Notice: Not building Qt support, required libraries were not found.'
|
die : 'Notice: Not building Qt support, required libraries were not found.'
|
||||||
HAVE_QT=no
|
HAVE_QT=no
|
||||||
else
|
else
|
||||||
@ -510,6 +512,7 @@ if [ "$HAVE_MATERIALUI" != 'no' ] || [ "$HAVE_XMB" != 'no' ] || [ "$HAVE_ZARCH"
|
|||||||
if [ "$HAVE_RGUI" = 'no' ]; then
|
if [ "$HAVE_RGUI" = 'no' ]; then
|
||||||
HAVE_MATERIALUI=no
|
HAVE_MATERIALUI=no
|
||||||
HAVE_XMB=no
|
HAVE_XMB=no
|
||||||
|
HAVE_STRIPES=no
|
||||||
HAVE_ZARCH=no
|
HAVE_ZARCH=no
|
||||||
die : 'Notice: RGUI not available, MaterialUI, XMB and ZARCH will also be disabled.'
|
die : 'Notice: RGUI not available, MaterialUI, XMB and ZARCH will also be disabled.'
|
||||||
elif [ "$HAVE_OPENGL" = 'no' ] && [ "$HAVE_OPENGLES" = 'no' ] && [ "$HAVE_VULKAN" = 'no' ]; then
|
elif [ "$HAVE_OPENGL" = 'no' ] && [ "$HAVE_OPENGLES" = 'no' ] && [ "$HAVE_VULKAN" = 'no' ]; then
|
||||||
@ -522,6 +525,7 @@ if [ "$HAVE_MATERIALUI" != 'no' ] || [ "$HAVE_XMB" != 'no' ] || [ "$HAVE_ZARCH"
|
|||||||
else
|
else
|
||||||
HAVE_MATERIALUI=no
|
HAVE_MATERIALUI=no
|
||||||
HAVE_XMB=no
|
HAVE_XMB=no
|
||||||
|
HAVE_STRIPES=no
|
||||||
HAVE_ZARCH=no
|
HAVE_ZARCH=no
|
||||||
die : 'Notice: Hardware rendering context not available, XMB, MaterialUI and ZARCH will also be disabled.'
|
die : 'Notice: Hardware rendering context not available, XMB, MaterialUI and ZARCH will also be disabled.'
|
||||||
fi
|
fi
|
||||||
|
@ -10,6 +10,7 @@ HAVE_LIBRETRODB=yes # Libretrodb support
|
|||||||
HAVE_RGUI=yes # RGUI menu
|
HAVE_RGUI=yes # RGUI menu
|
||||||
HAVE_MATERIALUI=auto # MaterialUI menu
|
HAVE_MATERIALUI=auto # MaterialUI menu
|
||||||
HAVE_XMB=auto # XMB menu
|
HAVE_XMB=auto # XMB menu
|
||||||
|
HAVE_STRIPES=no # Stripes menu
|
||||||
HAVE_ZARCH=no # Zarch menu
|
HAVE_ZARCH=no # Zarch menu
|
||||||
HAVE_NUKLEAR=no # Nuklear menu
|
HAVE_NUKLEAR=no # Nuklear menu
|
||||||
HAVE_RUNAHEAD=yes # Runahead support
|
HAVE_RUNAHEAD=yes # Runahead support
|
||||||
|
@ -80,7 +80,11 @@ char* get_temp_directory_alloc(void)
|
|||||||
return path;
|
return path;
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
char *path = strcpy_alloc_force(getenv("TMPDIR"));
|
char *path = "/tmp";
|
||||||
|
if (getenv("TMPDIR"))
|
||||||
|
path = getenv("TMPDIR");
|
||||||
|
|
||||||
|
path = strcpy_alloc_force(path);
|
||||||
return path;
|
return path;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
248
ui/drivers/qt/flowlayout.cpp
Normal file
248
ui/drivers/qt/flowlayout.cpp
Normal file
@ -0,0 +1,248 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2016 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the examples of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||||
|
** contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/* Original work Copyright (C) 2016 The Qt Company Ltd.
|
||||||
|
* Modified work Copyright (C) 2018 - Brad Parker
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <QtWidgets>
|
||||||
|
|
||||||
|
#include "flowlayout.h"
|
||||||
|
#include "../ui_qt.h"
|
||||||
|
|
||||||
|
FlowLayout::FlowLayout(QWidget *parent, int margin, int hSpacing, int vSpacing)
|
||||||
|
: QLayout(parent), m_hSpace(hSpacing), m_vSpace(vSpacing)
|
||||||
|
{
|
||||||
|
setContentsMargins(margin, margin, margin, margin);
|
||||||
|
|
||||||
|
connect(this, SIGNAL(signalAddWidgetDeferred(QPointer<ThumbnailWidget>)), this, SLOT(onAddWidgetDeferred(QPointer<ThumbnailWidget>)), Qt::QueuedConnection);
|
||||||
|
}
|
||||||
|
|
||||||
|
FlowLayout::FlowLayout(int margin, int hSpacing, int vSpacing)
|
||||||
|
: m_hSpace(hSpacing), m_vSpace(vSpacing)
|
||||||
|
{
|
||||||
|
setContentsMargins(margin, margin, margin, margin);
|
||||||
|
}
|
||||||
|
|
||||||
|
FlowLayout::~FlowLayout()
|
||||||
|
{
|
||||||
|
QLayoutItem *item = NULL;
|
||||||
|
|
||||||
|
while ((item = takeAt(0)) != NULL)
|
||||||
|
delete item;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlowLayout::addItem(QLayoutItem *item)
|
||||||
|
{
|
||||||
|
itemList.append(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
int FlowLayout::horizontalSpacing() const
|
||||||
|
{
|
||||||
|
if (m_hSpace >= 0)
|
||||||
|
return m_hSpace;
|
||||||
|
else
|
||||||
|
return smartSpacing(QStyle::PM_LayoutHorizontalSpacing);
|
||||||
|
}
|
||||||
|
|
||||||
|
int FlowLayout::verticalSpacing() const
|
||||||
|
{
|
||||||
|
if (m_vSpace >= 0)
|
||||||
|
return m_vSpace;
|
||||||
|
else
|
||||||
|
return smartSpacing(QStyle::PM_LayoutVerticalSpacing);
|
||||||
|
}
|
||||||
|
|
||||||
|
int FlowLayout::count() const
|
||||||
|
{
|
||||||
|
return itemList.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
QLayoutItem* FlowLayout::itemAt(int index) const
|
||||||
|
{
|
||||||
|
return itemList.value(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
QLayoutItem* FlowLayout::takeAt(int index)
|
||||||
|
{
|
||||||
|
if (index >= 0 && index < itemList.size())
|
||||||
|
return itemList.takeAt(index);
|
||||||
|
else
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
Qt::Orientations FlowLayout::expandingDirections() const
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FlowLayout::hasHeightForWidth() const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int FlowLayout::heightForWidth(int width) const
|
||||||
|
{
|
||||||
|
int height = doLayout(QRect(0, 0, width, 0), true);
|
||||||
|
return height;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlowLayout::setGeometry(const QRect &rect)
|
||||||
|
{
|
||||||
|
QLayout::setGeometry(rect);
|
||||||
|
doLayout(rect, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
QSize FlowLayout::sizeHint() const
|
||||||
|
{
|
||||||
|
return minimumSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
QSize FlowLayout::minimumSize() const
|
||||||
|
{
|
||||||
|
QSize size;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
if (itemList.isEmpty())
|
||||||
|
return size;
|
||||||
|
|
||||||
|
for (i = 0; i < itemList.count(); i++)
|
||||||
|
{
|
||||||
|
const QLayoutItem *item = itemList.at(i);
|
||||||
|
size = size.expandedTo(item->minimumSize());
|
||||||
|
}
|
||||||
|
|
||||||
|
size += QSize(2 * margin(), 2 * margin());
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
|
int FlowLayout::doLayout(const QRect &rect, bool testOnly) const
|
||||||
|
{
|
||||||
|
QRect effectiveRect;
|
||||||
|
int left = 0, top = 0, right = 0, bottom = 0;
|
||||||
|
int x = 0;
|
||||||
|
int y = 0;
|
||||||
|
int lineHeight = 0;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
getContentsMargins(&left, &top, &right, &bottom);
|
||||||
|
effectiveRect = rect.adjusted(+left, +top, -right, -bottom);
|
||||||
|
x = effectiveRect.x();
|
||||||
|
y = effectiveRect.y();
|
||||||
|
|
||||||
|
if (itemList.isEmpty())
|
||||||
|
return y + lineHeight - rect.y() + bottom;
|
||||||
|
|
||||||
|
for (i = 0; i < itemList.count(); i++)
|
||||||
|
{
|
||||||
|
QLayoutItem *item = itemList.at(i);
|
||||||
|
const QWidget *wid = item->widget();
|
||||||
|
int spaceX = horizontalSpacing();
|
||||||
|
int spaceY = 0;
|
||||||
|
int nextX = 0;
|
||||||
|
|
||||||
|
if (spaceX == -1)
|
||||||
|
spaceX = wid->style()->layoutSpacing(
|
||||||
|
QSizePolicy::PushButton, QSizePolicy::PushButton, Qt::Horizontal);
|
||||||
|
|
||||||
|
spaceY = verticalSpacing();
|
||||||
|
|
||||||
|
if (spaceY == -1)
|
||||||
|
spaceY = wid->style()->layoutSpacing(
|
||||||
|
QSizePolicy::PushButton, QSizePolicy::PushButton, Qt::Vertical);
|
||||||
|
|
||||||
|
nextX = x + item->sizeHint().width() + spaceX;
|
||||||
|
|
||||||
|
if (nextX - spaceX > effectiveRect.right() && lineHeight > 0)
|
||||||
|
{
|
||||||
|
x = effectiveRect.x();
|
||||||
|
y = y + lineHeight + spaceY;
|
||||||
|
nextX = x + item->sizeHint().width() + spaceX;
|
||||||
|
lineHeight = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!testOnly)
|
||||||
|
item->setGeometry(QRect(QPoint(x, y), item->sizeHint()));
|
||||||
|
|
||||||
|
x = nextX;
|
||||||
|
lineHeight = qMax(lineHeight, item->sizeHint().height());
|
||||||
|
}
|
||||||
|
|
||||||
|
return y + lineHeight - rect.y() + bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
int FlowLayout::smartSpacing(QStyle::PixelMetric pm) const
|
||||||
|
{
|
||||||
|
const QObject *parentObj = parent();
|
||||||
|
|
||||||
|
if (!parentObj)
|
||||||
|
return -1;
|
||||||
|
else if (parentObj->isWidgetType())
|
||||||
|
{
|
||||||
|
const QWidget *pw = static_cast<const QWidget*>(parentObj);
|
||||||
|
return pw->style()->pixelMetric(pm, NULL, pw);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return static_cast<const QLayout*>(parentObj)->spacing();
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlowLayout::addWidgetDeferred(QPointer<ThumbnailWidget> widget)
|
||||||
|
{
|
||||||
|
emit signalAddWidgetDeferred(widget);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlowLayout::onAddWidgetDeferred(QPointer<ThumbnailWidget> widget)
|
||||||
|
{
|
||||||
|
/* widget might have been deleted before we got to it since this uses a queued connection, hence the guarded QPointer */
|
||||||
|
if (!widget)
|
||||||
|
return;
|
||||||
|
|
||||||
|
addWidget(widget);
|
||||||
|
}
|
105
ui/drivers/qt/flowlayout.h
Normal file
105
ui/drivers/qt/flowlayout.h
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2016 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the examples of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:BSD$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** BSD License Usage
|
||||||
|
** Alternatively, you may use this file under the terms of the BSD license
|
||||||
|
** as follows:
|
||||||
|
**
|
||||||
|
** "Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions are
|
||||||
|
** met:
|
||||||
|
** * Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** * Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in
|
||||||
|
** the documentation and/or other materials provided with the
|
||||||
|
** distribution.
|
||||||
|
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||||
|
** contributors may be used to endorse or promote products derived
|
||||||
|
** from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/* Original work Copyright (C) 2016 The Qt Company Ltd.
|
||||||
|
* Modified work Copyright (C) 2018 - Brad Parker
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* bparker: Removed C++11 override keyword from original source
|
||||||
|
* Changed QList to QVector
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FLOWLAYOUT_H
|
||||||
|
#define FLOWLAYOUT_H
|
||||||
|
|
||||||
|
#include <QLayout>
|
||||||
|
#include <QRect>
|
||||||
|
#include <QStyle>
|
||||||
|
|
||||||
|
class ThumbnailWidget;
|
||||||
|
|
||||||
|
class FlowLayout : public QLayout
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit FlowLayout(QWidget *parent, int margin = -1, int hSpacing = -1, int vSpacing = -1);
|
||||||
|
explicit FlowLayout(int margin = -1, int hSpacing = -1, int vSpacing = -1);
|
||||||
|
~FlowLayout();
|
||||||
|
|
||||||
|
void addItem(QLayoutItem *item);
|
||||||
|
int horizontalSpacing() const;
|
||||||
|
int verticalSpacing() const;
|
||||||
|
Qt::Orientations expandingDirections() const;
|
||||||
|
bool hasHeightForWidth() const;
|
||||||
|
int heightForWidth(int) const;
|
||||||
|
int count() const;
|
||||||
|
QLayoutItem* itemAt(int index) const;
|
||||||
|
QSize minimumSize() const;
|
||||||
|
void setGeometry(const QRect &rect);
|
||||||
|
QSize sizeHint() const;
|
||||||
|
QLayoutItem* takeAt(int index);
|
||||||
|
void addWidgetDeferred(QPointer<ThumbnailWidget> widget);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void signalAddWidgetDeferred(QPointer<ThumbnailWidget> widget);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void onAddWidgetDeferred(QPointer<ThumbnailWidget> widget);
|
||||||
|
|
||||||
|
private:
|
||||||
|
int doLayout(const QRect &rect, bool testOnly) const;
|
||||||
|
int smartSpacing(QStyle::PixelMetric pm) const;
|
||||||
|
|
||||||
|
QVector<QLayoutItem*> itemList;
|
||||||
|
int m_hSpace;
|
||||||
|
int m_vSpace;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // FLOWLAYOUT_H
|
@ -266,8 +266,11 @@ void LoadCoreWindow::initCoreList(const QStringList &extensionFilters)
|
|||||||
|
|
||||||
if (rowsToHide.size() != m_table->rowCount())
|
if (rowsToHide.size() != m_table->rowCount())
|
||||||
{
|
{
|
||||||
foreach (const int &row, rowsToHide)
|
int i = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < rowsToHide.count() && rowsToHide.count() > 0; i++)
|
||||||
{
|
{
|
||||||
|
const int &row = rowsToHide.at(i);
|
||||||
m_table->setRowHidden(row, true);
|
m_table->setRowHidden(row, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,22 @@
|
|||||||
#include <QString>
|
#include <QString>
|
||||||
|
|
||||||
/* %1 is a placeholder for palette(highlight) or the equivalent chosen by the user */
|
/* %1 is a placeholder for palette(highlight) or the equivalent chosen by the user */
|
||||||
static const QString qt_theme_default_stylesheet = QStringLiteral("");
|
static const QString qt_theme_default_stylesheet = QStringLiteral(""
|
||||||
|
"QPushButton[flat=\"true\"] {\n"
|
||||||
|
" min-height:20px;\n"
|
||||||
|
" min-width:80px;\n"
|
||||||
|
" padding:1px 3px 1px 3px;\n"
|
||||||
|
" background-color: transparent;\n"
|
||||||
|
" border: 1px solid #ddd;\n"
|
||||||
|
"}\n"
|
||||||
|
"ThumbnailWidget#thumbnailWidget, ThumbnailLabel#thumbnailGridLabel, QLabel#thumbnailQLabel {\n"
|
||||||
|
" background-color:#555555;\n"
|
||||||
|
"}\n"
|
||||||
|
"ThumbnailWidget#thumbnailWidgetSelected {\n"
|
||||||
|
" background-color:#555555;\n"
|
||||||
|
" border:3px solid %1;\n"
|
||||||
|
"}\n"
|
||||||
|
);
|
||||||
|
|
||||||
static const QString qt_theme_dark_stylesheet = QStringLiteral(""
|
static const QString qt_theme_dark_stylesheet = QStringLiteral(""
|
||||||
"QWidget {\n"
|
"QWidget {\n"
|
||||||
@ -233,6 +248,10 @@ static const QString qt_theme_dark_stylesheet = QStringLiteral(""
|
|||||||
" border:1px solid %1;\n"
|
" border:1px solid %1;\n"
|
||||||
" border-radius:4px;\n"
|
" border-radius:4px;\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
|
"QPushButton[flat=\"true\"] {\n"
|
||||||
|
" background-color: transparent;\n"
|
||||||
|
" border: 1px solid #ddd;\n"
|
||||||
|
"}\n"
|
||||||
"QRadioButton::indicator {\n"
|
"QRadioButton::indicator {\n"
|
||||||
" width:18px;\n"
|
" width:18px;\n"
|
||||||
" height:18px;\n"
|
" height:18px;\n"
|
||||||
@ -374,4 +393,11 @@ static const QString qt_theme_dark_stylesheet = QStringLiteral(""
|
|||||||
"QSizeGrip {\n"
|
"QSizeGrip {\n"
|
||||||
" background-color:solid;\n"
|
" background-color:solid;\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
|
"ThumbnailWidget#thumbnailWidget, ThumbnailLabel#thumbnailGridLabel, QLabel#thumbnailQLabel {\n"
|
||||||
|
" background-color:#555555;\n"
|
||||||
|
"}\n"
|
||||||
|
"ThumbnailWidget#thumbnailWidgetSelected {\n"
|
||||||
|
" background-color:#555555;\n"
|
||||||
|
" border:3px solid %1;\n"
|
||||||
|
"}\n"
|
||||||
);
|
);
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -42,6 +42,24 @@
|
|||||||
#import <MetalKit/MetalKit.h>
|
#import <MetalKit/MetalKit.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@interface WindowListener : NSResponder<NSWindowDelegate>
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation WindowListener
|
||||||
|
|
||||||
|
/* Similarly to SDL, we'll respond to key events by doing nothing so we don't beep.
|
||||||
|
*/
|
||||||
|
- (void)flagsChanged:(NSEvent *)event
|
||||||
|
{}
|
||||||
|
|
||||||
|
- (void)keyDown:(NSEvent *)event
|
||||||
|
{}
|
||||||
|
|
||||||
|
- (void)keyUp:(NSEvent *)event
|
||||||
|
{}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
id<ApplePlatform> apple_platform;
|
id<ApplePlatform> apple_platform;
|
||||||
|
|
||||||
#if (defined(__MACH__) && (defined(__ppc__) || defined(__ppc64__)))
|
#if (defined(__MACH__) && (defined(__ppc__) || defined(__ppc64__)))
|
||||||
@ -54,7 +72,7 @@ id<ApplePlatform> apple_platform;
|
|||||||
apple_view_type_t _vt;
|
apple_view_type_t _vt;
|
||||||
NSView* _renderView;
|
NSView* _renderView;
|
||||||
id _sleepActivity;
|
id _sleepActivity;
|
||||||
|
WindowListener *_listener;
|
||||||
}
|
}
|
||||||
|
|
||||||
@property (nonatomic, retain) NSWindow IBOutlet* window;
|
@property (nonatomic, retain) NSWindow IBOutlet* window;
|
||||||
@ -109,7 +127,7 @@ static void app_terminate(void)
|
|||||||
case NSEventTypeKeyDown:
|
case NSEventTypeKeyDown:
|
||||||
case NSEventTypeKeyUp:
|
case NSEventTypeKeyUp:
|
||||||
{
|
{
|
||||||
NSString* ch = (NSString*)event.characters;
|
NSString* ch = event.characters;
|
||||||
uint32_t character = 0;
|
uint32_t character = 0;
|
||||||
uint32_t mod = 0;
|
uint32_t mod = 0;
|
||||||
|
|
||||||
@ -164,13 +182,13 @@ static void app_terminate(void)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
/* Relative */
|
/* Relative */
|
||||||
apple->mouse_rel_x = event.deltaX;
|
apple->mouse_rel_x = (int16_t)event.deltaX;
|
||||||
apple->mouse_rel_y = event.deltaY;
|
apple->mouse_rel_y = (int16_t)event.deltaY;
|
||||||
|
|
||||||
/* Absolute */
|
/* Absolute */
|
||||||
pos = [apple_platform.renderView convertPoint:[event locationInWindow] fromView:nil];
|
pos = [apple_platform.renderView convertPoint:[event locationInWindow] fromView:nil];
|
||||||
apple->touches[0].screen_x = pos.x;
|
apple->touches[0].screen_x = (int16_t)pos.x;
|
||||||
apple->touches[0].screen_y = pos.y;
|
apple->touches[0].screen_y = (int16_t)pos.y;
|
||||||
|
|
||||||
mouse_pos = [apple_platform.renderView convertPoint:[event locationInWindow] fromView:nil];
|
mouse_pos = [apple_platform.renderView convertPoint:[event locationInWindow] fromView:nil];
|
||||||
apple->window_pos_x = (int16_t)mouse_pos.x;
|
apple->window_pos_x = (int16_t)mouse_pos.x;
|
||||||
@ -245,7 +263,12 @@ static char** waiting_argv;
|
|||||||
[self.window setCollectionBehavior:NS_WINDOW_COLLECTION_BEHAVIOR_FULLSCREEN_PRIMARY];
|
[self.window setCollectionBehavior:NS_WINDOW_COLLECTION_BEHAVIOR_FULLSCREEN_PRIMARY];
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
_listener = [WindowListener new];
|
||||||
|
|
||||||
[self.window setAcceptsMouseMovedEvents: YES];
|
[self.window setAcceptsMouseMovedEvents: YES];
|
||||||
|
[self.window setNextResponder:_listener];
|
||||||
|
self.window.delegate = _listener;
|
||||||
|
|
||||||
[[self.window contentView] setAutoresizesSubviews:YES];
|
[[self.window contentView] setAutoresizesSubviews:YES];
|
||||||
|
|
||||||
@ -263,6 +286,9 @@ static char** waiting_argv;
|
|||||||
|
|
||||||
waiting_argc = 0;
|
waiting_argc = 0;
|
||||||
|
|
||||||
|
[self.window makeMainWindow];
|
||||||
|
[self.window makeKeyWindow];
|
||||||
|
|
||||||
[self performSelectorOnMainThread:@selector(rarch_main) withObject:nil waitUntilDone:NO];
|
[self performSelectorOnMainThread:@selector(rarch_main) withObject:nil waitUntilDone:NO];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -271,7 +297,7 @@ static char** waiting_argv;
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
RARCH_LOG("[Cocoa] change view type: %d → %d\n", _vt, vt);
|
RARCH_LOG("[Cocoa]: change view type: %d → %d\n", _vt, vt);
|
||||||
|
|
||||||
_vt = vt;
|
_vt = vt;
|
||||||
if (_renderView != nil)
|
if (_renderView != nil)
|
||||||
@ -279,6 +305,7 @@ static char** waiting_argv;
|
|||||||
_renderView.wantsLayer = NO;
|
_renderView.wantsLayer = NO;
|
||||||
_renderView.layer = nil;
|
_renderView.layer = nil;
|
||||||
[_renderView removeFromSuperview];
|
[_renderView removeFromSuperview];
|
||||||
|
self.window.contentView = nil;
|
||||||
_renderView = nil;
|
_renderView = nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -309,8 +336,8 @@ static char** waiting_argv;
|
|||||||
_renderView.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable;
|
_renderView.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable;
|
||||||
_renderView.frame = self.window.contentView.bounds;
|
_renderView.frame = self.window.contentView.bounds;
|
||||||
|
|
||||||
[self.window.contentView addSubview:_renderView];
|
self.window.contentView = _renderView;
|
||||||
[self.window makeFirstResponder:_renderView];
|
[self.window.contentView setNextResponder:_listener];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (apple_view_type_t)viewType {
|
- (apple_view_type_t)viewType {
|
||||||
|
@ -56,10 +56,25 @@ typedef struct ui_companion_qt
|
|||||||
} ui_companion_qt_t;
|
} ui_companion_qt_t;
|
||||||
|
|
||||||
ThumbnailWidget::ThumbnailWidget(QWidget *parent) :
|
ThumbnailWidget::ThumbnailWidget(QWidget *parent) :
|
||||||
QWidget(parent)
|
QFrame(parent)
|
||||||
|
,m_sizeHint(QSize(256, 256))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ThumbnailWidget::mousePressEvent(QMouseEvent *event)
|
||||||
|
{
|
||||||
|
QWidget::mousePressEvent(event);
|
||||||
|
|
||||||
|
emit mousePressed();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ThumbnailWidget::mouseDoubleClickEvent(QMouseEvent *event)
|
||||||
|
{
|
||||||
|
QWidget::mouseDoubleClickEvent(event);
|
||||||
|
|
||||||
|
emit mouseDoubleClicked();
|
||||||
|
}
|
||||||
|
|
||||||
void ThumbnailWidget::paintEvent(QPaintEvent *event)
|
void ThumbnailWidget::paintEvent(QPaintEvent *event)
|
||||||
{
|
{
|
||||||
QStyleOption o;
|
QStyleOption o;
|
||||||
@ -70,7 +85,7 @@ void ThumbnailWidget::paintEvent(QPaintEvent *event)
|
|||||||
QStyle::PE_Widget, &o, &p, this);
|
QStyle::PE_Widget, &o, &p, this);
|
||||||
p.end();
|
p.end();
|
||||||
|
|
||||||
QWidget::paintEvent(event);
|
QFrame::paintEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ThumbnailWidget::resizeEvent(QResizeEvent *event)
|
void ThumbnailWidget::resizeEvent(QResizeEvent *event)
|
||||||
@ -80,7 +95,12 @@ void ThumbnailWidget::resizeEvent(QResizeEvent *event)
|
|||||||
|
|
||||||
QSize ThumbnailWidget::sizeHint() const
|
QSize ThumbnailWidget::sizeHint() const
|
||||||
{
|
{
|
||||||
return QSize(256, 256);
|
return m_sizeHint;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ThumbnailWidget::setSizeHint(QSize size)
|
||||||
|
{
|
||||||
|
m_sizeHint = size;
|
||||||
}
|
}
|
||||||
|
|
||||||
ThumbnailLabel::ThumbnailLabel(QWidget *parent) :
|
ThumbnailLabel::ThumbnailLabel(QWidget *parent) :
|
||||||
@ -231,6 +251,8 @@ static void* ui_companion_qt_init(void)
|
|||||||
QAction *exitAction = NULL;
|
QAction *exitAction = NULL;
|
||||||
QComboBox *launchWithComboBox = NULL;
|
QComboBox *launchWithComboBox = NULL;
|
||||||
QSettings *qsettings = NULL;
|
QSettings *qsettings = NULL;
|
||||||
|
QListWidget *listWidget = NULL;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
if (!handle)
|
if (!handle)
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -251,11 +273,14 @@ static void* ui_companion_qt_init(void)
|
|||||||
mainwindow->setWindowTitle("RetroArch");
|
mainwindow->setWindowTitle("RetroArch");
|
||||||
mainwindow->setDockOptions(QMainWindow::AnimatedDocks | QMainWindow::AllowNestedDocks | QMainWindow::AllowTabbedDocks | GROUPED_DRAGGING);
|
mainwindow->setDockOptions(QMainWindow::AnimatedDocks | QMainWindow::AllowNestedDocks | QMainWindow::AllowTabbedDocks | GROUPED_DRAGGING);
|
||||||
|
|
||||||
|
listWidget = mainwindow->playlistListWidget();
|
||||||
|
|
||||||
widget = new QWidget(mainwindow);
|
widget = new QWidget(mainwindow);
|
||||||
widget->setObjectName("tableWidget");
|
widget->setObjectName("tableWidget");
|
||||||
|
|
||||||
layout = new QVBoxLayout();
|
layout = new QVBoxLayout();
|
||||||
layout->addWidget(mainwindow->contentTableWidget());
|
layout->addWidget(mainwindow->contentTableWidget());
|
||||||
|
layout->addWidget(mainwindow->contentGridWidget());
|
||||||
|
|
||||||
widget->setLayout(layout);
|
widget->setLayout(layout);
|
||||||
|
|
||||||
@ -286,6 +311,10 @@ static void* ui_companion_qt_init(void)
|
|||||||
|
|
||||||
QObject::connect(viewClosedDocksMenu, SIGNAL(aboutToShow()), mainwindow, SLOT(onViewClosedDocksAboutToShow()));
|
QObject::connect(viewClosedDocksMenu, SIGNAL(aboutToShow()), mainwindow, SLOT(onViewClosedDocksAboutToShow()));
|
||||||
|
|
||||||
|
viewMenu->addSeparator();
|
||||||
|
viewMenu->addAction(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_QT_VIEW_TYPE_ICONS), mainwindow, SLOT(onIconViewClicked()));
|
||||||
|
viewMenu->addAction(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_QT_VIEW_TYPE_LIST), mainwindow, SLOT(onListViewClicked()));
|
||||||
|
viewMenu->addSeparator();
|
||||||
viewMenu->addAction(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS), mainwindow->viewOptionsDialog(), SLOT(showDialog()));
|
viewMenu->addAction(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_QT_MENU_VIEW_OPTIONS), mainwindow->viewOptionsDialog(), SLOT(showDialog()));
|
||||||
|
|
||||||
playlistWidget = new QWidget();
|
playlistWidget = new QWidget();
|
||||||
@ -447,6 +476,12 @@ static void* ui_companion_qt_init(void)
|
|||||||
/* this should come last */
|
/* this should come last */
|
||||||
mainwindow->resizeThumbnails(true, true, true);
|
mainwindow->resizeThumbnails(true, true, true);
|
||||||
|
|
||||||
|
if (qsettings->contains("all_playlists_list_max_count"))
|
||||||
|
mainwindow->setAllPlaylistsListMaxCount(qsettings->value("all_playlists_list_max_count", 0).toInt());
|
||||||
|
|
||||||
|
if (qsettings->contains("all_playlists_grid_max_count"))
|
||||||
|
mainwindow->setAllPlaylistsGridMaxCount(qsettings->value("all_playlists_grid_max_count", 5000).toInt());
|
||||||
|
|
||||||
if (qsettings->contains("geometry"))
|
if (qsettings->contains("geometry"))
|
||||||
if (qsettings->contains("save_geometry"))
|
if (qsettings->contains("save_geometry"))
|
||||||
mainwindow->restoreGeometry(qsettings->value("geometry").toByteArray());
|
mainwindow->restoreGeometry(qsettings->value("geometry").toByteArray());
|
||||||
@ -455,17 +490,6 @@ static void* ui_companion_qt_init(void)
|
|||||||
if (qsettings->contains("dock_positions"))
|
if (qsettings->contains("dock_positions"))
|
||||||
mainwindow->restoreState(qsettings->value("dock_positions").toByteArray());
|
mainwindow->restoreState(qsettings->value("dock_positions").toByteArray());
|
||||||
|
|
||||||
if (qsettings->contains("save_last_tab"))
|
|
||||||
{
|
|
||||||
if (qsettings->contains("last_tab"))
|
|
||||||
{
|
|
||||||
int lastTabIndex = qsettings->value("last_tab", 0).toInt();
|
|
||||||
|
|
||||||
if (lastTabIndex >= 0 && browserAndPlaylistTabWidget->count() > lastTabIndex)
|
|
||||||
browserAndPlaylistTabWidget->setCurrentIndex(lastTabIndex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (qsettings->contains("theme"))
|
if (qsettings->contains("theme"))
|
||||||
{
|
{
|
||||||
QString themeStr = qsettings->value("theme").toString();
|
QString themeStr = qsettings->value("theme").toString();
|
||||||
@ -483,6 +507,58 @@ static void* ui_companion_qt_init(void)
|
|||||||
else
|
else
|
||||||
mainwindow->setTheme();
|
mainwindow->setTheme();
|
||||||
|
|
||||||
|
if (qsettings->contains("view_type"))
|
||||||
|
{
|
||||||
|
QString viewType = qsettings->value("view_type", "list").toString();
|
||||||
|
|
||||||
|
if (viewType == "list")
|
||||||
|
mainwindow->setCurrentViewType(MainWindow::VIEW_TYPE_LIST);
|
||||||
|
else if (viewType == "icons")
|
||||||
|
mainwindow->setCurrentViewType(MainWindow::VIEW_TYPE_ICONS);
|
||||||
|
else
|
||||||
|
mainwindow->setCurrentViewType(MainWindow::VIEW_TYPE_LIST);
|
||||||
|
|
||||||
|
/* we set it to the same thing a second time so that m_lastViewType is also equal to the startup view type */
|
||||||
|
mainwindow->setCurrentViewType(mainwindow->getCurrentViewType());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
mainwindow->setCurrentViewType(MainWindow::VIEW_TYPE_LIST);
|
||||||
|
|
||||||
|
/* We make sure to hook up the tab widget callback only after the tabs themselves have been added,
|
||||||
|
* but before changing to a specific one, to avoid the callback firing before the view type is set.
|
||||||
|
*/
|
||||||
|
QObject::connect(browserAndPlaylistTabWidget, SIGNAL(currentChanged(int)), mainwindow, SLOT(onTabWidgetIndexChanged(int)));
|
||||||
|
|
||||||
|
/* setting the last tab must come after setting the view type */
|
||||||
|
if (qsettings->contains("save_last_tab"))
|
||||||
|
{
|
||||||
|
if (qsettings->contains("last_tab"))
|
||||||
|
{
|
||||||
|
int lastTabIndex = qsettings->value("last_tab", 0).toInt();
|
||||||
|
|
||||||
|
if (lastTabIndex >= 0 && browserAndPlaylistTabWidget->count() > lastTabIndex)
|
||||||
|
{
|
||||||
|
browserAndPlaylistTabWidget->setCurrentIndex(lastTabIndex);
|
||||||
|
mainwindow->onTabWidgetIndexChanged(lastTabIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
browserAndPlaylistTabWidget->setCurrentIndex(0);
|
||||||
|
mainwindow->onTabWidgetIndexChanged(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < listWidget->count() && listWidget->count() > 0; i++)
|
||||||
|
{
|
||||||
|
/* select the first non-hidden row */
|
||||||
|
if (!listWidget->isRowHidden(i))
|
||||||
|
{
|
||||||
|
listWidget->setCurrentRow(i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,14 +22,21 @@
|
|||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
#include <QTreeView>
|
#include <QTreeView>
|
||||||
#include <QTableWidget>
|
#include <QTableWidget>
|
||||||
|
#include <QFrame>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
#include <QRegularExpression>
|
#include <QRegularExpression>
|
||||||
#include <QPalette>
|
#include <QPalette>
|
||||||
#include <QPlainTextEdit>
|
#include <QPlainTextEdit>
|
||||||
|
#include <QFutureWatcher>
|
||||||
|
#include <QPixmap>
|
||||||
|
#include <QImage>
|
||||||
|
#include <QPointer>
|
||||||
|
#include <QProgressBar>
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
#include <retro_assert.h>
|
||||||
#include <retro_common_api.h>
|
#include <retro_common_api.h>
|
||||||
#include "../ui_companion_driver.h"
|
#include "../ui_companion_driver.h"
|
||||||
}
|
}
|
||||||
@ -52,21 +59,51 @@ class QPixmap;
|
|||||||
class QPaintEvent;
|
class QPaintEvent;
|
||||||
class QSettings;
|
class QSettings;
|
||||||
class QCheckBox;
|
class QCheckBox;
|
||||||
|
class QSpinBox;
|
||||||
class QFormLayout;
|
class QFormLayout;
|
||||||
class QStyle;
|
class QStyle;
|
||||||
class QScrollArea;
|
class QScrollArea;
|
||||||
|
class QSlider;
|
||||||
class LoadCoreWindow;
|
class LoadCoreWindow;
|
||||||
class MainWindow;
|
class MainWindow;
|
||||||
|
class ThumbnailWidget;
|
||||||
|
class ThumbnailLabel;
|
||||||
|
class FlowLayout;
|
||||||
|
|
||||||
class ThumbnailWidget : public QWidget
|
class GridItem : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
GridItem();
|
||||||
|
|
||||||
|
QPointer<ThumbnailWidget> widget;
|
||||||
|
QPointer<ThumbnailLabel> label;
|
||||||
|
QHash<QString, QString> hash;
|
||||||
|
QImage image;
|
||||||
|
QPixmap pixmap;
|
||||||
|
QFutureWatcher<GridItem*> imageWatcher;
|
||||||
|
QString labelText;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ThumbnailWidget : public QFrame
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
ThumbnailWidget(QWidget *parent = 0);
|
ThumbnailWidget(QWidget *parent = 0);
|
||||||
|
ThumbnailWidget(const ThumbnailWidget& other) { retro_assert(false && "DONT EVER USE THIS"); }
|
||||||
|
|
||||||
QSize sizeHint() const;
|
QSize sizeHint() const;
|
||||||
|
void setSizeHint(QSize size);
|
||||||
|
signals:
|
||||||
|
void mouseDoubleClicked();
|
||||||
|
void mousePressed();
|
||||||
|
private:
|
||||||
|
QSize m_sizeHint;
|
||||||
protected:
|
protected:
|
||||||
void paintEvent(QPaintEvent *event);
|
void paintEvent(QPaintEvent *event);
|
||||||
void resizeEvent(QResizeEvent *event);
|
void resizeEvent(QResizeEvent *event);
|
||||||
|
void mouseDoubleClickEvent(QMouseEvent *event);
|
||||||
|
void mousePressEvent(QMouseEvent *event);
|
||||||
};
|
};
|
||||||
|
|
||||||
class ThumbnailLabel : public QWidget
|
class ThumbnailLabel : public QWidget
|
||||||
@ -156,6 +193,8 @@ private:
|
|||||||
QLabel *m_highlightColorLabel;
|
QLabel *m_highlightColorLabel;
|
||||||
QString m_customThemePath;
|
QString m_customThemePath;
|
||||||
QCheckBox *m_suggestLoadedCoreFirstCheckBox;
|
QCheckBox *m_suggestLoadedCoreFirstCheckBox;
|
||||||
|
QSpinBox *m_allPlaylistsListMaxCountSpinBox;
|
||||||
|
QSpinBox *m_allPlaylistsGridMaxCountSpinBox;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CoreInfoLabel : public QLabel
|
class CoreInfoLabel : public QLabel
|
||||||
@ -204,6 +243,12 @@ class MainWindow : public QMainWindow
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
enum ViewType
|
||||||
|
{
|
||||||
|
VIEW_TYPE_ICONS,
|
||||||
|
VIEW_TYPE_LIST
|
||||||
|
};
|
||||||
|
|
||||||
enum Theme
|
enum Theme
|
||||||
{
|
{
|
||||||
THEME_SYSTEM_DEFAULT,
|
THEME_SYSTEM_DEFAULT,
|
||||||
@ -223,6 +268,8 @@ public:
|
|||||||
TreeView* dirTreeView();
|
TreeView* dirTreeView();
|
||||||
QListWidget* playlistListWidget();
|
QListWidget* playlistListWidget();
|
||||||
TableWidget* contentTableWidget();
|
TableWidget* contentTableWidget();
|
||||||
|
FlowLayout* contentGridLayout();
|
||||||
|
QWidget* contentGridWidget();
|
||||||
QWidget* searchWidget();
|
QWidget* searchWidget();
|
||||||
QLineEdit* searchLineEdit();
|
QLineEdit* searchLineEdit();
|
||||||
QComboBox* launchWithComboBox();
|
QComboBox* launchWithComboBox();
|
||||||
@ -231,10 +278,10 @@ public:
|
|||||||
QToolButton* runPushButton();
|
QToolButton* runPushButton();
|
||||||
QToolButton* stopPushButton();
|
QToolButton* stopPushButton();
|
||||||
QTabWidget* browserAndPlaylistTabWidget();
|
QTabWidget* browserAndPlaylistTabWidget();
|
||||||
QList<QHash<QString, QString> > getPlaylistDefaultCores();
|
QVector<QHash<QString, QString> > getPlaylistDefaultCores();
|
||||||
ViewOptionsDialog* viewOptionsDialog();
|
ViewOptionsDialog* viewOptionsDialog();
|
||||||
QSettings* settings();
|
QSettings* settings();
|
||||||
QList<QHash<QString, QString> > getCoreInfo();
|
QVector<QHash<QString, QString> > getCoreInfo();
|
||||||
void setTheme(Theme theme = THEME_SYSTEM_DEFAULT);
|
void setTheme(Theme theme = THEME_SYSTEM_DEFAULT);
|
||||||
Theme theme();
|
Theme theme();
|
||||||
Theme getThemeFromString(QString themeString);
|
Theme getThemeFromString(QString themeString);
|
||||||
@ -245,6 +292,12 @@ public:
|
|||||||
bool setCustomThemeFile(QString filePath);
|
bool setCustomThemeFile(QString filePath);
|
||||||
void setCustomThemeString(QString qss);
|
void setCustomThemeString(QString qss);
|
||||||
const QString& customThemeString() const;
|
const QString& customThemeString() const;
|
||||||
|
GridItem* doDeferredImageLoad(GridItem *item, QString path);
|
||||||
|
void setCurrentViewType(ViewType viewType);
|
||||||
|
QString getCurrentViewTypeString();
|
||||||
|
ViewType getCurrentViewType();
|
||||||
|
void setAllPlaylistsListMaxCount(int count);
|
||||||
|
void setAllPlaylistsGridMaxCount(int count);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void thumbnailChanged(const QPixmap &pixmap);
|
void thumbnailChanged(const QPixmap &pixmap);
|
||||||
@ -259,10 +312,12 @@ public slots:
|
|||||||
void onBrowserUpClicked();
|
void onBrowserUpClicked();
|
||||||
void onBrowserStartClicked();
|
void onBrowserStartClicked();
|
||||||
void initContentTableWidget();
|
void initContentTableWidget();
|
||||||
|
void initContentGridLayout();
|
||||||
void onViewClosedDocksAboutToShow();
|
void onViewClosedDocksAboutToShow();
|
||||||
void onShowHiddenDockWidgetAction();
|
void onShowHiddenDockWidgetAction();
|
||||||
void setCoreActions();
|
void setCoreActions();
|
||||||
void onRunClicked();
|
void onRunClicked();
|
||||||
|
void loadContent(const QHash<QString, QString> &contentHash);
|
||||||
void onStartCoreClicked();
|
void onStartCoreClicked();
|
||||||
void onTableWidgetEnterPressed();
|
void onTableWidgetEnterPressed();
|
||||||
void selectBrowserDir(QString path);
|
void selectBrowserDir(QString path);
|
||||||
@ -277,6 +332,9 @@ public slots:
|
|||||||
void deferReloadPlaylists();
|
void deferReloadPlaylists();
|
||||||
void onGotReloadPlaylists();
|
void onGotReloadPlaylists();
|
||||||
void showWelcomeScreen();
|
void showWelcomeScreen();
|
||||||
|
void onIconViewClicked();
|
||||||
|
void onListViewClicked();
|
||||||
|
void onTabWidgetIndexChanged(int index);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onLoadCoreClicked(const QStringList &extensionFilters = QStringList());
|
void onLoadCoreClicked(const QStringList &extensionFilters = QStringList());
|
||||||
@ -285,24 +343,38 @@ private slots:
|
|||||||
void onCoreLoaded();
|
void onCoreLoaded();
|
||||||
void onCurrentListItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
|
void onCurrentListItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
|
||||||
void onCurrentTableItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous);
|
void onCurrentTableItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous);
|
||||||
|
void currentItemChanged(const QHash<QString, QString> &hash);
|
||||||
void onSearchEnterPressed();
|
void onSearchEnterPressed();
|
||||||
void onSearchLineEditEdited(const QString &text);
|
void onSearchLineEditEdited(const QString &text);
|
||||||
void addPlaylistItemsToTable(QString path);
|
void addPlaylistItemsToTable(const QStringList &paths, bool all = false);
|
||||||
|
void addPlaylistHashToTable(const QVector<QHash<QString, QString> > &items);
|
||||||
|
void addPlaylistItemsToGrid(const QStringList &paths, bool all = false);
|
||||||
|
void addPlaylistHashToGrid(const QVector<QHash<QString, QString> > &items);
|
||||||
void onContentItemDoubleClicked(QTableWidgetItem *item);
|
void onContentItemDoubleClicked(QTableWidgetItem *item);
|
||||||
void onCoreLoadWindowClosed();
|
void onCoreLoadWindowClosed();
|
||||||
void onTabWidgetIndexChanged(int index);
|
|
||||||
void onTreeViewItemsSelected(QModelIndexList selectedIndexes);
|
void onTreeViewItemsSelected(QModelIndexList selectedIndexes);
|
||||||
void onSearchResetClicked();
|
void onSearchResetClicked();
|
||||||
void onLaunchWithComboBoxIndexChanged(int index);
|
void onLaunchWithComboBoxIndexChanged(int index);
|
||||||
void onFileBrowserTreeContextMenuRequested(const QPoint &pos);
|
void onFileBrowserTreeContextMenuRequested(const QPoint &pos);
|
||||||
void onPlaylistWidgetContextMenuRequested(const QPoint &pos);
|
void onPlaylistWidgetContextMenuRequested(const QPoint &pos);
|
||||||
void onStopClicked();
|
void onStopClicked();
|
||||||
|
void onDeferredImageLoaded();
|
||||||
|
void onZoomValueChanged(int value);
|
||||||
|
void onContentGridInited();
|
||||||
|
void onUpdateGridItemPixmapFromImage(GridItem *item);
|
||||||
|
void onPendingItemUpdates();
|
||||||
|
void onGridItemDoubleClicked();
|
||||||
|
void onGridItemClicked();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setCurrentCoreLabel();
|
void setCurrentCoreLabel();
|
||||||
void getPlaylistFiles();
|
void getPlaylistFiles();
|
||||||
bool isCoreLoaded();
|
bool isCoreLoaded();
|
||||||
bool isContentLessCore();
|
bool isContentLessCore();
|
||||||
|
void removeGridItems();
|
||||||
|
void loadImageDeferred(GridItem *item, QString path);
|
||||||
|
void calcGridItemSize(GridItem *item, int zoomValue);
|
||||||
|
QVector<QHash<QString, QString> > getPlaylistItems(QString pathString);
|
||||||
|
|
||||||
LoadCoreWindow *m_loadCoreWindow;
|
LoadCoreWindow *m_loadCoreWindow;
|
||||||
QTimer *m_timer;
|
QTimer *m_timer;
|
||||||
@ -344,12 +416,31 @@ private:
|
|||||||
QListWidgetItem *m_historyPlaylistsItem;
|
QListWidgetItem *m_historyPlaylistsItem;
|
||||||
QIcon m_folderIcon;
|
QIcon m_folderIcon;
|
||||||
QString m_customThemeString;
|
QString m_customThemeString;
|
||||||
|
FlowLayout *m_gridLayout;
|
||||||
|
QWidget *m_gridWidget;
|
||||||
|
QScrollArea *m_gridScrollArea;
|
||||||
|
QVector<QPointer<GridItem> > m_gridItems;
|
||||||
|
QWidget *m_gridLayoutWidget;
|
||||||
|
QSlider *m_zoomSlider;
|
||||||
|
int m_lastZoomSliderValue;
|
||||||
|
QList<GridItem*> m_pendingItemUpdates;
|
||||||
|
ViewType m_viewType;
|
||||||
|
QProgressBar *m_gridProgressBar;
|
||||||
|
QWidget *m_gridProgressWidget;
|
||||||
|
QHash<QString, QString> m_currentGridHash;
|
||||||
|
ViewType m_lastViewType;
|
||||||
|
QPointer<ThumbnailWidget> m_currentGridWidget;
|
||||||
|
int m_allPlaylistsListMaxCount;
|
||||||
|
int m_allPlaylistsGridMaxCount;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void closeEvent(QCloseEvent *event);
|
void closeEvent(QCloseEvent *event);
|
||||||
void keyPressEvent(QKeyEvent *event);
|
void keyPressEvent(QKeyEvent *event);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Q_DECLARE_METATYPE(ThumbnailWidget)
|
||||||
|
Q_DECLARE_METATYPE(QPointer<ThumbnailWidget>)
|
||||||
|
|
||||||
RETRO_BEGIN_DECLS
|
RETRO_BEGIN_DECLS
|
||||||
|
|
||||||
typedef struct ui_application_qt
|
typedef struct ui_application_qt
|
||||||
|
Loading…
x
Reference in New Issue
Block a user