SameBoy/SDL/gui.h

163 lines
3.6 KiB
C
Raw Normal View History

2017-10-04 09:43:31 +00:00
#ifndef gui_h
#define gui_h
#include <SDL.h>
#include <Core/gb.h>
2018-05-27 16:30:23 +00:00
#include <stdbool.h>
2017-12-23 15:29:42 +00:00
#include "shader.h"
2017-10-04 09:43:31 +00:00
#define JOYSTICK_HIGH 0x4000
#define JOYSTICK_LOW 0x3800
#ifdef __APPLE__
#define MODIFIER KMOD_GUI
#else
#define MODIFIER KMOD_CTRL
#endif
extern GB_gameboy_t gb;
2018-05-27 16:30:23 +00:00
2017-10-04 09:43:31 +00:00
extern SDL_Window *window;
extern SDL_Renderer *renderer;
extern SDL_Texture *texture;
extern SDL_PixelFormat *pixel_format;
extern SDL_Haptic *haptic;
2017-12-23 15:29:42 +00:00
extern shader_t shader;
2017-10-04 09:43:31 +00:00
enum scaling_mode {
GB_SDL_SCALING_ENTIRE_WINDOW,
GB_SDL_SCALING_KEEP_RATIO,
GB_SDL_SCALING_INTEGER_FACTOR,
GB_SDL_SCALING_MAX,
};
2017-10-13 22:41:51 +00:00
enum pending_command {
GB_SDL_NO_COMMAND,
GB_SDL_SAVE_STATE_COMMAND,
GB_SDL_LOAD_STATE_COMMAND,
GB_SDL_RESET_COMMAND,
GB_SDL_NEW_FILE_COMMAND,
GB_SDL_QUIT_COMMAND,
2021-04-14 12:20:01 +00:00
GB_SDL_LOAD_STATE_FROM_FILE_COMMAND,
2017-10-13 22:41:51 +00:00
};
#define GB_SDL_DEFAULT_SCALE_MAX 8
2017-10-13 22:41:51 +00:00
extern enum pending_command pending_command;
extern unsigned command_parameter;
2021-04-14 12:20:01 +00:00
extern char *dropped_state_file;
typedef enum {
JOYPAD_BUTTON_RIGHT,
JOYPAD_BUTTON_LEFT,
JOYPAD_BUTTON_UP,
JOYPAD_BUTTON_DOWN,
JOYPAD_BUTTON_A,
JOYPAD_BUTTON_B,
JOYPAD_BUTTON_SELECT,
JOYPAD_BUTTON_START,
JOYPAD_BUTTON_MENU,
JOYPAD_BUTTON_TURBO,
JOYPAD_BUTTON_REWIND,
JOYPAD_BUTTON_SLOW_MOTION,
JOYPAD_BUTTONS_MAX
} joypad_button_t;
typedef enum {
JOYPAD_AXISES_X,
JOYPAD_AXISES_Y,
JOYPAD_AXISES_MAX
} joypad_axis_t;
2017-12-22 20:25:53 +00:00
typedef struct {
SDL_Scancode keys[9];
GB_color_correction_mode_t color_correction_mode;
enum scaling_mode scaling_mode;
2020-03-26 18:54:18 +00:00
uint8_t blending_mode;
2017-12-22 22:39:04 +00:00
2017-12-23 19:11:44 +00:00
GB_highpass_mode_t highpass_mode;
bool _deprecated_div_joystick;
bool _deprecated_flip_joystick_bit_1;
bool _deprecated_swap_joysticks_bits_1_and_2;
2017-12-23 15:29:42 +00:00
char filter[32];
enum {
MODEL_DMG,
MODEL_CGB,
MODEL_AGB,
2019-05-18 15:45:31 +00:00
MODEL_SGB,
2021-10-23 20:28:54 +00:00
MODEL_MGB,
MODEL_MAX,
} model;
/* v0.11 */
uint32_t rewind_length;
SDL_Scancode keys_2[32]; /* Rewind and underclock, + padding for the future */
uint8_t joypad_configuration[32]; /* 12 Keys + padding for the future*/;
uint8_t joypad_axises[JOYPAD_AXISES_MAX];
2019-05-18 17:37:41 +00:00
/* v0.12 */
enum {
SGB_NTSC,
SGB_PAL,
SGB_2,
SGB_MAX
} sgb_revision;
/* v0.13 */
uint8_t dmg_palette;
GB_border_mode_t border_mode;
2020-03-27 16:10:42 +00:00
uint8_t volume;
GB_rumble_mode_t rumble_mode;
uint8_t default_scale;
2020-12-25 12:14:17 +00:00
/* v0.14 */
unsigned padding;
uint8_t color_temperature;
char bootrom_path[4096];
2020-12-30 22:06:36 +00:00
uint8_t interference_volume;
GB_rtc_mode_t rtc_mode;
2021-05-30 20:39:59 +00:00
/* v0.14.4 */
bool osd;
struct __attribute__((packed, aligned(4))) {
2022-06-10 20:51:06 +00:00
/* v0.15 */
bool allow_mouse_controls;
uint8_t cgb_revision;
};
2017-12-22 20:25:53 +00:00
} configuration_t;
extern configuration_t configuration;
2017-10-13 22:41:51 +00:00
2017-10-04 09:43:31 +00:00
void update_viewport(void);
2017-10-13 22:41:51 +00:00
void run_gui(bool is_running);
2017-12-23 15:29:42 +00:00
void render_texture(void *pixels, void *previous);
void connect_joypad(void);
2017-12-22 22:39:04 +00:00
joypad_button_t get_joypad_button(uint8_t physical_button);
joypad_axis_t get_joypad_axis(uint8_t physical_axis);
static SDL_Scancode event_hotkey_code(SDL_Event *event)
{
if (event->key.keysym.sym >= SDLK_a && event->key.keysym.sym < SDLK_z) {
return SDL_SCANCODE_A + event->key.keysym.sym - SDLK_a;
}
return event->key.keysym.scancode;
}
2021-05-30 20:39:59 +00:00
void draw_text(uint32_t *buffer, unsigned width, unsigned height, unsigned x, signed y, const char *string, uint32_t color, uint32_t border, bool is_osd);
void show_osd_text(const char *text);
extern const char *osd_text;
extern unsigned osd_countdown;
extern unsigned osd_text_lines;
2022-06-10 20:51:06 +00:00
void convert_mouse_coordinates(signed *x, signed *y);
2021-05-30 20:39:59 +00:00
2017-10-04 09:43:31 +00:00
#endif