diff options
Diffstat (limited to 'src/osd/modules/lib/osdobj_common.h')
-rw-r--r-- | src/osd/modules/lib/osdobj_common.h | 149 |
1 files changed, 89 insertions, 60 deletions
diff --git a/src/osd/modules/lib/osdobj_common.h b/src/osd/modules/lib/osdobj_common.h index 37e043f53ad..ff0d0b9a6dd 100644 --- a/src/osd/modules/lib/osdobj_common.h +++ b/src/osd/modules/lib/osdobj_common.h @@ -2,41 +2,48 @@ // copyright-holders:Aaron Giles /*************************************************************************** - osdepend.h + osdobj_common.h OS-dependent code interface. *******************************************************************c********/ - -#pragma once - #ifndef MAME_OSD_LIB_OSDOBJ_COMMON_H #define MAME_OSD_LIB_OSDOBJ_COMMON_H +#pragma once + +#include "osdcore.h" #include "osdepend.h" -#include "watchdog.h" + #include "modules/osdmodule.h" -#include "modules/font/font_module.h" -#include "modules/input/input_module.h" -#include "modules/sound/sound_module.h" -#include "modules/debugger/debug_module.h" -#include "modules/netdev/netdev_module.h" -#include "modules/midi/midi_module.h" #include "modules/output/output_module.h" -#include "modules/monitor/monitor_module.h" + #include "emuopts.h" -#include "../frontend/mame/ui/menuitem.h" + +#include "strformat.h" + +#include <iosfwd> +#include <list> +#include <memory> +#include <string> +#include <string_view> +#include <unordered_map> +#include <vector> + //============================================================ // Defines //============================================================ #define OSDOPTION_UIMODEKEY "uimodekey" +#define OSDOPTION_CONTROLLER_MAP_FILE "controller_map" +#define OSDOPTION_BACKGROUND_INPUT "background_input" #define OSDCOMMAND_LIST_MIDI_DEVICES "listmidi" #define OSDCOMMAND_LIST_NETWORK_ADAPTERS "listnetwork" #define OSDOPTION_DEBUGGER "debugger" +#define OSDOPTION_DEBUGGER_HOST "debugger_host" #define OSDOPTION_DEBUGGER_PORT "debugger_port" #define OSDOPTION_DEBUGGER_FONT "debugger_font" #define OSDOPTION_DEBUGGER_FONT_SIZE "debugger_font_size" @@ -81,8 +88,9 @@ #define OSDOPTION_AUDIO_OUTPUT "audio_output" #define OSDOPTION_AUDIO_EFFECT "audio_effect" -#define OSDOPTVAL_AUTO "auto" -#define OSDOPTVAL_NONE "none" +#define OSDOPTION_MIDI_PROVIDER "midiprovider" + +#define OSDOPTION_NETWORK_PROVIDER "networkprovider" #define OSDOPTION_BGFX_PATH "bgfx_path" #define OSDOPTION_BGFX_BACKEND "bgfx_backend" @@ -92,6 +100,9 @@ #define OSDOPTION_BGFX_LUT "bgfx_lut" #define OSDOPTION_BGFX_AVI_NAME "bgfx_avi_name" +#define OSDOPTVAL_AUTO "auto" +#define OSDOPTVAL_NONE "none" + //============================================================ // TYPE DEFINITIONS //============================================================ @@ -104,9 +115,12 @@ public: // keyboard mapping const char *ui_mode_key() const { return value(OSDOPTION_UIMODEKEY); } + const char *controller_mapping_file() const { return value(OSDOPTION_CONTROLLER_MAP_FILE); } + bool background_input() const { return bool_value(OSDOPTION_BACKGROUND_INPUT); } // debugging options const char *debugger() const { return value(OSDOPTION_DEBUGGER); } + const char *debugger_host() const { return value(OSDOPTION_DEBUGGER_HOST); } int debugger_port() const { return int_value(OSDOPTION_DEBUGGER_PORT); } const char *debugger_font() const { return value(OSDOPTION_DEBUGGER_FONT); } float debugger_font_size() const { return float_value(OSDOPTION_DEBUGGER_FONT_SIZE); } @@ -129,10 +143,10 @@ public: const char *aspect() const { return value(OSDOPTION_ASPECT); } const char *resolution() const { return value(OSDOPTION_RESOLUTION); } const char *view() const { return value(OSDOPTION_VIEW); } - const char *screen(int index) const { return value(string_format("%s%d", OSDOPTION_SCREEN, index).c_str()); } - const char *aspect(int index) const { return value(string_format("%s%d", OSDOPTION_ASPECT, index).c_str()); } - const char *resolution(int index) const { return value(string_format("%s%d", OSDOPTION_RESOLUTION, index).c_str()); } - const char *view(int index) const { return value(string_format("%s%d", OSDOPTION_VIEW, index).c_str()); } + const char *screen(int index) const { return value(util::string_format("%s%d", OSDOPTION_SCREEN, index)); } + const char *aspect(int index) const { return value(util::string_format("%s%d", OSDOPTION_ASPECT, index)); } + const char *resolution(int index) const { return value(util::string_format("%s%d", OSDOPTION_RESOLUTION, index)); } + const char *view(int index) const { return value(util::string_format("%s%d", OSDOPTION_VIEW, index)); } // full screen options bool switch_res() const { return bool_value(OSDOPTION_SWITCHRES); } @@ -148,8 +162,8 @@ public: bool gl_pbo() const { return bool_value(OSDOPTION_GL_PBO); } bool gl_glsl() const { return bool_value(OSDOPTION_GL_GLSL); } int glsl_filter() const { return int_value(OSDOPTION_GLSL_FILTER); } - const char *shader_mame(int index) const { return value(string_format("%s%d", OSDOPTION_SHADER_MAME, index).c_str()); } - const char *shader_screen(int index) const { return value(string_format("%s%d", OSDOPTION_SHADER_SCREEN, index).c_str()); } + const char *shader_mame(int index) const { return value(util::string_format("%s%d", OSDOPTION_SHADER_MAME, index)); } + const char *shader_screen(int index) const { return value(util::string_format("%s%d", OSDOPTION_SHADER_SCREEN, index)); } // sound options const char *sound() const { return value(OSDOPTION_SOUND); } @@ -157,7 +171,7 @@ public: // CoreAudio specific options const char *audio_output() const { return value(OSDOPTION_AUDIO_OUTPUT); } - const char *audio_effect(int index) const { return value(string_format("%s%d", OSDOPTION_AUDIO_EFFECT, index).c_str()); } + const char *audio_effect(int index) const { return value(util::string_format("%s%d", OSDOPTION_AUDIO_EFFECT, index)); } // BGFX specific options const char *bgfx_path() const { return value(OSDOPTION_BGFX_PATH); } @@ -171,13 +185,24 @@ public: // PortAudio options const char *pa_api() const { return value(OSDOPTION_PA_API); } const char *pa_device() const { return value(OSDOPTION_PA_DEVICE); } - const float pa_latency() const { return float_value(OSDOPTION_PA_LATENCY); } + float pa_latency() const { return float_value(OSDOPTION_PA_LATENCY); } static const options_entry s_option_entries[]; }; // ======================> osd_interface + +class debug_module; +class font_module; +class input_module; +class midi_module; +class monitor_module; +class netdev_module; +class osd_watchdog; class osd_window; +class output_module; +class render_module; +class sound_module; // description of the currently-running machine class osd_common_t : public osd_interface, osd_output @@ -199,24 +224,40 @@ public: virtual void wait_for_debugger(device_t &device, bool firststop) override; // audio overridables - virtual void update_audio_stream(const int16_t *buffer, int samples_this_frame) override; - virtual void set_mastervolume(int attenuation) override; virtual bool no_sound() override; + virtual bool sound_external_per_channel_volume() override; + virtual bool sound_split_streams_per_source() override; + virtual uint32_t sound_get_generation() override; + virtual osd::audio_info sound_get_information() override; + virtual uint32_t sound_stream_sink_open(uint32_t node, std::string name, uint32_t rate) override; + virtual uint32_t sound_stream_source_open(uint32_t node, std::string name, uint32_t rate) override; + virtual void sound_stream_set_volumes(uint32_t id, const std::vector<float> &db) override; + virtual void sound_stream_close(uint32_t id) override; + virtual void sound_stream_sink_update(uint32_t id, const int16_t *buffer, int samples_this_frame) override; + virtual void sound_stream_source_update(uint32_t id, int16_t *buffer, int samples_this_frame) override; // input overridables - virtual void customize_input_type_list(simple_list<input_type_entry> &typelist) override; + virtual void customize_input_type_list(std::vector<input_type_entry> &typelist) override; // video overridables virtual void add_audio_to_recording(const int16_t *buffer, int samples_this_frame) override; virtual std::vector<ui::menu_item> get_slider_list() override; + // font interface + virtual osd_font::ptr font_alloc() override; + virtual bool get_font_families(std::string const &font_path, std::vector<std::pair<std::string, std::string> > &result) override; + // command option overrides virtual bool execute_command(const char *command) override; - virtual osd_font::ptr font_alloc() override { return m_font_module->font_alloc(); } - virtual bool get_font_families(std::string const &font_path, std::vector<std::pair<std::string, std::string> > &result) override { return m_font_module->get_font_families(font_path, result); } + // MIDI interface + virtual std::unique_ptr<osd::midi_input_port> create_midi_input(std::string_view name) override; + virtual std::unique_ptr<osd::midi_output_port> create_midi_output(std::string_view name) override; + virtual std::vector<osd::midi_port_info> list_midi_ports() override; - virtual osd_midi_device *create_midi_device() override { return m_midi->create_midi_device(); } + // network interface + virtual std::unique_ptr<osd::network_device> open_network_device(int id, osd::network_handler &handler) override; + virtual std::vector<osd::network_device_info> list_network_devices() override; // FIXME: everything below seems to be osd specific and not part of // this INTERFACE but part of the osd IMPLEMENTATION @@ -229,36 +270,34 @@ public: virtual void init_subsystems(); virtual bool video_init(); - virtual void video_register(); virtual bool window_init(); - virtual void input_resume(); - virtual void exit_subsystems(); virtual void video_exit(); virtual void window_exit(); virtual void osd_exit(); - virtual void video_options_add(const char *name, void *type); - virtual osd_options &options() { return m_options; } // osd_output interface ... - virtual void output_callback(osd_output_channel channel, const char *msg, va_list args) override; + virtual void output_callback(osd_output_channel channel, const util::format_argument_pack<char> &args) override; bool verbose() const { return m_print_verbose; } virtual void set_verbose(bool print_verbose) override { m_print_verbose = print_verbose; } void notify(const char *outname, int32_t value) const { m_output->notify(outname, value); } - static std::list<std::shared_ptr<osd_window>> s_window_list; + virtual void process_events() = 0; + virtual bool has_focus() const = 0; + + static const std::list<std::unique_ptr<osd_window> > &window_list() { return s_window_list; } protected: virtual bool input_init(); - virtual void input_pause(); - virtual void build_slider_list() { } - virtual void update_slider_list() { } + void poll_input_modules(bool relative_reset); + + static std::list<std::unique_ptr<osd_window> > s_window_list; private: // internal state @@ -270,31 +309,30 @@ private: osd_module_manager m_mod_man; font_module *m_font_module; - void update_option(const std::string &key, std::vector<const char *> &values); + void update_option(const std::string &key, std::vector<std::string_view> const &values); // FIXME: should be elsewhere - osd_module *select_module_options(const core_options &opts, const std::string &opt_name) + template<class C> + C &select_module_options(const std::string &opt_name) { - std::string opt_val = opts.exists(opt_name) ? opts.value(opt_name.c_str()) : ""; - if (opt_val.compare("auto")==0) + std::string opt_val = options().exists(opt_name) ? options().value(opt_name) : ""; + if (opt_val == "auto") + { opt_val = ""; + } else if (!m_mod_man.type_has_name(opt_name.c_str(), opt_val.c_str())) { - osd_printf_warning("Value %s not supported for option %s - falling back to auto\n", opt_val.c_str(), opt_name.c_str()); + osd_printf_warning("Value %s not supported for option %s - falling back to auto\n", opt_val, opt_name); opt_val = ""; } - return m_mod_man.select_module(opt_name.c_str(), opt_val.c_str()); - } - - template<class C> - C select_module_options(const core_options &opts, const std::string &opt_name) - { - return dynamic_cast<C>(select_module_options(opts, opt_name)); + return m_mod_man.select_module<C>(*this, options(), opt_name.c_str(), opt_val.c_str()); } protected: + render_module* m_render; sound_module* m_sound; debug_module* m_debugger; midi_module* m_midi; + netdev_module* m_network; input_module* m_keyboard_input; input_module* m_mouse_input; input_module* m_lightgun_input; @@ -305,16 +343,7 @@ protected: std::vector<ui::menu_item> m_sliders; private: - std::vector<const char *> m_video_names; std::unordered_map<std::string, std::string> m_option_descs; }; - -// this template function creates a stub which constructs a debugger -template<class _DeviceClass> -debug_module *osd_debugger_creator() -{ - return global_alloc(_DeviceClass()); -} - #endif // MAME_OSD_LIB_OSDOBJ_COMMON_H |