summaryrefslogtreecommitdiff
path: root/src/yuzu/bootmanager.h
diff options
context:
space:
mode:
authorJames Rowe <jroweboy@gmail.com>2018-01-11 19:21:20 -0700
committerJames Rowe <jroweboy@gmail.com>2018-01-12 19:11:03 -0700
commitebf9a784a9f7f4148a669dbb39e7cd50df779a14 (patch)
treed585685a1c0a34b903af1d086d62560bf56bb29f /src/yuzu/bootmanager.h
parent890bbc0cd3ab070f8e1ef32806fe51ab20dd8579 (diff)
Massive removal of unused modules
Diffstat (limited to 'src/yuzu/bootmanager.h')
-rw-r--r--src/yuzu/bootmanager.h162
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;
+};