From 7ab27618a7089aa87bfda4d48db1bd43037a0ffe Mon Sep 17 00:00:00 2001 From: Thomas Jentzsch Date: Wed, 27 Oct 2021 11:39:43 +0200 Subject: [PATCH] improved UI and doc for interpolation (unavailable for Software renderer) --- docs/index.html | 6 +++--- src/emucore/Console.cxx | 24 +++++++++++++++--------- src/emucore/EventHandler.cxx | 5 ++++- src/gui/VideoAudioDialog.cxx | 14 +++++++++++++- src/gui/VideoAudioDialog.hxx | 2 ++ 5 files changed, 37 insertions(+), 14 deletions(-) diff --git a/docs/index.html b/docs/index.html index 9a3e65f5e..af3b061e5 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1429,7 +1429,7 @@ Control + F - Toggle display interpolation + Toggle display interpolation (not available for Software renderer) Control + I Control + I @@ -2845,7 +2845,7 @@
-tia.inter <1|0>
Use interpolation for the TIA image (results in blending/smoothing - of the image). + of the image, not available for Software renderer). @@ -3707,7 +3707,7 @@ - + diff --git a/src/emucore/Console.cxx b/src/emucore/Console.cxx index 9cbe63da0..5939b1751 100644 --- a/src/emucore/Console.cxx +++ b/src/emucore/Console.cxx @@ -514,19 +514,25 @@ void Console::enableColorLoss(bool state) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void Console::toggleInter(bool toggle) { - bool enabled = myOSystem.settings().getBool("tia.inter"); + if(myOSystem.settings().getString("video") != "software") + { + bool enabled = myOSystem.settings().getBool("tia.inter"); - if(toggle) - enabled = !enabled; + if(toggle) + enabled = !enabled; - myOSystem.settings().setValue("tia.inter", enabled); + myOSystem.settings().setValue("tia.inter", enabled); - // ... and apply potential setting changes to the TIA surface - myOSystem.frameBuffer().tiaSurface().updateSurfaceSettings(); - ostringstream ss; + // ... and apply potential setting changes to the TIA surface + myOSystem.frameBuffer().tiaSurface().updateSurfaceSettings(); + ostringstream ss; - ss << "Interpolation " << (enabled ? "enabled" : "disabled"); - myOSystem.frameBuffer().showTextMessage(ss.str()); + ss << "Interpolation " << (enabled ? "enabled" : "disabled"); + myOSystem.frameBuffer().showTextMessage(ss.str()); + } + else + myOSystem.frameBuffer().showTextMessage( + "Interpolation not available for Software renderer"); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/emucore/EventHandler.cxx b/src/emucore/EventHandler.cxx index 7a5b34295..aa0ad1bce 100644 --- a/src/emucore/EventHandler.cxx +++ b/src/emucore/EventHandler.cxx @@ -420,6 +420,8 @@ bool EventHandler::skipAVSetting() const myOSystem.settings().getString("palette") == PaletteHandler::SETTING_CUSTOM; const bool isCustomFilter = myOSystem.settings().getInt("tv.filter") == int(NTSCFilter::Preset::CUSTOM); + const bool isSoftwareRenderer = + myOSystem.settings().getString("video") == "software"; return (myAdjustSetting == AdjustSetting::OVERSCAN && !isFullScreen) #ifdef ADAPTABLE_REFRESH_SUPPORT @@ -430,7 +432,8 @@ bool EventHandler::skipAVSetting() const && !isCustomPalette) || (myAdjustSetting >= AdjustSetting::NTSC_SHARPNESS && myAdjustSetting <= AdjustSetting::NTSC_BLEEDING - && !isCustomFilter); + && !isCustomFilter) + || (myAdjustSetting == AdjustSetting::INTERPOLATION && isSoftwareRenderer); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/gui/VideoAudioDialog.cxx b/src/gui/VideoAudioDialog.cxx index f1ebade27..f6f540b61 100644 --- a/src/gui/VideoAudioDialog.cxx +++ b/src/gui/VideoAudioDialog.cxx @@ -121,7 +121,7 @@ void VideoAudioDialog::addDisplayTab() // Video renderer myRenderer = new PopUpWidget(myTab, _font, xpos, ypos, pwidth, lineHeight, instance().frameBuffer().supportedRenderers(), - "Renderer ", lwidth); + "Renderer ", lwidth, kRendererChanged); myRenderer->setToolTip("Select renderer used for displaying screen."); wid.push_back(myRenderer); const int swidth = myRenderer->getWidth() - lwidth; @@ -544,6 +544,7 @@ void VideoAudioDialog::loadConfig() // Display tab // Renderer settings myRenderer->setSelected(settings.getString("video"), "default"); + handleRendererChanged(); // TIA interpolation myTIAInterpolate->setState(settings.getBool("tia.inter")); @@ -945,6 +946,13 @@ void VideoAudioDialog::loadTVAdjustables(NTSCFilter::Preset preset) myTVBleed->setValue(adj.bleed); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void VideoAudioDialog::handleRendererChanged() +{ + bool enable = myRenderer->getSelectedTag().toString() != "software"; + myTIAInterpolate->setEnabled(enable); +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void VideoAudioDialog::handlePaletteChange() { @@ -1093,6 +1101,10 @@ void VideoAudioDialog::handleCommand(CommandSender* sender, int cmd, handleShiftChanged(myTVBlueShift); break; + case kRendererChanged: + handleRendererChanged(); + break; + case kVSizeChanged: { int adjust = myVSizeAdjust->getValue(); diff --git a/src/gui/VideoAudioDialog.hxx b/src/gui/VideoAudioDialog.hxx index b8cfd5c5f..66990a2d3 100644 --- a/src/gui/VideoAudioDialog.hxx +++ b/src/gui/VideoAudioDialog.hxx @@ -52,6 +52,7 @@ class VideoAudioDialog : public Dialog void addAudioTab(); void handleTVModeChange(NTSCFilter::Preset); void loadTVAdjustables(NTSCFilter::Preset preset); + void handleRendererChanged(); void handlePaletteChange(); void handleShiftChanged(SliderWidget* widget); void handlePaletteUpdate(); @@ -136,6 +137,7 @@ class VideoAudioDialog : public Dialog PaletteHandler::Adjustable myPaletteAdj; enum { + kRendererChanged = 'VDRe', kZoomChanged = 'VDZo', kVSizeChanged = 'VDVs', kFullScreenChanged = 'VDFs',
ItemBrief descriptionFor more information,
see Command Line
RendererUse specified rendering mode.-video
InterpolationEnable interpolation of the TIA image.-tia.inter
InterpolationEnable interpolation of the TIA image (not available for Software renderer).-tia.inter
ZoomAdjust the zoom level of the TIA image-tia.zoom
FullscreenSelf-explanatory - Note that colors may slightly change. This depends on the OS and renderer used.-fullscreen