diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/devices/machine/pckeybrd.cpp | 2 | ||||
-rw-r--r-- | src/emu/debug/debugcmd.cpp | 4 | ||||
-rw-r--r-- | src/emu/emufwd.h | 2 | ||||
-rw-r--r-- | src/emu/ioport.cpp | 35 | ||||
-rw-r--r-- | src/emu/ioport.h | 2 | ||||
-rw-r--r-- | src/emu/machine.cpp | 4 | ||||
-rw-r--r-- | src/emu/machine.h | 2 | ||||
-rw-r--r-- | src/frontend/mame/luaengine.cpp | 3 | ||||
-rw-r--r-- | src/frontend/mame/luaengine_input.cpp | 1 | ||||
-rw-r--r-- | src/frontend/mame/ui/keyboard.cpp | 4 | ||||
-rw-r--r-- | src/frontend/mame/ui/mainmenu.cpp | 2 | ||||
-rw-r--r-- | src/frontend/mame/ui/ui.cpp | 8 |
12 files changed, 36 insertions, 33 deletions
diff --git a/src/devices/machine/pckeybrd.cpp b/src/devices/machine/pckeybrd.cpp index 7062c59c8fa..1ab2dc80209 100644 --- a/src/devices/machine/pckeybrd.cpp +++ b/src/devices/machine/pckeybrd.cpp @@ -320,7 +320,7 @@ void pc_keyboard_device::device_start() memset(m_make, 0, sizeof(m_make)); - machine().ioport().natkeyboard().configure( + machine().natkeyboard().configure( ioport_queue_chars_delegate(&pc_keyboard_device::queue_chars, this), ioport_accept_char_delegate(&pc_keyboard_device::accept_char, this), ioport_charqueue_empty_delegate(&pc_keyboard_device::charqueue_empty, this)); diff --git a/src/emu/debug/debugcmd.cpp b/src/emu/debug/debugcmd.cpp index 3aa7544f3ff..7e820bafa84 100644 --- a/src/emu/debug/debugcmd.cpp +++ b/src/emu/debug/debugcmd.cpp @@ -3930,7 +3930,7 @@ void debugger_commands::execute_unmount(int ref, const std::vector<std::string> void debugger_commands::execute_input(int ref, const std::vector<std::string> ¶ms) { - m_machine.ioport().natkeyboard().post_coded(params[0].c_str()); + m_machine.natkeyboard().post_coded(params[0].c_str()); } @@ -3956,7 +3956,7 @@ void debugger_commands::execute_dumpkbd(int ref, const std::vector<std::string> } // loop through all codes - std::string buffer = m_machine.ioport().natkeyboard().dump(); + std::string buffer = m_machine.natkeyboard().dump(); // and output it as appropriate if (file != nullptr) diff --git a/src/emu/emufwd.h b/src/emu/emufwd.h index 8d47e42829a..a487af49b21 100644 --- a/src/emu/emufwd.h +++ b/src/emu/emufwd.h @@ -78,7 +78,7 @@ class crosshair_manager; // declared in debug/debugcmd.h class debugger_commands; -// declared in debug/debugcmd.h +// declared in debug/debugcon.h class debugger_console; // declared in debug/debugcpu.h diff --git a/src/emu/ioport.cpp b/src/emu/ioport.cpp index fbc3bfe7fbc..ede3de5bafe 100644 --- a/src/emu/ioport.cpp +++ b/src/emu/ioport.cpp @@ -1732,9 +1732,6 @@ time_t ioport_manager::initialize() break; } - // initialize natural keyboard - m_natkeyboard = std::make_unique<natural_keyboard>(machine()); - // register callbacks for when we load configurations machine().configuration().config_register("input", config_load_delegate(&ioport_manager::load_config, this), config_save_delegate(&ioport_manager::save_config, this)); @@ -2128,6 +2125,7 @@ void ioport_manager::load_config(config_type cfg_type, util::xml::data_node cons { std::vector<bool> kbd_enable_set; bool keyboard_enabled = false, missing_enabled = false; + natural_keyboard &natkbd = machine().natkeyboard(); for (util::xml::data_node const *kbdnode = parentnode->get_child("keyboard"); kbdnode; kbdnode = kbdnode->get_next_sibling("keyboard")) { char const *const tag = kbdnode->get_attribute_string("tag", nullptr); @@ -2135,48 +2133,48 @@ void ioport_manager::load_config(config_type cfg_type, util::xml::data_node cons if (tag && (0 <= enabled)) { size_t i; - for (i = 0; natkeyboard().keyboard_count() > i; ++i) + for (i = 0; natkbd.keyboard_count() > i; ++i) { - if (!strcmp(natkeyboard().keyboard_device(i).tag(), tag)) + if (!strcmp(natkbd.keyboard_device(i).tag(), tag)) { if (kbd_enable_set.empty()) - kbd_enable_set.resize(natkeyboard().keyboard_count(), false); + kbd_enable_set.resize(natkbd.keyboard_count(), false); kbd_enable_set[i] = true; if (enabled) { - if (!natkeyboard().keyboard_is_keypad(i)) + if (!natkbd.keyboard_is_keypad(i)) keyboard_enabled = true; - natkeyboard().enable_keyboard(i); + natkbd.enable_keyboard(i); } else { - natkeyboard().disable_keyboard(i); + natkbd.disable_keyboard(i); } break; } } - missing_enabled = missing_enabled || (enabled && (natkeyboard().keyboard_count() <= i)); + missing_enabled = missing_enabled || (enabled && (natkbd.keyboard_count() <= i)); } } // if keyboard enable configuration was loaded, patch it up for principle of least surprise if (!kbd_enable_set.empty()) { - for (size_t i = 0; natkeyboard().keyboard_count() > i; ++i) + for (size_t i = 0; natkbd.keyboard_count() > i; ++i) { - if (!natkeyboard().keyboard_is_keypad(i)) + if (!natkbd.keyboard_is_keypad(i)) { if (!keyboard_enabled && missing_enabled) { - natkeyboard().enable_keyboard(i); + natkbd.enable_keyboard(i); keyboard_enabled = true; } else if (!kbd_enable_set[i]) { if (keyboard_enabled) - natkeyboard().disable_keyboard(i); + natkbd.disable_keyboard(i); else - natkeyboard().enable_keyboard(i); + natkbd.enable_keyboard(i); keyboard_enabled = true; } } @@ -2422,11 +2420,12 @@ void ioport_manager::save_default_inputs(util::xml::data_node &parentnode) void ioport_manager::save_game_inputs(util::xml::data_node &parentnode) { // save keyboard enable/disable state - for (size_t i = 0; natkeyboard().keyboard_count() > i; ++i) + natural_keyboard &natkbd = machine().natkeyboard(); + for (size_t i = 0; natkbd.keyboard_count() > i; ++i) { util::xml::data_node *const kbdnode = parentnode.add_child("keyboard", nullptr); - kbdnode->set_attribute("tag", natkeyboard().keyboard_device(i).tag()); - kbdnode->set_attribute_int("enabled", natkeyboard().keyboard_enabled(i)); + kbdnode->set_attribute("tag", natkbd.keyboard_device(i).tag()); + kbdnode->set_attribute_int("enabled", natkbd.keyboard_enabled(i)); } // iterate over ports diff --git a/src/emu/ioport.h b/src/emu/ioport.h index 376df1347be..8554455b114 100644 --- a/src/emu/ioport.h +++ b/src/emu/ioport.h @@ -1389,7 +1389,6 @@ public: running_machine &machine() const noexcept { return m_machine; } const ioport_list &ports() const noexcept { return m_portlist; } bool safe_to_read() const noexcept { return m_safe_to_read; } - natural_keyboard &natkeyboard() noexcept { assert(m_natkeyboard != nullptr); return *m_natkeyboard; } // type helpers const std::vector<input_type_entry> &types() const noexcept { return m_typelist; } @@ -1459,7 +1458,6 @@ private: // specific special global input states simple_list<digital_joystick> m_joystick_list; // list of digital joysticks - std::unique_ptr<natural_keyboard> m_natkeyboard; // natural keyboard support // frame time tracking attotime m_last_frame_time; // time of the last frame callback diff --git a/src/emu/machine.cpp b/src/emu/machine.cpp index 3d9b6c428a2..a7fdddc5fd2 100644 --- a/src/emu/machine.cpp +++ b/src/emu/machine.cpp @@ -84,6 +84,7 @@ #include "network.h" #include "romload.h" #include "tilemap.h" +#include "natkeyboard.h" #include "ui/uimain.h" #include <ctime> #include <rapidjson/writer.h> @@ -218,6 +219,9 @@ void running_machine::start() if (newbase != 0) m_base_time = newbase; + // initialize natural keyboard support after ports have been initialized + m_natkeyboard = std::make_unique<natural_keyboard>(*this); + // initialize the streams engine before the sound devices start m_sound = std::make_unique<sound_manager>(*this); diff --git a/src/emu/machine.h b/src/emu/machine.h index ece7e65c025..37a5702c72e 100644 --- a/src/emu/machine.h +++ b/src/emu/machine.h @@ -188,6 +188,7 @@ public: tilemap_manager &tilemap() const { assert(m_tilemap != nullptr); return *m_tilemap; } debug_view_manager &debug_view() const { assert(m_debug_view != nullptr); return *m_debug_view; } debugger_manager &debugger() const { assert(m_debugger != nullptr); return *m_debugger; } + natural_keyboard &natkeyboard() noexcept { assert(m_natkeyboard != nullptr); return *m_natkeyboard; } template <class DriverClass> DriverClass *driver_data() const { return &downcast<DriverClass &>(root_device()); } machine_phase phase() const { return m_current_phase; } bool paused() const { return m_paused || (m_current_phase != machine_phase::RUNNING); } @@ -336,6 +337,7 @@ private: std::unique_ptr<image_manager> m_image; // internal data from image.cpp std::unique_ptr<rom_load_manager> m_rom_load; // internal data from romload.cpp std::unique_ptr<debugger_manager> m_debugger; // internal data from debugger.cpp + std::unique_ptr<natural_keyboard> m_natkeyboard; // internal data from natkeyboard.cpp // system state machine_phase m_current_phase; // current execution phase diff --git a/src/frontend/mame/luaengine.cpp b/src/frontend/mame/luaengine.cpp index fe534302f9e..0c7b9c046fc 100644 --- a/src/frontend/mame/luaengine.cpp +++ b/src/frontend/mame/luaengine.cpp @@ -717,7 +717,7 @@ void lua_engine::initialize() emu["gamename"] = [this] () { return machine().system().type.fullname(); }; emu["romname"] = [this] () { return machine().basename(); }; emu["softname"] = [this] () { return machine().options().software_name(); }; - emu["keypost"] = [this] (const char *keys) { machine().ioport().natkeyboard().post_utf8(keys); }; + emu["keypost"] = [this] (const char *keys) { machine().natkeyboard().post_utf8(keys); }; emu["time"] = [this] () { return machine().time().as_double(); }; emu["start"] = [this](const char *driver) @@ -1287,6 +1287,7 @@ void lua_engine::initialize() else return sol::lua_nil; }); + machine_type["natkeyboard"] = sol::property(&running_machine::natkeyboard); machine_type["paused"] = sol::property(&running_machine::paused); machine_type["samplerate"] = sol::property(&running_machine::sample_rate); machine_type["exit_pending"] = sol::property(&running_machine::exit_pending); diff --git a/src/frontend/mame/luaengine_input.cpp b/src/frontend/mame/luaengine_input.cpp index 1dc0f491cb6..7e5019c1da4 100644 --- a/src/frontend/mame/luaengine_input.cpp +++ b/src/frontend/mame/luaengine_input.cpp @@ -170,7 +170,6 @@ void lua_engine::initialize_input(sol::table &emu) &ioport_manager::input_type_to_token, [] (ioport_manager &im, ioport_type type) { return im.input_type_to_token(type, 0); }); ioport_manager_type["ports"] = sol::property([] (ioport_manager &im) { return tag_object_ptr_map<ioport_list>(im.ports()); }); - ioport_manager_type["natkeyboard"] = sol::property(&ioport_manager::natkeyboard); auto natkeyboard_type = sol().registry().new_usertype<natural_keyboard>("natkeyboard", sol::no_constructor); diff --git a/src/frontend/mame/ui/keyboard.cpp b/src/frontend/mame/ui/keyboard.cpp index 3d58d28d2d9..36f12753e0c 100644 --- a/src/frontend/mame/ui/keyboard.cpp +++ b/src/frontend/mame/ui/keyboard.cpp @@ -30,7 +30,7 @@ menu_keyboard_mode::menu_keyboard_mode(mame_ui_manager &mui, render_container &c void menu_keyboard_mode::populate(float &customtop, float &custombottom) { - natural_keyboard &natkbd(machine().ioport().natkeyboard()); + natural_keyboard &natkbd(machine().natkeyboard()); if (natkbd.can_post()) { @@ -69,7 +69,7 @@ void menu_keyboard_mode::handle() event const *const menu_event(process(0)); if (menu_event && uintptr_t(menu_event->itemref)) { - natural_keyboard &natkbd(machine().ioport().natkeyboard()); + natural_keyboard &natkbd(machine().natkeyboard()); uintptr_t const ref(uintptr_t(menu_event->itemref)); bool const left(IPT_UI_LEFT == menu_event->iptkey); bool const right(IPT_UI_RIGHT == menu_event->iptkey); diff --git a/src/frontend/mame/ui/mainmenu.cpp b/src/frontend/mame/ui/mainmenu.cpp index 9fb66331249..15c1f6207d5 100644 --- a/src/frontend/mame/ui/mainmenu.cpp +++ b/src/frontend/mame/ui/mainmenu.cpp @@ -109,7 +109,7 @@ void menu_main::populate(float &customtop, float &custombottom) if (network_interface_enumerator(machine().root_device()).first() != nullptr) item_append(_("Network Devices"), 0, (void*)NETWORK_DEVICES); - if (machine().ioport().natkeyboard().keyboard_count()) + if (machine().natkeyboard().keyboard_count()) item_append(_("Keyboard Mode"), 0, (void *)KEYBOARD_MODE); item_append(_("Slider Controls"), 0, (void *)SLIDERS); diff --git a/src/frontend/mame/ui/ui.cpp b/src/frontend/mame/ui/ui.cpp index 7ba294c446c..64f68d92049 100644 --- a/src/frontend/mame/ui/ui.cpp +++ b/src/frontend/mame/ui/ui.cpp @@ -992,7 +992,7 @@ void mame_ui_manager::process_natural_keyboard() { // if this was a UI_EVENT_CHAR event, post it if (event.event_type == ui_event::type::IME_CHAR) - machine().ioport().natkeyboard().post_char(event.ch); + machine().natkeyboard().post_char(event.ch); } // process natural keyboard keys that don't get UI_EVENT_CHARs @@ -1015,7 +1015,7 @@ void mame_ui_manager::process_natural_keyboard() *key_down_ptr |= key_down_mask; // post the key - machine().ioport().natkeyboard().post_char(UCHAR_MAMEKEY_BEGIN + code.item_id()); + machine().natkeyboard().post_char(UCHAR_MAMEKEY_BEGIN + code.item_id()); } else if (!pressed && (*key_down_ptr & key_down_mask)) { @@ -1244,14 +1244,14 @@ uint32_t mame_ui_manager::handler_ingame(render_container &container) } // is the natural keyboard enabled? - if (machine().ioport().natkeyboard().in_use() && (machine().phase() == machine_phase::RUNNING)) + if (machine().natkeyboard().in_use() && (machine().phase() == machine_phase::RUNNING)) process_natural_keyboard(); if (!ui_disabled) { // paste command if (machine().ui_input().pressed(IPT_UI_PASTE)) - machine().ioport().natkeyboard().paste(); + machine().natkeyboard().paste(); } image_handler_ingame(); |