From ebf9a784a9f7f4148a669dbb39e7cd50df779a14 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Thu, 11 Jan 2018 19:21:20 -0700 Subject: Massive removal of unused modules --- src/yuzu/bootmanager.h | 162 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 src/yuzu/bootmanager.h (limited to 'src/yuzu/bootmanager.h') 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 +#include +#include +#include +#include +#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 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 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& minimal_size) override; + + GGLWidgetInternal* child; + + QByteArray geometry; + + EmuThread* emu_thread; + +protected: + void showEvent(QShowEvent* event) override; +}; -- cgit v1.2.3