diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index c810975f3..9e5d740db 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -11,8 +11,8 @@ add_library(plat STATIC qt_main.cpp qt_platform.cpp sdl_joystick.cpp - cpp11_thread.cpp ) + add_library(ui STATIC qt_ui.cpp qt_cdrom.c @@ -106,6 +106,7 @@ add_library(ui STATIC ../qt_resources.qrc ) + if (APPLE) target_sources(ui PRIVATE macos_event_filter.mm) endif() diff --git a/src/qt/cpp11_thread.cpp b/src/qt/cpp11_thread.cpp deleted file mode 100644 index 96eb4a2e1..000000000 --- a/src/qt/cpp11_thread.cpp +++ /dev/null @@ -1,133 +0,0 @@ -#include -#include -#include - -#include <86box/plat.h> - -struct event_cpp11_t -{ - std::condition_variable cond; - std::mutex mutex; - bool state = false; -}; - -extern "C" { - -thread_t * -thread_create(void (*thread_rout)(void *param), void *param) -{ - auto thread = new std::thread([thread_rout, param] { - thread_rout(param); - }); - return thread; -} - -mutex_t * -thread_create_mutex_with_spin_count(unsigned int spin_count) -{ - /* Setting spin count of a mutex is not possible with pthreads. */ - return thread_create_mutex(); -} - -int -thread_wait(thread_t *arg, int timeout) -{ - (void) timeout; - auto thread = reinterpret_cast(arg); - thread->join(); - return 0; -} - -mutex_t * -thread_create_mutex(void) -{ - auto mutex = new std::mutex; - return mutex; -} - -int -thread_wait_mutex(mutex_t *_mutex) -{ - if (_mutex == nullptr) - return(0); - auto mutex = reinterpret_cast(_mutex); - mutex->lock(); - return 1; -} - - -int -thread_release_mutex(mutex_t *_mutex) -{ - if (_mutex == nullptr) - return(0); - auto mutex = reinterpret_cast(_mutex); - mutex->unlock(); - return 1; -} - - -void -thread_close_mutex(mutex_t *_mutex) -{ - auto mutex = reinterpret_cast(_mutex); - delete mutex; -} - -event_t * -thread_create_event() -{ - auto ev = new event_cpp11_t; - return ev; -} - -int -thread_wait_event(event_t *handle, int timeout) -{ - auto event = reinterpret_cast(handle); - auto lock = std::unique_lock(event->mutex); - - if (timeout < 0) { - event->cond.wait(lock, [event] { return event->state; }); - } else { - auto to = std::chrono::system_clock::now() + std::chrono::milliseconds(timeout); - std::cv_status status; - - do { - status = event->cond.wait_until(lock, to); - } while ((status != std::cv_status::timeout) && !event->state); - - if (status == std::cv_status::timeout) { - return 1; - } - } - return 0; -} - -void -thread_set_event(event_t *handle) -{ - auto event = reinterpret_cast(handle); - { - auto lock = std::unique_lock(event->mutex); - event->state = true; - } - event->cond.notify_all(); -} - -void -thread_reset_event(event_t *handle) -{ - auto event = reinterpret_cast(handle); - auto lock = std::unique_lock(event->mutex); - event->state = false; -} - -void -thread_destroy_event(event_t *handle) -{ - auto event = reinterpret_cast(handle); - delete event; -} - -} diff --git a/src/qt/rtmidi_midi.cpp b/src/qt/rtmidi_midi.cpp deleted file mode 100644 index fd4ccbbaf..000000000 --- a/src/qt/rtmidi_midi.cpp +++ /dev/null @@ -1,165 +0,0 @@ - -#include -#include -#include -extern "C" -{ -#include <86box/86box.h> -#include <86box/midi.h> -#include <86box/plat_midi.h> -#include <86box/config.h> -} - -extern "C" { - -static RtMidiOut* midiout = nullptr; -static RtMidiIn* midiin = nullptr; -static int midi_out_id = 0, midi_in_id = 0; -static const int midi_lengths[8] = {3, 3, 3, 3, 2, 2, 3, 1}; - -int plat_midi_write(uint8_t val) -{ return 0; } - -void plat_midi_init() -{ - try - { - if (!midiout) midiout = new RtMidiOut; - } - catch (RtMidiError& error) - { - pclog("Failed to initialize MIDI output: %s\n", error.getMessage().c_str()); - return; - } - midi_out_id = config_get_int((char*)SYSTEM_MIDI_NAME, (char*)"midi", 0); - try - { - midiout->openPort(midi_out_id); - } - catch (RtMidiError& error) - { - pclog("Fallback to default MIDI output port: %s\n", error.getMessage().c_str()); - try - { - midiout->openPort(0); - } - catch (RtMidiError& error) - { - pclog("Failed to initialize MIDI output: %s\n", error.getMessage().c_str()); - delete midiout; - midiout = nullptr; - return; - } - } -} - -void plat_midi_close() -{ - if (!midiout) return; - midiout->closePort(); - delete midiout; - midiout = nullptr; -} - -int plat_midi_get_num_devs() -{ - if (!midiout) - { - try - { - midiout = new RtMidiOut; - } - catch (RtMidiError& error) - { - pclog("Failed to initialize MIDI output: %s\n", error.getMessage().c_str()); - } - } - return midiout ? midiout->getPortCount() : 0; -} - -void plat_midi_play_msg(uint8_t *msg) -{ - if (midiout) midiout->sendMessage(msg, midi_lengths[(msg[0] >> 4) & 7]); -} - -void plat_midi_get_dev_name(int num, char *s) -{ - strcpy(s, midiout->getPortName(num).c_str()); -} - -void plat_midi_play_sysex(uint8_t *sysex, unsigned int len) -{ - if (midiout) midiout->sendMessage(sysex, len); -} - -static void plat_midi_callback(double timeStamp, std::vector *message, void *userData) -{ - if (message->size() <= 3) midi_in_msg(message->data()); - else midi_in_sysex(message->data(), message->size()); -} - -void plat_midi_input_init(void) -{ - try - { - if (!midiin) midiin = new RtMidiIn; - } - catch (RtMidiError& error) - { - pclog("Failed to initialize MIDI input: %s\n", error.getMessage().c_str()); - return; - } - midi_in_id = config_get_int((char*)SYSTEM_MIDI_NAME, (char*)"midi_input", 0); - try - { - midiin->openPort(midi_in_id); - } - catch (RtMidiError& error) - { - pclog("Fallback to default MIDI input port: %s\n", error.getMessage().c_str()); - try - { - midiin->openPort(0); - } - catch (RtMidiError& error) - { - pclog("Failed to initialize MIDI input: %s\n", error.getMessage().c_str()); - delete midiin; - midiin = nullptr; - return; - } - } - midiin->setCallback(plat_midi_callback); -} - -void plat_midi_input_close(void) -{ - midiin->cancelCallback(); - midiin->closePort(); - delete midiin; - midiin = nullptr; - return; -} - -int plat_midi_in_get_num_devs(void) -{ - if (!midiin) - { - try - { - midiin = new RtMidiIn; - } - catch (RtMidiError& error) - { - pclog("Failed to initialize MIDI input: %s\n", error.getMessage().c_str()); - } - } - return midiin ? midiin->getPortCount() : 0; -} - -void plat_midi_in_get_dev_name(int num, char *s) -{ - strcpy(s, midiin->getPortName(num).c_str()); -} - -}