mirror of
https://github.com/libretro/RetroArch
synced 2025-04-16 08:43:10 +00:00
Cleanups
This commit is contained in:
parent
862acd7160
commit
c07e6a6da2
@ -41,7 +41,6 @@
|
|||||||
#define D3D9_XRGB8888_FORMAT D3DFMT_X8R8G8B8
|
#define D3D9_XRGB8888_FORMAT D3DFMT_X8R8G8B8
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
RETRO_BEGIN_DECLS
|
RETRO_BEGIN_DECLS
|
||||||
|
|
||||||
typedef struct d3d9_video d3d9_video_t;
|
typedef struct d3d9_video d3d9_video_t;
|
||||||
|
@ -99,6 +99,31 @@ enum cheevos_appearance_anchor
|
|||||||
CHEEVOS_APPEARANCE_ANCHOR_LAST
|
CHEEVOS_APPEARANCE_ANCHOR_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum disp_widget_flags_enum
|
||||||
|
{
|
||||||
|
DISPWIDG_FLAG_TASK_FINISHED = (1 << 0),
|
||||||
|
DISPWIDG_FLAG_TASK_ERROR = (1 << 1),
|
||||||
|
DISPWIDG_FLAG_TASK_CANCELLED = (1 << 2),
|
||||||
|
DISPWIDG_FLAG_EXPIRATION_TIMER_STARTED = (1 << 3),
|
||||||
|
/* Is it currently doing the fade out animation ? */
|
||||||
|
DISPWIDG_FLAG_DYING = (1 << 4),
|
||||||
|
/* Has the timer expired ? if so, should be set to dying */
|
||||||
|
DISPWIDG_FLAG_EXPIRED = (1 << 5),
|
||||||
|
/* Unfold animation */
|
||||||
|
DISPWIDG_FLAG_UNFOLDED = (1 << 6),
|
||||||
|
DISPWIDG_FLAG_UNFOLDING = (1 << 7)
|
||||||
|
};
|
||||||
|
|
||||||
|
/* There can only be one message animation at a time to
|
||||||
|
* avoid confusing users */
|
||||||
|
enum dispgfx_widget_flags
|
||||||
|
{
|
||||||
|
DISPGFX_WIDGET_FLAG_MSG_QUEUE_HAS_ICONS = (1 << 0),
|
||||||
|
DISPGFX_WIDGET_FLAG_PERSISTING = (1 << 1),
|
||||||
|
DISPGFX_WIDGET_FLAG_MOVING = (1 << 2),
|
||||||
|
DISPGFX_WIDGET_FLAG_INITED = (1 << 3)
|
||||||
|
};
|
||||||
|
|
||||||
/* This structure holds all objects + metadata
|
/* This structure holds all objects + metadata
|
||||||
* corresponding to a particular font */
|
* corresponding to a particular font */
|
||||||
typedef struct
|
typedef struct
|
||||||
@ -121,21 +146,6 @@ typedef struct
|
|||||||
gfx_widget_font_data_t msg_queue;
|
gfx_widget_font_data_t msg_queue;
|
||||||
} gfx_widget_fonts_t;
|
} gfx_widget_fonts_t;
|
||||||
|
|
||||||
enum disp_widget_flags_enum
|
|
||||||
{
|
|
||||||
DISPWIDG_FLAG_TASK_FINISHED = (1 << 0),
|
|
||||||
DISPWIDG_FLAG_TASK_ERROR = (1 << 1),
|
|
||||||
DISPWIDG_FLAG_TASK_CANCELLED = (1 << 2),
|
|
||||||
DISPWIDG_FLAG_EXPIRATION_TIMER_STARTED = (1 << 3),
|
|
||||||
/* Is it currently doing the fade out animation ? */
|
|
||||||
DISPWIDG_FLAG_DYING = (1 << 4),
|
|
||||||
/* Has the timer expired ? if so, should be set to dying */
|
|
||||||
DISPWIDG_FLAG_EXPIRED = (1 << 5),
|
|
||||||
/* Unfold animation */
|
|
||||||
DISPWIDG_FLAG_UNFOLDED = (1 << 6),
|
|
||||||
DISPWIDG_FLAG_UNFOLDING = (1 << 7)
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct disp_widget_msg
|
typedef struct disp_widget_msg
|
||||||
{
|
{
|
||||||
char *msg;
|
char *msg;
|
||||||
@ -162,16 +172,6 @@ typedef struct disp_widget_msg
|
|||||||
uint8_t task_count;
|
uint8_t task_count;
|
||||||
} disp_widget_msg_t;
|
} disp_widget_msg_t;
|
||||||
|
|
||||||
/* There can only be one message animation at a time to
|
|
||||||
* avoid confusing users */
|
|
||||||
enum dispgfx_widget_flags
|
|
||||||
{
|
|
||||||
DISPGFX_WIDGET_FLAG_MSG_QUEUE_HAS_ICONS = (1 << 0),
|
|
||||||
DISPGFX_WIDGET_FLAG_PERSISTING = (1 << 1),
|
|
||||||
DISPGFX_WIDGET_FLAG_MOVING = (1 << 2),
|
|
||||||
DISPGFX_WIDGET_FLAG_INITED = (1 << 3)
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct dispgfx_widget
|
typedef struct dispgfx_widget
|
||||||
{
|
{
|
||||||
uint64_t gfx_widgets_frame_count;
|
uint64_t gfx_widgets_frame_count;
|
||||||
|
@ -25,7 +25,6 @@
|
|||||||
#include <boolean.h>
|
#include <boolean.h>
|
||||||
#include <retro_common_api.h>
|
#include <retro_common_api.h>
|
||||||
|
|
||||||
|
|
||||||
RETRO_BEGIN_DECLS
|
RETRO_BEGIN_DECLS
|
||||||
|
|
||||||
typedef struct videocrt_switch
|
typedef struct videocrt_switch
|
||||||
|
@ -44,6 +44,39 @@ RETRO_BEGIN_DECLS
|
|||||||
#define GFX_MAX_FRAME_HISTORY 128
|
#define GFX_MAX_FRAME_HISTORY 128
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define RARCH_WILDCARD_DELIMITER "$"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* video_shader_parse_type:
|
||||||
|
* @path : Shader path.
|
||||||
|
*
|
||||||
|
* Parses type of shader.
|
||||||
|
*
|
||||||
|
* Returns: value of shader type if it could be determined,
|
||||||
|
* otherwise RARCH_SHADER_NONE.
|
||||||
|
**/
|
||||||
|
#define video_shader_parse_type(path) video_shader_get_type_from_ext(path_get_extension((path)), NULL)
|
||||||
|
|
||||||
|
enum wildcard_type
|
||||||
|
{
|
||||||
|
RARCH_WILDCARD_CONTENT_DIR = 0,
|
||||||
|
RARCH_WILDCARD_CORE,
|
||||||
|
RARCH_WILDCARD_GAME,
|
||||||
|
RARCH_WILDCARD_VIDEO_DRIVER,
|
||||||
|
RARCH_WILDCARD_VIDEO_USER_ROTATION,
|
||||||
|
RARCH_WILDCARD_VIDEO_ALLOW_CORE_ROTATION,
|
||||||
|
RARCH_WILDCARD_CORE_REQUESTED_ROTATION,
|
||||||
|
RARCH_WILDCARD_VIDEO_FINAL_ROTATION,
|
||||||
|
RARCH_WILDCARD_SCREEN_ORIENTATION,
|
||||||
|
RARCH_WILDCARD_VIEWPORT_ASPECT_ORIENTATION,
|
||||||
|
RARCH_WILDCARD_CORE_ASPECT_ORIENTATION,
|
||||||
|
RARCH_WILDCARD_PRESET_DIR,
|
||||||
|
RARCH_WILDCARD_PRESET,
|
||||||
|
RARCH_WILDCARD_VIDEO_DRIVER_SHADER_EXT,
|
||||||
|
RARCH_WILDCARD_VIDEO_DRIVER_PRESET_EXT
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
enum rarch_shader_type
|
enum rarch_shader_type
|
||||||
{
|
{
|
||||||
RARCH_SHADER_NONE = 0,
|
RARCH_SHADER_NONE = 0,
|
||||||
@ -69,6 +102,15 @@ enum
|
|||||||
RARCH_FILTER_MAX
|
RARCH_FILTER_MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum video_shader_flags
|
||||||
|
{
|
||||||
|
SHDR_FLAG_MODERN = (1 << 0), /* Only used for XML shaders. */
|
||||||
|
/* Indicative of whether shader was modified -
|
||||||
|
* for instance from the menus */
|
||||||
|
SHDR_FLAG_MODIFIED = (1 << 1),
|
||||||
|
SHDR_FLAG_DISABLED = (1 << 2)
|
||||||
|
};
|
||||||
|
|
||||||
enum gfx_wrap_type
|
enum gfx_wrap_type
|
||||||
{
|
{
|
||||||
RARCH_WRAP_BORDER = 0, /* Kinda deprecated, but keep as default.
|
RARCH_WRAP_BORDER = 0, /* Kinda deprecated, but keep as default.
|
||||||
@ -148,15 +190,6 @@ struct video_shader_lut
|
|||||||
bool mipmap;
|
bool mipmap;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum video_shader_flags
|
|
||||||
{
|
|
||||||
SHDR_FLAG_MODERN = (1 << 0), /* Only used for XML shaders. */
|
|
||||||
/* Indicative of whether shader was modified -
|
|
||||||
* for instance from the menus */
|
|
||||||
SHDR_FLAG_MODIFIED = (1 << 1),
|
|
||||||
SHDR_FLAG_DISABLED = (1 << 2)
|
|
||||||
};
|
|
||||||
|
|
||||||
/* This is pretty big, shouldn't be put on the stack.
|
/* This is pretty big, shouldn't be put on the stack.
|
||||||
* Avoid lots of allocation for convenience. */
|
* Avoid lots of allocation for convenience. */
|
||||||
struct video_shader
|
struct video_shader
|
||||||
@ -188,34 +221,12 @@ struct video_shader
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define RARCH_WILDCARD_DELIMITER "$"
|
|
||||||
|
|
||||||
enum wildcard_type
|
|
||||||
{
|
|
||||||
RARCH_WILDCARD_CONTENT_DIR = 0,
|
|
||||||
RARCH_WILDCARD_CORE,
|
|
||||||
RARCH_WILDCARD_GAME,
|
|
||||||
RARCH_WILDCARD_VIDEO_DRIVER,
|
|
||||||
RARCH_WILDCARD_VIDEO_USER_ROTATION,
|
|
||||||
RARCH_WILDCARD_VIDEO_ALLOW_CORE_ROTATION,
|
|
||||||
RARCH_WILDCARD_CORE_REQUESTED_ROTATION,
|
|
||||||
RARCH_WILDCARD_VIDEO_FINAL_ROTATION,
|
|
||||||
RARCH_WILDCARD_SCREEN_ORIENTATION,
|
|
||||||
RARCH_WILDCARD_VIEWPORT_ASPECT_ORIENTATION,
|
|
||||||
RARCH_WILDCARD_CORE_ASPECT_ORIENTATION,
|
|
||||||
RARCH_WILDCARD_PRESET_DIR,
|
|
||||||
RARCH_WILDCARD_PRESET,
|
|
||||||
RARCH_WILDCARD_VIDEO_DRIVER_SHADER_EXT,
|
|
||||||
RARCH_WILDCARD_VIDEO_DRIVER_PRESET_EXT
|
|
||||||
};
|
|
||||||
|
|
||||||
struct wildcard_token
|
struct wildcard_token
|
||||||
{
|
{
|
||||||
enum wildcard_type token_id;
|
enum wildcard_type token_id;
|
||||||
char token_name[64];
|
char token_name[64];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* video_shader_resolve_parameters:
|
* video_shader_resolve_parameters:
|
||||||
* @conf : Preset file to read from.
|
* @conf : Preset file to read from.
|
||||||
@ -226,7 +237,6 @@ struct wildcard_token
|
|||||||
**/
|
**/
|
||||||
void video_shader_resolve_parameters(struct video_shader *shader);
|
void video_shader_resolve_parameters(struct video_shader *shader);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* video_shader_load_current_parameter_values:
|
* video_shader_load_current_parameter_values:
|
||||||
* @conf : Preset file to read from.
|
* @conf : Preset file to read from.
|
||||||
@ -238,7 +248,6 @@ void video_shader_resolve_parameters(struct video_shader *shader);
|
|||||||
**/
|
**/
|
||||||
bool video_shader_load_current_parameter_values(config_file_t *conf, struct video_shader *shader);
|
bool video_shader_load_current_parameter_values(config_file_t *conf, struct video_shader *shader);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* video_shader_load_preset_into_shader:
|
* video_shader_load_preset_into_shader:
|
||||||
* @path : Path to preset file, could be a Simple Preset (including a #reference) or Full Preset
|
* @path : Path to preset file, could be a Simple Preset (including a #reference) or Full Preset
|
||||||
@ -250,7 +259,6 @@ bool video_shader_load_current_parameter_values(config_file_t *conf, struct vide
|
|||||||
**/
|
**/
|
||||||
bool video_shader_load_preset_into_shader(const char *path, struct video_shader *shader);
|
bool video_shader_load_preset_into_shader(const char *path, struct video_shader *shader);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* video_shader_write_preset:
|
* video_shader_write_preset:
|
||||||
* @path : File to write to
|
* @path : File to write to
|
||||||
@ -260,23 +268,11 @@ bool video_shader_load_preset_into_shader(const char *path, struct video_shader
|
|||||||
* Writes a preset to disk. Can be written as a simple preset (With the #reference directive in it) or a full preset.
|
* Writes a preset to disk. Can be written as a simple preset (With the #reference directive in it) or a full preset.
|
||||||
**/
|
**/
|
||||||
bool video_shader_write_preset(const char *path,
|
bool video_shader_write_preset(const char *path,
|
||||||
const struct video_shader *shader,
|
const struct video_shader *shader,
|
||||||
bool reference);
|
bool reference);
|
||||||
|
|
||||||
|
|
||||||
enum rarch_shader_type video_shader_get_type_from_ext(const char *ext, bool *is_preset);
|
enum rarch_shader_type video_shader_get_type_from_ext(const char *ext, bool *is_preset);
|
||||||
|
|
||||||
/**
|
|
||||||
* video_shader_parse_type:
|
|
||||||
* @path : Shader path.
|
|
||||||
*
|
|
||||||
* Parses type of shader.
|
|
||||||
*
|
|
||||||
* Returns: value of shader type if it could be determined,
|
|
||||||
* otherwise RARCH_SHADER_NONE.
|
|
||||||
**/
|
|
||||||
#define video_shader_parse_type(path) video_shader_get_type_from_ext(path_get_extension((path)), NULL)
|
|
||||||
|
|
||||||
bool video_shader_is_supported(enum rarch_shader_type type);
|
bool video_shader_is_supported(enum rarch_shader_type type);
|
||||||
|
|
||||||
bool video_shader_any_supported(void);
|
bool video_shader_any_supported(void);
|
||||||
|
@ -50,7 +50,6 @@
|
|||||||
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_SLANG) || defined(HAVE_HLSL)
|
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_SLANG) || defined(HAVE_HLSL)
|
||||||
#include "../menu_shader.h"
|
#include "../menu_shader.h"
|
||||||
#endif
|
#endif
|
||||||
#include "../menu_input_bind_dialog.h"
|
|
||||||
#include "../menu_input.h"
|
#include "../menu_input.h"
|
||||||
|
|
||||||
#include "../../core.h"
|
#include "../../core.h"
|
||||||
|
@ -485,6 +485,13 @@ enum menu_dialog_type
|
|||||||
MENU_DIALOG_LAST
|
MENU_DIALOG_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum menu_input_binds_ctl_state
|
||||||
|
{
|
||||||
|
MENU_INPUT_BINDS_CTL_BIND_NONE = 0,
|
||||||
|
MENU_INPUT_BINDS_CTL_BIND_SINGLE,
|
||||||
|
MENU_INPUT_BINDS_CTL_BIND_ALL
|
||||||
|
};
|
||||||
|
|
||||||
struct menu_dialog
|
struct menu_dialog
|
||||||
{
|
{
|
||||||
unsigned current_id;
|
unsigned current_id;
|
||||||
|
@ -27,6 +27,10 @@
|
|||||||
#include "../msg_hash.h"
|
#include "../msg_hash.h"
|
||||||
#include "../setting_list.h"
|
#include "../setting_list.h"
|
||||||
|
|
||||||
|
#define MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(list, label, parse_type, add_empty_entry) menu_displaylist_parse_settings_enum(list, parse_type, add_empty_entry, menu_setting_find_enum(label), label, true)
|
||||||
|
|
||||||
|
#define MENU_DISPLAYLIST_PARSE_SETTINGS(list, label, parse_type, add_empty_entry, entry_type) menu_displaylist_parse_settings_enum(list, parse_type, add_empty_entry, menu_setting_find(label), entry_type, false)
|
||||||
|
|
||||||
RETRO_BEGIN_DECLS
|
RETRO_BEGIN_DECLS
|
||||||
|
|
||||||
/* NOTE: Order matters - only add new entries at
|
/* NOTE: Order matters - only add new entries at
|
||||||
@ -332,10 +336,6 @@ typedef struct menu_displaylist_info
|
|||||||
enum msg_hash_enums enum_idx;
|
enum msg_hash_enums enum_idx;
|
||||||
} menu_displaylist_info_t;
|
} menu_displaylist_info_t;
|
||||||
|
|
||||||
#define MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(list, label, parse_type, add_empty_entry) menu_displaylist_parse_settings_enum(list, parse_type, add_empty_entry, menu_setting_find_enum(label), label, true)
|
|
||||||
|
|
||||||
#define MENU_DISPLAYLIST_PARSE_SETTINGS(list, label, parse_type, add_empty_entry, entry_type) menu_displaylist_parse_settings_enum(list, parse_type, add_empty_entry, menu_setting_find(label), entry_type, false)
|
|
||||||
|
|
||||||
bool menu_displaylist_process(menu_displaylist_info_t *info);
|
bool menu_displaylist_process(menu_displaylist_info_t *info);
|
||||||
|
|
||||||
void menu_displaylist_info_free(menu_displaylist_info_t *info);
|
void menu_displaylist_info_free(menu_displaylist_info_t *info);
|
||||||
|
@ -83,6 +83,12 @@
|
|||||||
#include "../steam/steam.h"
|
#include "../steam/steam.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
typedef struct menu_input_ctx_bind
|
||||||
|
{
|
||||||
|
char *s;
|
||||||
|
size_t len;
|
||||||
|
} menu_input_ctx_bind_t;
|
||||||
|
|
||||||
#ifdef HAVE_LIBNX
|
#ifdef HAVE_LIBNX
|
||||||
#define LIBNX_SWKBD_LIMIT 500 /* enforced by HOS */
|
#define LIBNX_SWKBD_LIMIT 500 /* enforced by HOS */
|
||||||
|
|
||||||
|
@ -36,7 +36,6 @@
|
|||||||
#include "menu_defines.h"
|
#include "menu_defines.h"
|
||||||
#include "menu_input.h"
|
#include "menu_input.h"
|
||||||
#include "../input/input_osk.h"
|
#include "../input/input_osk.h"
|
||||||
#include "menu_input_bind_dialog.h"
|
|
||||||
#include "menu_entries.h"
|
#include "menu_entries.h"
|
||||||
#include "menu_shader.h"
|
#include "menu_shader.h"
|
||||||
#include "../gfx/gfx_animation.h"
|
#include "../gfx/gfx_animation.h"
|
||||||
@ -794,6 +793,9 @@ size_t menu_update_fullscreen_thumbnail_label(
|
|||||||
bool menu_is_running_quick_menu(void);
|
bool menu_is_running_quick_menu(void);
|
||||||
bool menu_is_nonrunning_quick_menu(void);
|
bool menu_is_nonrunning_quick_menu(void);
|
||||||
|
|
||||||
|
bool menu_input_key_bind_set_mode(
|
||||||
|
enum menu_input_binds_ctl_state state, void *data);
|
||||||
|
|
||||||
extern const menu_ctx_driver_t *menu_ctx_drivers[];
|
extern const menu_ctx_driver_t *menu_ctx_drivers[];
|
||||||
|
|
||||||
RETRO_END_DECLS
|
RETRO_END_DECLS
|
||||||
|
@ -35,6 +35,20 @@ RETRO_BEGIN_DECLS
|
|||||||
#define MENU_SEARCH_FILTER_MAX_TERMS 8
|
#define MENU_SEARCH_FILTER_MAX_TERMS 8
|
||||||
#define MENU_SEARCH_FILTER_MAX_LENGTH 64
|
#define MENU_SEARCH_FILTER_MAX_LENGTH 64
|
||||||
|
|
||||||
|
#define MENU_ENTRY_INITIALIZE(entry) \
|
||||||
|
entry.path[0] = '\0'; \
|
||||||
|
entry.label[0] = '\0'; \
|
||||||
|
entry.sublabel[0] = '\0'; \
|
||||||
|
entry.rich_label[0] = '\0'; \
|
||||||
|
entry.value[0] = '\0'; \
|
||||||
|
entry.password_value[0] = '\0'; \
|
||||||
|
entry.enum_idx = MSG_UNKNOWN; \
|
||||||
|
entry.entry_idx = 0; \
|
||||||
|
entry.idx = 0; \
|
||||||
|
entry.type = 0; \
|
||||||
|
entry.spacing = 0; \
|
||||||
|
entry.flags = 0
|
||||||
|
|
||||||
enum menu_list_type
|
enum menu_list_type
|
||||||
{
|
{
|
||||||
MENU_LIST_PLAIN = 0,
|
MENU_LIST_PLAIN = 0,
|
||||||
@ -58,6 +72,16 @@ enum menu_entry_type
|
|||||||
MENU_ENTRY_SIZE
|
MENU_ENTRY_SIZE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum menu_entry_flags
|
||||||
|
{
|
||||||
|
MENU_ENTRY_FLAG_PATH_ENABLED = (1 << 0),
|
||||||
|
MENU_ENTRY_FLAG_LABEL_ENABLED = (1 << 1),
|
||||||
|
MENU_ENTRY_FLAG_RICH_LABEL_ENABLED = (1 << 2),
|
||||||
|
MENU_ENTRY_FLAG_VALUE_ENABLED = (1 << 3),
|
||||||
|
MENU_ENTRY_FLAG_SUBLABEL_ENABLED = (1 << 4),
|
||||||
|
MENU_ENTRY_FLAG_CHECKED = (1 << 5)
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
typedef struct menu_ctx_list
|
typedef struct menu_ctx_list
|
||||||
{
|
{
|
||||||
@ -79,6 +103,23 @@ typedef struct menu_search_terms
|
|||||||
char terms[MENU_SEARCH_FILTER_MAX_TERMS][MENU_SEARCH_FILTER_MAX_LENGTH];
|
char terms[MENU_SEARCH_FILTER_MAX_TERMS][MENU_SEARCH_FILTER_MAX_LENGTH];
|
||||||
} menu_search_terms_t;
|
} menu_search_terms_t;
|
||||||
|
|
||||||
|
typedef struct menu_entry
|
||||||
|
{
|
||||||
|
size_t entry_idx;
|
||||||
|
unsigned idx;
|
||||||
|
unsigned type;
|
||||||
|
unsigned spacing;
|
||||||
|
enum msg_hash_enums enum_idx;
|
||||||
|
uint8_t setting_type;
|
||||||
|
uint8_t flags;
|
||||||
|
char sublabel[MENU_SUBLABEL_MAX_LENGTH];
|
||||||
|
char path[255];
|
||||||
|
char label[255];
|
||||||
|
char rich_label[255];
|
||||||
|
char value[255];
|
||||||
|
char password_value[255];
|
||||||
|
} menu_entry_t;
|
||||||
|
|
||||||
typedef struct menu_file_list_cbs
|
typedef struct menu_file_list_cbs
|
||||||
{
|
{
|
||||||
rarch_setting_t *setting;
|
rarch_setting_t *setting;
|
||||||
@ -119,33 +160,6 @@ typedef struct menu_file_list_cbs
|
|||||||
bool checked;
|
bool checked;
|
||||||
} menu_file_list_cbs_t;
|
} menu_file_list_cbs_t;
|
||||||
|
|
||||||
enum menu_entry_flags
|
|
||||||
{
|
|
||||||
MENU_ENTRY_FLAG_PATH_ENABLED = (1 << 0),
|
|
||||||
MENU_ENTRY_FLAG_LABEL_ENABLED = (1 << 1),
|
|
||||||
MENU_ENTRY_FLAG_RICH_LABEL_ENABLED = (1 << 2),
|
|
||||||
MENU_ENTRY_FLAG_VALUE_ENABLED = (1 << 3),
|
|
||||||
MENU_ENTRY_FLAG_SUBLABEL_ENABLED = (1 << 4),
|
|
||||||
MENU_ENTRY_FLAG_CHECKED = (1 << 5)
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct menu_entry
|
|
||||||
{
|
|
||||||
size_t entry_idx;
|
|
||||||
unsigned idx;
|
|
||||||
unsigned type;
|
|
||||||
unsigned spacing;
|
|
||||||
enum msg_hash_enums enum_idx;
|
|
||||||
uint8_t setting_type;
|
|
||||||
uint8_t flags;
|
|
||||||
char sublabel[MENU_SUBLABEL_MAX_LENGTH];
|
|
||||||
char path[255];
|
|
||||||
char label[255];
|
|
||||||
char rich_label[255];
|
|
||||||
char value[255];
|
|
||||||
char password_value[255];
|
|
||||||
} menu_entry_t;
|
|
||||||
|
|
||||||
int menu_entries_get_title(char *title, size_t title_len);
|
int menu_entries_get_title(char *title, size_t title_len);
|
||||||
|
|
||||||
void menu_entries_get_core_title(char *title_msg, size_t title_msg_len);
|
void menu_entries_get_core_title(char *title_msg, size_t title_msg_len);
|
||||||
@ -196,27 +210,12 @@ bool menu_entries_list_search(const char *needle, size_t *idx);
|
|||||||
* Its only interaction back to the UI is to arrange for
|
* Its only interaction back to the UI is to arrange for
|
||||||
* notify_list_loaded on the UI companion.
|
* notify_list_loaded on the UI companion.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void menu_entry_get(menu_entry_t *entry, size_t stack_idx,
|
void menu_entry_get(menu_entry_t *entry, size_t stack_idx,
|
||||||
size_t i, void *userdata, bool use_representation);
|
size_t i, void *userdata, bool use_representation);
|
||||||
|
|
||||||
int menu_entry_action(
|
int menu_entry_action(
|
||||||
menu_entry_t *entry, size_t i, enum menu_action action);
|
menu_entry_t *entry, size_t i, enum menu_action action);
|
||||||
|
|
||||||
#define MENU_ENTRY_INITIALIZE(entry) \
|
|
||||||
entry.path[0] = '\0'; \
|
|
||||||
entry.label[0] = '\0'; \
|
|
||||||
entry.sublabel[0] = '\0'; \
|
|
||||||
entry.rich_label[0] = '\0'; \
|
|
||||||
entry.value[0] = '\0'; \
|
|
||||||
entry.password_value[0] = '\0'; \
|
|
||||||
entry.enum_idx = MSG_UNKNOWN; \
|
|
||||||
entry.entry_idx = 0; \
|
|
||||||
entry.idx = 0; \
|
|
||||||
entry.type = 0; \
|
|
||||||
entry.spacing = 0; \
|
|
||||||
entry.flags = 0
|
|
||||||
|
|
||||||
RETRO_END_DECLS
|
RETRO_END_DECLS
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -231,17 +231,6 @@ typedef struct key_desc
|
|||||||
char desc[32];
|
char desc[32];
|
||||||
} key_desc_t;
|
} key_desc_t;
|
||||||
|
|
||||||
/* TODO/FIXME - public global variables */
|
|
||||||
extern struct key_desc key_descriptors[RARCH_MAX_KEYS];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Copy parameters from the global menu_input_state to a menu_input_pointer_t
|
|
||||||
* in order to provide access to all pointer device parameters.
|
|
||||||
*
|
|
||||||
* @param copy_target menu_input_pointer_t struct where values will be copied
|
|
||||||
**/
|
|
||||||
void menu_input_get_pointer_state(menu_input_pointer_t *copy_target);
|
|
||||||
|
|
||||||
typedef struct menu_input_ctx_line
|
typedef struct menu_input_ctx_line
|
||||||
{
|
{
|
||||||
const char *label;
|
const char *label;
|
||||||
@ -251,6 +240,14 @@ typedef struct menu_input_ctx_line
|
|||||||
input_keyboard_line_complete_t cb;
|
input_keyboard_line_complete_t cb;
|
||||||
} menu_input_ctx_line_t;
|
} menu_input_ctx_line_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copy parameters from the global menu_input_state to a menu_input_pointer_t
|
||||||
|
* in order to provide access to all pointer device parameters.
|
||||||
|
*
|
||||||
|
* @param copy_target menu_input_pointer_t struct where values will be copied
|
||||||
|
**/
|
||||||
|
void menu_input_get_pointer_state(menu_input_pointer_t *copy_target);
|
||||||
|
|
||||||
bool menu_input_dialog_start(menu_input_ctx_line_t *line);
|
bool menu_input_dialog_start(menu_input_ctx_line_t *line);
|
||||||
|
|
||||||
const char *menu_input_dialog_get_buffer(void);
|
const char *menu_input_dialog_get_buffer(void);
|
||||||
@ -261,6 +258,9 @@ bool menu_input_dialog_get_display_kb(void);
|
|||||||
|
|
||||||
void menu_input_dialog_end(void);
|
void menu_input_dialog_end(void);
|
||||||
|
|
||||||
|
/* TODO/FIXME - public global variables */
|
||||||
|
extern struct key_desc key_descriptors[RARCH_MAX_KEYS];
|
||||||
|
|
||||||
RETRO_END_DECLS
|
RETRO_END_DECLS
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,47 +0,0 @@
|
|||||||
/* RetroArch - A frontend for libretro.
|
|
||||||
* Copyright (C) 2010-2014 - Hans-Kristian Arntzen
|
|
||||||
* Copyright (C) 2011-2017 - Daniel De Matteis
|
|
||||||
*
|
|
||||||
* RetroArch is free software: you can redistribute it and/or modify it under the terms
|
|
||||||
* of the GNU General Public License as published by the Free Software Found-
|
|
||||||
* ation, either version 3 of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
||||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE. See the GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along with RetroArch.
|
|
||||||
* If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _MENU_INPUT_BIND_DIALOG_H
|
|
||||||
#define _MENU_INPUT_BIND_DIALOG_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#include <boolean.h>
|
|
||||||
|
|
||||||
#include <retro_common_api.h>
|
|
||||||
|
|
||||||
RETRO_BEGIN_DECLS
|
|
||||||
|
|
||||||
enum menu_input_binds_ctl_state
|
|
||||||
{
|
|
||||||
MENU_INPUT_BINDS_CTL_BIND_NONE = 0,
|
|
||||||
MENU_INPUT_BINDS_CTL_BIND_SINGLE,
|
|
||||||
MENU_INPUT_BINDS_CTL_BIND_ALL
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct menu_input_ctx_bind
|
|
||||||
{
|
|
||||||
char *s;
|
|
||||||
size_t len;
|
|
||||||
} menu_input_ctx_bind_t;
|
|
||||||
|
|
||||||
bool menu_input_key_bind_set_mode(
|
|
||||||
enum menu_input_binds_ctl_state state, void *data);
|
|
||||||
|
|
||||||
RETRO_END_DECLS
|
|
||||||
|
|
||||||
#endif
|
|
@ -36,7 +36,6 @@
|
|||||||
#include "../config.h"
|
#include "../config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "menu_input_bind_dialog.h"
|
|
||||||
#include "menu_setting.h"
|
#include "menu_setting.h"
|
||||||
#include "menu_cbs.h"
|
#include "menu_cbs.h"
|
||||||
#include "menu_driver.h"
|
#include "menu_driver.h"
|
||||||
|
@ -237,29 +237,15 @@
|
|||||||
05A8C53C20DB72F000FF7857 /* rgui.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = rgui.c; sourceTree = "<group>"; };
|
05A8C53C20DB72F000FF7857 /* rgui.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = rgui.c; sourceTree = "<group>"; };
|
||||||
05A8C53E20DB72F000FF7857 /* null.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = null.c; sourceTree = "<group>"; };
|
05A8C53E20DB72F000FF7857 /* null.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = null.c; sourceTree = "<group>"; };
|
||||||
05A8C54020DB72F000FF7857 /* materialui.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = materialui.c; sourceTree = "<group>"; };
|
05A8C54020DB72F000FF7857 /* materialui.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = materialui.c; sourceTree = "<group>"; };
|
||||||
05A8C54120DB72F000FF7857 /* menu_cbs.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = menu_cbs.c; sourceTree = "<group>"; };
|
|
||||||
05A8C54320DB72F000FF7857 /* menu_driver.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = menu_driver.h; sourceTree = "<group>"; };
|
05A8C54320DB72F000FF7857 /* menu_driver.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = menu_driver.h; sourceTree = "<group>"; };
|
||||||
05A8C54520DB72F000FF7857 /* menu_entries.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = menu_entries.c; sourceTree = "<group>"; };
|
|
||||||
05A8C54620DB72F000FF7857 /* menu_setting.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = menu_setting.c; sourceTree = "<group>"; };
|
05A8C54620DB72F000FF7857 /* menu_setting.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = menu_setting.c; sourceTree = "<group>"; };
|
||||||
05A8C54720DB72F000FF7857 /* menu_input.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = menu_input.c; sourceTree = "<group>"; };
|
|
||||||
05A8C54920DB72F000FF7857 /* menu_displaylist.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = menu_displaylist.c; sourceTree = "<group>"; };
|
05A8C54920DB72F000FF7857 /* menu_displaylist.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = menu_displaylist.c; sourceTree = "<group>"; };
|
||||||
05A8C54A20DB72F000FF7857 /* menu_shader.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = menu_shader.c; sourceTree = "<group>"; };
|
|
||||||
05A8C54B20DB72F000FF7857 /* gfx_animation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = gfx_animation.h; sourceTree = "<group>"; };
|
05A8C54B20DB72F000FF7857 /* gfx_animation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = gfx_animation.h; sourceTree = "<group>"; };
|
||||||
05A8C54C20DB72F000FF7857 /* menu_cbs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = menu_cbs.h; sourceTree = "<group>"; };
|
05A8C54C20DB72F000FF7857 /* menu_cbs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = menu_cbs.h; sourceTree = "<group>"; };
|
||||||
05A8C54D20DB72F000FF7857 /* menu_driver.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = menu_driver.c; sourceTree = "<group>"; };
|
05A8C54D20DB72F000FF7857 /* menu_driver.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = menu_driver.c; sourceTree = "<group>"; };
|
||||||
05A8C55020DB72F000FF7857 /* menu_input.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = menu_input.h; sourceTree = "<group>"; };
|
05A8C55020DB72F000FF7857 /* menu_input.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = menu_input.h; sourceTree = "<group>"; };
|
||||||
05A8C55120DB72F000FF7857 /* menu_setting.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = menu_setting.h; sourceTree = "<group>"; };
|
05A8C55120DB72F000FF7857 /* menu_setting.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = menu_setting.h; sourceTree = "<group>"; };
|
||||||
05A8C55320DB72F000FF7857 /* menu_input_bind_dialog.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = menu_input_bind_dialog.h; sourceTree = "<group>"; };
|
|
||||||
05A8C55520DB72F000FF7857 /* menu_entry.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = menu_entry.c; sourceTree = "<group>"; };
|
|
||||||
05A8C55620DB72F000FF7857 /* menu_dialog.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = menu_dialog.h; sourceTree = "<group>"; };
|
|
||||||
05A8C55720DB72F000FF7857 /* menu_input_dialog.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = menu_input_dialog.h; sourceTree = "<group>"; };
|
|
||||||
05A8C55820DB72F000FF7857 /* menu_osk.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = menu_osk.c; sourceTree = "<group>"; };
|
|
||||||
05A8C55920DB72F000FF7857 /* menu_entry.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = menu_entry.h; sourceTree = "<group>"; };
|
|
||||||
05A8C55B20DB72F000FF7857 /* menu_input_dialog.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = menu_input_dialog.c; sourceTree = "<group>"; };
|
|
||||||
05A8C55C20DB72F000FF7857 /* menu_dialog.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = menu_dialog.c; sourceTree = "<group>"; };
|
|
||||||
05A8C55D20DB72F000FF7857 /* menu_input_bind_dialog.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = menu_input_bind_dialog.c; sourceTree = "<group>"; };
|
|
||||||
05A8C55E20DB72F000FF7857 /* menu_osk_utf8_pages.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = menu_osk_utf8_pages.h; sourceTree = "<group>"; };
|
05A8C55E20DB72F000FF7857 /* menu_osk_utf8_pages.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = menu_osk_utf8_pages.h; sourceTree = "<group>"; };
|
||||||
05A8C55F20DB72F000FF7857 /* menu_osk.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = menu_osk.h; sourceTree = "<group>"; };
|
|
||||||
05A8C56120DB72F000FF7857 /* gfx_display_vulkan.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = gfx_display_vulkan.c; sourceTree = "<group>"; };
|
05A8C56120DB72F000FF7857 /* gfx_display_vulkan.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = gfx_display_vulkan.c; sourceTree = "<group>"; };
|
||||||
05A8C56320DB72F000FF7857 /* gfx_display_gl.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = gfx_display_gl.c; sourceTree = "<group>"; };
|
05A8C56320DB72F000FF7857 /* gfx_display_gl.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = gfx_display_gl.c; sourceTree = "<group>"; };
|
||||||
05A8C56420DB72F000FF7857 /* gfx_display_d3d10.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = gfx_display_d3d10.c; sourceTree = "<group>"; };
|
05A8C56420DB72F000FF7857 /* gfx_display_d3d10.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = gfx_display_d3d10.c; sourceTree = "<group>"; };
|
||||||
@ -794,19 +780,15 @@
|
|||||||
05A8C56020DB72F000FF7857 /* drivers_display */,
|
05A8C56020DB72F000FF7857 /* drivers_display */,
|
||||||
05A8C52E20DB72F000FF7857 /* gfx_animation.c */,
|
05A8C52E20DB72F000FF7857 /* gfx_animation.c */,
|
||||||
05A8C54B20DB72F000FF7857 /* gfx_animation.h */,
|
05A8C54B20DB72F000FF7857 /* gfx_animation.h */,
|
||||||
05A8C54120DB72F000FF7857 /* menu_cbs.c */,
|
|
||||||
05A8C54C20DB72F000FF7857 /* menu_cbs.h */,
|
05A8C54C20DB72F000FF7857 /* menu_cbs.h */,
|
||||||
05A8C54920DB72F000FF7857 /* menu_displaylist.c */,
|
05A8C54920DB72F000FF7857 /* menu_displaylist.c */,
|
||||||
05A8C52F20DB72F000FF7857 /* menu_displaylist.h */,
|
05A8C52F20DB72F000FF7857 /* menu_displaylist.h */,
|
||||||
05A8C54D20DB72F000FF7857 /* menu_driver.c */,
|
05A8C54D20DB72F000FF7857 /* menu_driver.c */,
|
||||||
05A8C54320DB72F000FF7857 /* menu_driver.h */,
|
05A8C54320DB72F000FF7857 /* menu_driver.h */,
|
||||||
05A8C54520DB72F000FF7857 /* menu_entries.c */,
|
|
||||||
05A8C57020DB72F000FF7857 /* menu_entries.h */,
|
05A8C57020DB72F000FF7857 /* menu_entries.h */,
|
||||||
05A8C54720DB72F000FF7857 /* menu_input.c */,
|
|
||||||
05A8C55020DB72F000FF7857 /* menu_input.h */,
|
05A8C55020DB72F000FF7857 /* menu_input.h */,
|
||||||
05A8C54620DB72F000FF7857 /* menu_setting.c */,
|
05A8C54620DB72F000FF7857 /* menu_setting.c */,
|
||||||
05A8C55120DB72F000FF7857 /* menu_setting.h */,
|
05A8C55120DB72F000FF7857 /* menu_setting.h */,
|
||||||
05A8C54A20DB72F000FF7857 /* menu_shader.c */,
|
|
||||||
05A8C51B20DB72F000FF7857 /* menu_shader.h */,
|
05A8C51B20DB72F000FF7857 /* menu_shader.h */,
|
||||||
05A8C55220DB72F000FF7857 /* widgets */,
|
05A8C55220DB72F000FF7857 /* widgets */,
|
||||||
);
|
);
|
||||||
@ -855,15 +837,6 @@
|
|||||||
05A8C55220DB72F000FF7857 /* widgets */ = {
|
05A8C55220DB72F000FF7857 /* widgets */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
05A8C55320DB72F000FF7857 /* menu_input_bind_dialog.h */,
|
|
||||||
05A8C55520DB72F000FF7857 /* menu_entry.c */,
|
|
||||||
05A8C55620DB72F000FF7857 /* menu_dialog.h */,
|
|
||||||
05A8C55720DB72F000FF7857 /* menu_input_dialog.h */,
|
|
||||||
05A8C55820DB72F000FF7857 /* menu_osk.c */,
|
|
||||||
05A8C55920DB72F000FF7857 /* menu_entry.h */,
|
|
||||||
05A8C55B20DB72F000FF7857 /* menu_input_dialog.c */,
|
|
||||||
05A8C55C20DB72F000FF7857 /* menu_dialog.c */,
|
|
||||||
05A8C55D20DB72F000FF7857 /* menu_input_bind_dialog.c */,
|
|
||||||
05A8C55E20DB72F000FF7857 /* menu_osk_utf8_pages.h */,
|
05A8C55E20DB72F000FF7857 /* menu_osk_utf8_pages.h */,
|
||||||
05A8C55F20DB72F000FF7857 /* menu_osk.h */,
|
05A8C55F20DB72F000FF7857 /* menu_osk.h */,
|
||||||
);
|
);
|
||||||
|
@ -149,7 +149,6 @@
|
|||||||
#include "menu/menu_cbs.h"
|
#include "menu/menu_cbs.h"
|
||||||
#include "menu/menu_driver.h"
|
#include "menu/menu_driver.h"
|
||||||
#include "menu/menu_input.h"
|
#include "menu/menu_input.h"
|
||||||
#include "menu/menu_input_bind_dialog.h"
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_SLANG) || defined(HAVE_HLSL)
|
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_SLANG) || defined(HAVE_HLSL)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user