diff options
author | James Rowe <jroweboy@gmail.com> | 2018-01-11 19:21:20 -0700 |
---|---|---|
committer | James Rowe <jroweboy@gmail.com> | 2018-01-12 19:11:03 -0700 |
commit | ebf9a784a9f7f4148a669dbb39e7cd50df779a14 (patch) | |
tree | d585685a1c0a34b903af1d086d62560bf56bb29f /src/yuzu/bootmanager.h | |
parent | 890bbc0cd3ab070f8e1ef32806fe51ab20dd8579 (diff) |
Massive removal of unused modules
Diffstat (limited to 'src/yuzu/bootmanager.h')
-rw-r--r-- | src/yuzu/bootmanager.h | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/src/yuzu/bootmanager.h b/src/yuzu/bootmanager.h new file mode 100644 index 000000000..6974edcbb --- /dev/null +++ b/src/yuzu/bootmanager.h @@ -0,0 +1,162 @@ +// Copyright 2014 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include <atomic> +#include <condition_variable> +#include <mutex> +#include <QGLWidget> +#include <QThread> +#include "common/thread.h" +#include "core/core.h" +#include "core/frontend/emu_window.h" + +class QKeyEvent; +class QScreen; + +class GGLWidgetInternal; +class GMainWindow; +class GRenderWindow; + +class EmuThread : public QThread { + Q_OBJECT + +public: + explicit EmuThread(GRenderWindow* render_window); + + /** + * Start emulation (on new thread) + * @warning Only call when not running! + */ + void run() override; + + /** + * Steps the emulation thread by a single CPU instruction (if the CPU is not already running) + * @note This function is thread-safe + */ + void ExecStep() { + exec_step = true; + running_cv.notify_all(); + } + + /** + * Sets whether the emulation thread is running or not + * @param running Boolean value, set the emulation thread to running if true + * @note This function is thread-safe + */ + void SetRunning(bool running) { + std::unique_lock<std::mutex> lock(running_mutex); + this->running = running; + lock.unlock(); + running_cv.notify_all(); + } + + /** + * Check if the emulation thread is running or not + * @return True if the emulation thread is running, otherwise false + * @note This function is thread-safe + */ + bool IsRunning() { + return running; + } + + /** + * Requests for the emulation thread to stop running + */ + void RequestStop() { + stop_run = true; + SetRunning(false); + }; + +private: + bool exec_step; + bool running; + std::atomic<bool> stop_run; + std::mutex running_mutex; + std::condition_variable running_cv; + + GRenderWindow* render_window; + +signals: + /** + * Emitted when the CPU has halted execution + * + * @warning When connecting to this signal from other threads, make sure to specify either + * Qt::QueuedConnection (invoke slot within the destination object's message thread) or even + * Qt::BlockingQueuedConnection (additionally block source thread until slot returns) + */ + void DebugModeEntered(); + + /** + * Emitted right before the CPU continues execution + * + * @warning When connecting to this signal from other threads, make sure to specify either + * Qt::QueuedConnection (invoke slot within the destination object's message thread) or even + * Qt::BlockingQueuedConnection (additionally block source thread until slot returns) + */ + void DebugModeLeft(); + + void ErrorThrown(Core::System::ResultStatus, std::string); +}; + +class GRenderWindow : public QWidget, public EmuWindow { + Q_OBJECT + +public: + GRenderWindow(QWidget* parent, EmuThread* emu_thread); + ~GRenderWindow(); + + // EmuWindow implementation + void SwapBuffers() override; + void MakeCurrent() override; + void DoneCurrent() override; + void PollEvents() override; + + void BackupGeometry(); + void RestoreGeometry(); + void restoreGeometry(const QByteArray& geometry); // overridden + QByteArray saveGeometry(); // overridden + + qreal windowPixelRatio(); + + void closeEvent(QCloseEvent* event) override; + + void keyPressEvent(QKeyEvent* event) override; + void keyReleaseEvent(QKeyEvent* event) override; + + void mousePressEvent(QMouseEvent* event) override; + void mouseMoveEvent(QMouseEvent* event) override; + void mouseReleaseEvent(QMouseEvent* event) override; + + void focusOutEvent(QFocusEvent* event) override; + + void OnClientAreaResized(unsigned width, unsigned height); + + void InitRenderTarget(); + +public slots: + void moveContext(); // overridden + + void OnEmulationStarting(EmuThread* emu_thread); + void OnEmulationStopping(); + void OnFramebufferSizeChanged(); + +signals: + /// Emitted when the window is closed + void Closed(); + +private: + void OnMinimalClientAreaChangeRequest( + const std::pair<unsigned, unsigned>& minimal_size) override; + + GGLWidgetInternal* child; + + QByteArray geometry; + + EmuThread* emu_thread; + +protected: + void showEvent(QShowEvent* event) override; +}; |