all repos — mgba @ 686380b6c4d8acf219a704a8932668b11efc47c2

mGBA Game Boy Advance Emulator

src/platform/qt/Display.cpp (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#include "Display.h"
  7
  8#include "DisplayGL.h"
  9#include "DisplayQt.h"
 10
 11#ifdef M_CORE_GB
 12#include <mgba/internal/gb/video.h>
 13#elif defined(M_CORE_GBA)
 14#include <mgba/internal/gba/video.h>
 15#endif
 16
 17using namespace QGBA;
 18
 19#if defined(BUILD_GL) || defined(BUILD_GLES2) || defined(USE_EPOXY)
 20Display::Driver Display::s_driver = Display::Driver::OPENGL;
 21#else
 22Display::Driver Display::s_driver = Display::Driver::QT;
 23#endif
 24
 25Display* Display::create(QWidget* parent) {
 26#if defined(BUILD_GL) || defined(BUILD_GLES2) || defined(USE_EPOXY)
 27	QGLFormat format(QGLFormat(QGL::Rgba | QGL::DoubleBuffer));
 28	format.setSwapInterval(1);
 29#endif
 30
 31	switch (s_driver) {
 32#if defined(BUILD_GL) || defined(BUILD_GLES2) || defined(USE_EPOXY)
 33	case Driver::OPENGL:
 34		return new DisplayGL(format, parent);
 35#endif
 36#ifdef BUILD_GL
 37	case Driver::OPENGL1:
 38		format.setVersion(1, 4);
 39		return new DisplayGL(format, parent);
 40#endif
 41
 42	case Driver::QT:
 43		return new DisplayQt(parent);
 44
 45	default:
 46#if defined(BUILD_GL) || defined(BUILD_GLES2) || defined(USE_EPOXY)
 47		return new DisplayGL(format, parent);
 48#else
 49		return new DisplayQt(parent);
 50#endif
 51	}
 52}
 53
 54Display::Display(QWidget* parent)
 55	: QWidget(parent)
 56	, m_lockAspectRatio(false)
 57	, m_lockIntegerScaling(false)
 58	, m_filter(false)
 59{
 60	setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
 61#ifdef M_CORE_GB
 62	setMinimumSize(GB_VIDEO_HORIZONTAL_PIXELS, GB_VIDEO_VERTICAL_PIXELS);
 63#elif defined(M_CORE_GBA)
 64	setMinimumSize(VIDEO_HORIZONTAL_PIXELS, VIDEO_VERTICAL_PIXELS);
 65#endif
 66	connect(&m_mouseTimer, &QTimer::timeout, this, &Display::hideCursor);
 67	m_mouseTimer.setSingleShot(true);
 68	m_mouseTimer.setInterval(MOUSE_DISAPPEAR_TIMER);
 69	setMouseTracking(true);
 70}
 71
 72void Display::resizeEvent(QResizeEvent*) {
 73	m_messagePainter.resize(size(), m_lockAspectRatio, devicePixelRatio());
 74}
 75
 76void Display::lockAspectRatio(bool lock) {
 77	m_lockAspectRatio = lock;
 78	m_messagePainter.resize(size(), m_lockAspectRatio, devicePixelRatio());
 79}
 80
 81void Display::lockIntegerScaling(bool lock) {
 82	m_lockIntegerScaling = lock;
 83}
 84
 85void Display::filter(bool filter) {
 86	m_filter = filter;
 87}
 88
 89void Display::showMessage(const QString& message) {
 90	m_messagePainter.showMessage(message);
 91	if (!isDrawing()) {
 92		forceDraw();
 93	}
 94}
 95
 96void Display::mouseMoveEvent(QMouseEvent*) {
 97	emit showCursor();
 98	m_mouseTimer.stop();
 99	m_mouseTimer.start();
100}