diff options
Diffstat (limited to 'src/osd/modules/output/win32_output.cpp')
-rw-r--r-- | src/osd/modules/output/win32_output.cpp | 68 |
1 files changed, 42 insertions, 26 deletions
diff --git a/src/osd/modules/output/win32_output.cpp b/src/osd/modules/output/win32_output.cpp index 3ee2cd6c17e..0d2d355b577 100644 --- a/src/osd/modules/output/win32_output.cpp +++ b/src/osd/modules/output/win32_output.cpp @@ -7,22 +7,27 @@ //============================================================ #include "output_module.h" + #include "modules/osdmodule.h" -#include "modules/lib/osdobj_common.h" #if defined(OSD_WINDOWS) -// standard windows headers -#include <windows.h> +#include "win32_output.h" + +#include "winmain.h" +#include "winutil.h" // MAME headers #include "emu.h" -#include "winmain.h" -#include "winutil.h" -#include "win32_output.h" +// standard windows headers +#include <windows.h> +namespace osd { + +namespace { + //============================================================ // CONSTANTS //============================================================ @@ -66,30 +71,36 @@ class output_win32 : public osd_module, public output_module { public: output_win32() - : osd_module(OSD_OUTPUT_PROVIDER, "windows"), output_module(), m_output_hwnd(nullptr), m_clientlist(nullptr) + : osd_module(OSD_OUTPUT_PROVIDER, "windows") + , output_module() + , m_output_hwnd(nullptr) + , m_clientlist(nullptr) + , m_machine(nullptr) { } virtual ~output_win32() { } - virtual int init(const osd_options &options) override; + virtual int init(osd_interface &osd, const osd_options &options) override; virtual void exit() override; // output_module - virtual void notify(const char *outname, int32_t value) override; - int create_window_class(void); + running_machine &machine() { return *m_machine; } + LRESULT register_client(HWND hwnd, LPARAM id); LRESULT unregister_client(HWND hwnd, LPARAM id); LRESULT send_id_string(HWND hwnd, LPARAM id); private: + int create_window_class(); // our HWND HWND m_output_hwnd; // client list registered_client * m_clientlist; + running_machine * m_machine; }; @@ -97,8 +108,10 @@ private: // output_init //============================================================ -int output_win32::init(const osd_options &options) +int output_win32::init(osd_interface &osd, const osd_options &options) { + m_machine = &downcast<osd_common_t &>(osd).machine(); + int result; // reset globals @@ -162,7 +175,7 @@ void output_win32::exit() { registered_client *temp = m_clientlist; m_clientlist = temp->next; - global_free(temp); + delete temp; } // broadcast a shutdown message @@ -174,7 +187,7 @@ void output_win32::exit() // create_window_class //============================================================ -int output_win32::create_window_class(void) +int output_win32::create_window_class() { static bool classes_created = false; @@ -226,12 +239,13 @@ static LRESULT CALLBACK output_window_proc(HWND wnd, UINT message, WPARAM wparam { switch(wparam) { - case IM_MAME_PAUSE: + case output_module::IM_MAME_PAUSE: if (lparam == 1 && !output.machine().paused()) output.machine().pause(); else if (lparam == 0 && output.machine().paused()) output.machine().resume(); - case IM_MAME_SAVESTATE: + break; + case output_module::IM_MAME_SAVESTATE: if (lparam == 0) output.machine().schedule_load("auto"); else if (lparam == 1) @@ -261,19 +275,19 @@ LRESULT output_win32::register_client(HWND hwnd, LPARAM id) if ((*client)->id == id) { (*client)->hwnd = hwnd; - machine().output().notify_all(this); + machine().output().notify_all([this] (const char *outname, int32_t value) { notify(outname, value); }); return 1; } // add us to the end - *client = global_alloc(registered_client); + *client = new registered_client; (*client)->next = nullptr; (*client)->id = id; (*client)->hwnd = hwnd; (*client)->machine = &machine(); // request a notification for all outputs - machine().output().notify_all(this); + machine().output().notify_all([this] (const char *outname, int32_t value) { notify(outname, value); }); return 0; } @@ -293,7 +307,7 @@ LRESULT output_win32::unregister_client(HWND hwnd, LPARAM id) { registered_client *temp = *client; *client = (*client)->next; - global_free(temp); + delete temp; found = true; break; } @@ -326,7 +340,7 @@ LRESULT output_win32::send_id_string(HWND hwnd, LPARAM id) // allocate memory for the message datalen = sizeof(copydata_id_string) + strlen(name) + 1; std::vector<uint8_t> buffer(datalen); - copydata_id_string *temp = (copydata_id_string *)&buffer[0]; + auto *temp = (copydata_id_string *)&buffer[0]; temp->id = id; strcpy(temp->string, name); @@ -346,18 +360,20 @@ LRESULT output_win32::send_id_string(HWND hwnd, LPARAM id) void output_win32::notify(const char *outname, int32_t value) { - registered_client *client; // loop over clients and notify them - for (client = m_clientlist; client != nullptr; client = client->next) - { + for (registered_client *client = m_clientlist; client != nullptr; client = client->next) PostMessage(client->hwnd, om_mame_update_state, client->machine->output().name_to_id(outname), value); - } } +} // anonymous namespace + +} // namespace osd #else - MODULE_NOT_SUPPORTED(output_win32, OSD_OUTPUT_PROVIDER, "windows") + +namespace osd { namespace { MODULE_NOT_SUPPORTED(output_win32, OSD_OUTPUT_PROVIDER, "windows") } } + #endif -MODULE_DEFINITION(OUTPUT_WIN32, output_win32) +MODULE_DEFINITION(OUTPUT_WIN32, osd::output_win32) |