Qt: Add option for disabling OSD messages

This commit is contained in:
Vicki Pfau 2019-10-06 02:54:51 -07:00
parent 54b92bee16
commit 546f787eb3
9 changed files with 93 additions and 40 deletions

View File

@ -83,6 +83,7 @@ Misc:
- Qt: Printer quality of life improvements (fixes mgba.io/i/1540)
- Qt: Add copy and QoL improvements to graphic views (closes mgba.io/i/1541)
- Qt: Show list of all sprites in sprite view
- Qt: Add option for disabling OSD messages
0.7.3: (2019-09-15)
Emulation fixes:

View File

@ -75,6 +75,10 @@ void Display::interframeBlending(bool lock) {
m_interframeBlending = lock;
}
void Display::showOSDMessages(bool enable) {
m_showOSD = enable;
}
void Display::filter(bool filter) {
m_filter = filter;
}

View File

@ -44,6 +44,7 @@ public:
bool isIntegerScalingLocked() const { return m_lockIntegerScaling; }
bool hasInterframeBlending() const { return m_interframeBlending; }
bool isFiltered() const { return m_filter; }
bool isShowOSD() const { return m_showOSD; }
virtual void startDrawing(std::shared_ptr<CoreController>) = 0;
virtual bool isDrawing() const = 0;
@ -66,6 +67,7 @@ public slots:
virtual void lockAspectRatio(bool lock);
virtual void lockIntegerScaling(bool lock);
virtual void interframeBlending(bool enable);
virtual void showOSDMessages(bool enable);
virtual void filter(bool filter);
virtual void framePosted() = 0;
virtual void setShaders(struct VDir*) = 0;
@ -85,6 +87,7 @@ private:
static const int MOUSE_DISAPPEAR_TIMER = 1000;
MessagePainter m_messagePainter;
bool m_showOSD = true;
bool m_lockAspectRatio = false;
bool m_lockIntegerScaling = false;
bool m_interframeBlending = false;

View File

@ -111,6 +111,7 @@ void DisplayGL::startDrawing(std::shared_ptr<CoreController> controller) {
lockAspectRatio(isAspectRatioLocked());
lockIntegerScaling(isIntegerScalingLocked());
interframeBlending(hasInterframeBlending());
showOSDMessages(isShowOSD());
filter(isFiltered());
#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
messagePainter()->resize(size(), isAspectRatioLocked(), devicePixelRatioF());
@ -184,6 +185,13 @@ void DisplayGL::interframeBlending(bool enable) {
}
}
void DisplayGL::showOSDMessages(bool enable) {
Display::showOSDMessages(enable);
if (m_drawThread) {
QMetaObject::invokeMethod(m_painter, "showOSD", Q_ARG(bool, enable));
}
}
void DisplayGL::filter(bool filter) {
Display::filter(filter);
if (m_drawThread) {
@ -370,6 +378,10 @@ void PainterGL::interframeBlending(bool enable) {
m_backend->interframeBlending = enable;
}
void PainterGL::showOSD(bool enable) {
m_showOSD = enable;
}
void PainterGL::filter(bool filter) {
m_backend->filter = filter;
if (m_started && !m_active) {
@ -458,7 +470,7 @@ void PainterGL::performDraw() {
m_backend->resized(m_backend, m_size.width() * r, m_size.height() * r);
m_backend->drawFrame(m_backend);
m_painter.endNativePainting();
if (m_messagePainter) {
if (m_showOSD && m_messagePainter) {
m_messagePainter->paint(&m_painter);
}
}

View File

@ -56,6 +56,7 @@ public slots:
void lockAspectRatio(bool lock) override;
void lockIntegerScaling(bool lock) override;
void interframeBlending(bool enable) override;
void showOSDMessages(bool enable) override;
void filter(bool filter) override;
void framePosted() override;
void setShaders(struct VDir*) override;
@ -102,6 +103,7 @@ public slots:
void lockAspectRatio(bool lock);
void lockIntegerScaling(bool lock);
void interframeBlending(bool enable);
void showOSD(bool enable);
void filter(bool filter);
void resizeContext();
@ -127,6 +129,7 @@ private:
bool m_started = false;
std::shared_ptr<CoreController> m_context = nullptr;
bool m_supportsShaders;
bool m_showOSD;
VideoShader m_shader{};
VideoBackend* m_backend = nullptr;
QSize m_size;

View File

@ -122,5 +122,7 @@ void DisplayQt::paintEvent(QPaintEvent*) {
}
painter.drawImage(full, m_backing, QRect(0, 0, m_width, m_height));
painter.setOpacity(1);
if (isShowOSD()) {
messagePainter()->paint(&painter);
}
}

View File

@ -377,6 +377,7 @@ void SettingsView::updateConfig() {
saveSetting("lockAspectRatio", m_ui.lockAspectRatio);
saveSetting("lockIntegerScaling", m_ui.lockIntegerScaling);
saveSetting("interframeBlending", m_ui.interframeBlending);
saveSetting("showOSD", m_ui.showOSD);
saveSetting("volume", m_ui.volume);
saveSetting("mute", m_ui.mute);
saveSetting("fastForwardVolume", m_ui.volumeFf);
@ -547,6 +548,7 @@ void SettingsView::reloadConfig() {
loadSetting("lockAspectRatio", m_ui.lockAspectRatio);
loadSetting("lockIntegerScaling", m_ui.lockIntegerScaling);
loadSetting("interframeBlending", m_ui.interframeBlending);
loadSetting("showOSD", m_ui.showOSD, true);
loadSetting("volume", m_ui.volume, 0x100);
loadSetting("mute", m_ui.mute, false);
loadSetting("fastForwardVolume", m_ui.volumeFf, m_ui.volume->value());

View File

@ -562,7 +562,21 @@
</property>
</widget>
</item>
<item row="10" column="1">
<item row="9" column="1">
<widget class="QCheckBox" name="pauseOnMinimize">
<property name="text">
<string>Pause when minimized</string>
</property>
</widget>
</item>
<item row="10" column="0" colspan="2">
<widget class="Line" name="line_17">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="11" column="1">
<widget class="QCheckBox" name="showFps">
<property name="text">
<string>Show FPS in title bar</string>
@ -572,41 +586,21 @@
</property>
</widget>
</item>
<item row="12" column="0" colspan="2">
<item row="13" column="1">
<widget class="QCheckBox" name="useDiscordPresence">
<property name="text">
<string>Enable Discord Rich Presence</string>
</property>
</widget>
</item>
<item row="14" column="0" colspan="2">
<widget class="Line" name="line_13">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="15" column="0" colspan="2">
<widget class="Line" name="line_16">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="16" column="1">
<widget class="QCheckBox" name="cheatAutosave">
<property name="text">
<string>Automatically save cheats</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="17" column="1">
<widget class="QCheckBox" name="cheatAutoload">
<property name="text">
<string>Automatically load cheats</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="13" column="1">
<item row="15" column="1">
<widget class="QCheckBox" name="autosave">
<property name="text">
<string>Automatically save state</string>
@ -616,7 +610,7 @@
</property>
</widget>
</item>
<item row="14" column="1">
<item row="16" column="1">
<widget class="QCheckBox" name="autoload">
<property name="text">
<string>Automatically load state</string>
@ -626,17 +620,40 @@
</property>
</widget>
</item>
<item row="11" column="1">
<widget class="QCheckBox" name="useDiscordPresence">
<property name="text">
<string>Enable Discord Rich Presence</string>
<item row="17" column="0" colspan="2">
<widget class="Line" name="line_16">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="QCheckBox" name="pauseOnMinimize">
<item row="18" column="1">
<widget class="QCheckBox" name="cheatAutosave">
<property name="text">
<string>Pause when minimized</string>
<string>Automatically save cheats</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="19" column="1">
<widget class="QCheckBox" name="cheatAutoload">
<property name="text">
<string>Automatically load cheats</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="12" column="1">
<widget class="QCheckBox" name="showOSD">
<property name="text">
<string>Show OSD messages</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>

View File

@ -738,6 +738,7 @@ void Window::gameStarted() {
m_config->updateOption("lockIntegerScaling");
m_config->updateOption("lockAspectRatio");
m_config->updateOption("interframeBlending");
m_config->updateOption("showOSD");
if (m_savedScale > 0) {
resizeFrame(size * m_savedScale);
}
@ -908,6 +909,7 @@ void Window::reloadDisplayDriver() {
m_display->lockIntegerScaling(opts->lockIntegerScaling);
m_display->interframeBlending(opts->interframeBlending);
m_display->filter(opts->resampleVideo);
m_config->updateOption("showOSD");
#if defined(BUILD_GL) || defined(BUILD_GLES2)
if (opts->shader) {
struct VDir* shader = VDirOpen(opts->shader);
@ -1603,6 +1605,13 @@ void Window::setupMenu(QMenuBar* menubar) {
}
}, this);
ConfigOption* showOSD = m_config->addOption("showOSD");
showOSD->connect([this](const QVariant& value) {
if (m_display) {
m_display->showOSDMessages(value.toBool());
}
}, this);
m_actions.addHiddenAction(tr("Exit fullscreen"), "exitFullScreen", this, &Window::exitFullScreen, "frame", QKeySequence("Esc"));
m_actions.addHeldAction(tr("GameShark Button (held)"), "holdGSButton", [this](bool held) {