all repos — mgba @ 74edd964daeebe53f6b1d9f86e91aecced1149a8

mGBA Game Boy Advance Emulator

src/platform/qt/Display.h (view raw)

  1/* Copyright (c) 2013-2015 Jeffrey Pfau
  2 *
  3 * This Source Code Form is subject to the terms of the Mozilla Public
  4 * License, v. 2.0. If a copy of the MPL was not distributed with this
  5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
  6#pragma once
  7
  8#include <mgba-util/common.h>
  9
 10#include <memory>
 11
 12#include <QWidget>
 13
 14#include "MessagePainter.h"
 15
 16struct VDir;
 17struct VideoShader;
 18
 19namespace QGBA {
 20
 21class CoreController;
 22class VideoProxy;
 23
 24class Display : public QWidget {
 25Q_OBJECT
 26
 27public:
 28	enum class Driver {
 29		QT = 0,
 30#if defined(BUILD_GL) || defined(BUILD_GLES2) || defined(USE_EPOXY)
 31		OPENGL = 1,
 32#endif
 33#ifdef BUILD_GL
 34		OPENGL1 = 2,
 35#endif
 36	};
 37
 38	Display(QWidget* parent = nullptr);
 39
 40	static Display* create(QWidget* parent = nullptr);
 41	static void setDriver(Driver driver) { s_driver = driver; }
 42
 43	bool isAspectRatioLocked() const { return m_lockAspectRatio; }
 44	bool isIntegerScalingLocked() const { return m_lockIntegerScaling; }
 45	bool hasInterframeBlending() const { return m_interframeBlending; }
 46	bool isFiltered() const { return m_filter; }
 47	bool isShowOSD() const { return m_showOSD; }
 48
 49	virtual void startDrawing(std::shared_ptr<CoreController>) = 0;
 50	virtual bool isDrawing() const = 0;
 51	virtual bool supportsShaders() const = 0;
 52	virtual VideoShader* shaders() = 0;
 53	virtual int framebufferHandle() { return -1; }
 54	virtual void setVideoScale(int) {}
 55
 56	virtual void setVideoProxy(std::shared_ptr<VideoProxy> proxy) { m_videoProxy = proxy; }
 57	std::shared_ptr<VideoProxy> videoProxy() { return m_videoProxy; }
 58	
 59signals:
 60	void showCursor();
 61	void hideCursor();
 62
 63public slots:
 64	virtual void stopDrawing() = 0;
 65	virtual void pauseDrawing() = 0;
 66	virtual void unpauseDrawing() = 0;
 67	virtual void forceDraw() = 0;
 68	virtual void lockAspectRatio(bool lock);
 69	virtual void lockIntegerScaling(bool lock);
 70	virtual void interframeBlending(bool enable);
 71	virtual void showOSDMessages(bool enable);
 72	virtual void filter(bool filter);
 73	virtual void framePosted() = 0;
 74	virtual void setShaders(struct VDir*) = 0;
 75	virtual void clearShaders() = 0;
 76	virtual void resizeContext() = 0;
 77
 78	void showMessage(const QString& message);
 79
 80protected:
 81	virtual void resizeEvent(QResizeEvent*) override;
 82	virtual void mouseMoveEvent(QMouseEvent*) override;
 83
 84	MessagePainter* messagePainter() { return &m_messagePainter; }
 85
 86private:
 87	static Driver s_driver;
 88	static const int MOUSE_DISAPPEAR_TIMER = 1000;
 89
 90	MessagePainter m_messagePainter;
 91	bool m_showOSD = true;
 92	bool m_lockAspectRatio = false;
 93	bool m_lockIntegerScaling = false;
 94	bool m_interframeBlending = false;
 95	bool m_filter = false;
 96	QTimer m_mouseTimer;
 97	std::shared_ptr<VideoProxy> m_videoProxy;
 98};
 99
100}