summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/modules/output/win32_output.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/osd/modules/output/win32_output.cpp')
-rw-r--r--src/osd/modules/output/win32_output.cpp68
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)