made correct aspect ratio a permanent setting

added hotkey for correct aspect ratio
updated docs
This commit is contained in:
thrust26 2020-10-05 23:05:33 +02:00
parent 2464094694
commit 7fa2db712b
12 changed files with 71 additions and 16 deletions

View File

@ -51,7 +51,7 @@
* Added another oddball TIA glitch option for delayed background color. * Added another oddball TIA glitch option for delayed background color.
* Added option to disable aspect correct scaling. * Added option to disable aspect ratio correct scaling.
* Replaced "Re-disassemble" with "Disassemble @ current line" in debugger. * Replaced "Re-disassemble" with "Disassemble @ current line" in debugger.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@ -1394,6 +1394,11 @@
<td>Alt + PageUp</td> <td>Alt + PageUp</td>
<td>Cmd-Fn + Up arrow</td> <td>Cmd-Fn + Up arrow</td>
</tr> </tr>
<tr>
<td>Toggle aspect ratio correct scaling</td>
<td>Control + c</td>
<td>Control + c</td>
</tr>
<tr> <tr>
<td><i>Decrease</i> vertical display size</td> <td><i>Decrease</i> vertical display size</td>
<td>Shift-Alt + PageUp</td> <td>Shift-Alt + PageUp</td>
@ -2286,7 +2291,7 @@
<tr> <tr>
<td><pre>-tia.correct_aspect &lt;1|0&gt;</pre></td> <td><pre>-tia.correct_aspect &lt;1|0&gt;</pre></td>
<td>Enable aspect correct scaling.</td> <td>Enable aspect ratio correct scaling.</td>
</tr> </tr>
<tr> <tr>
@ -3048,16 +3053,18 @@
<td valign="top"> <td valign="top">
<table border="1" cellpadding="4"> <table border="1" cellpadding="4">
<tr><th>Item</th><th>Brief description</th><th>For more information,<br>see <a href="#CommandLine">Command Line</a></th></tr> <tr><th>Item</th><th>Brief description</th><th>For more information,<br>see <a href="#CommandLine">Command Line</a></th></tr>
<tr><td>Renderer</td><td>Use specified rendering mode</td><td>-video</td></tr> <tr><td>Renderer</td><td>Use specified rendering mode.</td><td>-video</td></tr>
<tr><td>Interpolation</td><td>Enable interpolation of the TIA image</td><td>-tia.inter</td></tr> <tr><td>Interpolation</td><td>Enable interpolation of the TIA image.</td><td>-tia.inter</td></tr>
<tr><td>Zoom</td><td>Zoom level of the TIA image</td><td>-tia.zoom</td></tr> <tr><td>Zoom</td><td>Adjust the zoom level of the TIA image</td><td>-tia.zoom</td></tr>
<tr><td>Fullscreen</td><td>Self-explanatory - Note that colors may slightly change. <tr><td>Fullscreen</td><td>Self-explanatory - Note that colors may slightly change.
This depends on the OS and renderer used.</td><td>-fullscreen</td></tr> This depends on the OS and renderer used.</td><td>-fullscreen</td></tr>
<tr><td>Stretch</td><td>In fullscreen mode, completely fill screen with the TIA image.</td><td>-tia.fs_stretch</td></tr> <tr><td>Stretch</td><td>In fullscreen mode, completely fill screen with the TIA image.</td><td>-tia.fs_stretch</td></tr>
<tr><td>Adapt display...</td><td>In fullscreen mode, adapt the display's refresh rate to the game's frame rate to minimize judder. <tr><td>Adapt display...</td><td>In fullscreen mode, adapt the display's refresh rate to the game's frame rate to minimize judder.
</br>Note: Not available for macOS.</td><td>-tia.fs_refresh</td></tr> </br>Note: Not available for macOS.</td><td>-tia.fs_refresh</td></tr>
<tr><td>Overscan</td><td>In fullscreen mode, add overscan to the TIA image</td><td>-tia.fs_overscan</td></tr> <tr><td>Overscan</td><td>In fullscreen mode, add overscan to the TIA image.</td><td>-tia.fs_overscan</td></tr>
<tr><td>V-Size adjust</td><td>Adjust height of the TIA image</td><td>-tia.vsizeadjust</td></tr> <tr><td>Correct aspect ratio</td><td>Enable aspect ratio correct scaling.
</br>Note: Creates a cleaner looking TIA image when disabled (like z26 and old versions of Stella) vs. a correctly emulated aspect ratio when enabled.</td><td>-tia.correct_aspect</td></tr>
<tr><td>V-Size adjust</td><td>Adjust the height of the TIA image.</td><td>-tia.vsizeadjust</td></tr>
</table> </table>
</td> </td>
</tr> </tr>

View File

@ -470,6 +470,7 @@ PhysicalKeyboardHandler::EventMappingArray PhysicalKeyboardHandler::DefaultCommo
{Event::VCenterIncrease, KBDK_PAGEDOWN, MOD3}, {Event::VCenterIncrease, KBDK_PAGEDOWN, MOD3},
{Event::VSizeAdjustDecrease, KBDK_PAGEDOWN, KBDM_SHIFT | MOD3}, {Event::VSizeAdjustDecrease, KBDK_PAGEDOWN, KBDM_SHIFT | MOD3},
{Event::VSizeAdjustIncrease, KBDK_PAGEUP, KBDM_SHIFT | MOD3}, {Event::VSizeAdjustIncrease, KBDK_PAGEUP, KBDM_SHIFT | MOD3},
{Event::ToggleCorrectAspectRatio, KBDK_C, KBDM_CTRL},
{Event::VolumeDecrease, KBDK_LEFTBRACKET, MOD3}, {Event::VolumeDecrease, KBDK_LEFTBRACKET, MOD3},
{Event::VolumeIncrease, KBDK_RIGHTBRACKET, MOD3}, {Event::VolumeIncrease, KBDK_RIGHTBRACKET, MOD3},
{Event::SoundToggle, KBDK_RIGHTBRACKET, KBDM_CTRL}, {Event::SoundToggle, KBDK_RIGHTBRACKET, KBDM_CTRL},

View File

@ -623,7 +623,7 @@ FBInitStatus Console::initializeVideo(bool full)
if(full) if(full)
{ {
uInt32 width, height; uInt32 width, height;
if (myOSystem.settings().getBool("tia.correct_aspect")) { if (!myOSystem.settings().getBool("tia.correct_aspect")) {
width = 2 * myTIA->width(); width = 2 * myTIA->width();
height = myTIA->height(); height = myTIA->height();
} else { } else {
@ -737,6 +737,22 @@ void Console::changeVSizeAdjust(int direction)
myOSystem.frameBuffer().showMessage("V-Size", val.str(), newAdjustVSize, -5, 5); myOSystem.frameBuffer().showMessage("V-Size", val.str(), newAdjustVSize, -5, 5);
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Console::toggleCorrectAspectRatio(bool toggle)
{
bool enabled = myOSystem.settings().getBool("tia.correct_aspect");
if(toggle)
{
enabled = !enabled;
myOSystem.settings().setValue("tia.correct_aspect", enabled);
initializeVideo();
}
const string message = string("Correct aspect ratio ") + (enabled ? "enabled" : "disabled");
myOSystem.frameBuffer().showMessage(message);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Console::setTIAProperties() void Console::setTIAProperties()
{ {

View File

@ -276,6 +276,11 @@ class Console : public Serializable, public ConsoleIO
*/ */
void changeVSizeAdjust(int direction = +1); void changeVSizeAdjust(int direction = +1);
/**
Toggle the aspect ratio correction.
*/
void toggleCorrectAspectRatio(bool toggle = true);
/** /**
Returns the current framerate. Returns the current framerate.
*/ */

View File

@ -134,6 +134,8 @@ class Event
JoystickThreeUp, JoystickThreeDown, JoystickThreeLeft, JoystickThreeRight, JoystickThreeUp, JoystickThreeDown, JoystickThreeLeft, JoystickThreeRight,
JoystickThreeFire, JoystickThreeFire,
ToggleCorrectAspectRatio,
LastType LastType
}; };

View File

@ -419,6 +419,7 @@ AdjustFunction EventHandler::getAdjustSetting(AdjustSetting setting)
std::bind(&FrameBuffer::changeOverscan, &myOSystem.frameBuffer(), _1), std::bind(&FrameBuffer::changeOverscan, &myOSystem.frameBuffer(), _1),
std::bind(&Console::selectFormat, &myOSystem.console(), _1), std::bind(&Console::selectFormat, &myOSystem.console(), _1),
std::bind(&Console::changeVerticalCenter, &myOSystem.console(), _1), std::bind(&Console::changeVerticalCenter, &myOSystem.console(), _1),
std::bind(&Console::toggleCorrectAspectRatio, &myOSystem.console(), _1),
std::bind(&Console::changeVSizeAdjust, &myOSystem.console(), _1), std::bind(&Console::changeVSizeAdjust, &myOSystem.console(), _1),
// Palette adjustables // Palette adjustables
std::bind(&PaletteHandler::cyclePalette, &myOSystem.frameBuffer().tiaSurface().paletteHandler(), _1), std::bind(&PaletteHandler::cyclePalette, &myOSystem.frameBuffer().tiaSurface().paletteHandler(), _1),
@ -780,7 +781,6 @@ void EventHandler::handleEvent(Event::Type event, Int32 value, bool repeated)
myAdjustActive = true; myAdjustActive = true;
} }
return; return;
case Event::VSizeAdjustDecrease: case Event::VSizeAdjustDecrease:
if(pressed) if(pressed)
{ {
@ -799,6 +799,15 @@ void EventHandler::handleEvent(Event::Type event, Int32 value, bool repeated)
} }
return; return;
case Event::ToggleCorrectAspectRatio:
if(pressed && !repeated)
{
myOSystem.console().toggleCorrectAspectRatio();
myAdjustSetting = AdjustSetting::ASPECT_RATIO;
myAdjustActive = true;
}
break;
case Event::PaletteDecrease: case Event::PaletteDecrease:
if (pressed && !repeated) if (pressed && !repeated)
{ {
@ -2573,6 +2582,7 @@ EventHandler::EmulActionList EventHandler::ourEmulActionList = { {
{ Event::OverscanIncrease, "Increase overscan in fullscreen mode", "" }, { Event::OverscanIncrease, "Increase overscan in fullscreen mode", "" },
{ Event::VidmodeDecrease, "Previous zoom level", "" }, { Event::VidmodeDecrease, "Previous zoom level", "" },
{ Event::VidmodeIncrease, "Next zoom level", "" }, { Event::VidmodeIncrease, "Next zoom level", "" },
{ Event::ToggleCorrectAspectRatio,"Toggle correct aspect ratio", "" },
{ Event::VSizeAdjustDecrease, "Decrease vertical display size", "" }, { Event::VSizeAdjustDecrease, "Decrease vertical display size", "" },
{ Event::VSizeAdjustIncrease, "Increase vertical display size", "" }, { Event::VSizeAdjustIncrease, "Increase vertical display size", "" },
{ Event::VCenterDecrease, "Move display up", "" }, { Event::VCenterDecrease, "Move display up", "" },
@ -2725,7 +2735,7 @@ const Event::EventSet EventHandler::AudioVideoEvents = {
Event::OverscanDecrease, Event::OverscanIncrease, Event::OverscanDecrease, Event::OverscanIncrease,
Event::FormatDecrease, Event::FormatIncrease, Event::FormatDecrease, Event::FormatIncrease,
Event::VCenterDecrease, Event::VCenterIncrease, Event::VCenterDecrease, Event::VCenterIncrease,
Event::VSizeAdjustDecrease, Event::VSizeAdjustIncrease, Event::VSizeAdjustDecrease, Event::VSizeAdjustIncrease, Event::ToggleCorrectAspectRatio,
Event::PaletteDecrease, Event::PaletteIncrease, Event::PaletteDecrease, Event::PaletteIncrease,
Event::PreviousPaletteAttribute, Event::NextPaletteAttribute, Event::PreviousPaletteAttribute, Event::NextPaletteAttribute,
Event::PaletteAttributeDecrease, Event::PaletteAttributeIncrease, Event::PaletteAttributeDecrease, Event::PaletteAttributeIncrease,

View File

@ -406,6 +406,7 @@ class EventHandler
OVERSCAN, OVERSCAN,
TVFORMAT, TVFORMAT,
VCENTER, VCENTER,
ASPECT_RATIO,
VSIZE, VSIZE,
// Palette adjustables // Palette adjustables
PALETTE, PALETTE,
@ -559,7 +560,7 @@ class EventHandler
#else #else
REFRESH_SIZE = 0, REFRESH_SIZE = 0,
#endif #endif
EMUL_ACTIONLIST_SIZE = 174 + PNG_SIZE + COMBO_SIZE + REFRESH_SIZE, EMUL_ACTIONLIST_SIZE = 175 + PNG_SIZE + COMBO_SIZE + REFRESH_SIZE,
MENU_ACTIONLIST_SIZE = 18 MENU_ACTIONLIST_SIZE = 18
; ;

View File

@ -57,7 +57,7 @@ Settings::Settings()
setPermanent("tia.fs_overscan", "0"); setPermanent("tia.fs_overscan", "0");
setPermanent("tia.vsizeadjust", 0); setPermanent("tia.vsizeadjust", 0);
setPermanent("tia.dbgcolors", "roygpb"); setPermanent("tia.dbgcolors", "roygpb");
setTemporary("tia.correct_aspect", "true"); setPermanent("tia.correct_aspect", "true");
// Palette options // Palette options
setPermanent("palette", PaletteHandler::SETTING_STANDARD); setPermanent("palette", PaletteHandler::SETTING_STANDARD);
setPermanent("pal.phase_ntsc", "26.2"); setPermanent("pal.phase_ntsc", "26.2");
@ -454,7 +454,7 @@ void Settings::usage() const
<< " -tia.fs_overscan <0-10> Add overscan to TIA image in fullscreen mode\n" << " -tia.fs_overscan <0-10> Add overscan to TIA image in fullscreen mode\n"
<< " -tia.dbgcolors <string> Debug colors to use for each object (see manual\n" << " -tia.dbgcolors <string> Debug colors to use for each object (see manual\n"
<< " for description)\n" << " for description)\n"
<< " -tia.correct_aspect <1|0> Enable aspect correct scaling\n" << " -tia.correct_aspect <1|0> Enable aspect ratio correct scaling\n"
<< endl << endl
<< " -tv.filter <0-5> Set TV effects off (0) or to specified mode\n" << " -tv.filter <0-5> Set TV effects off (0) or to specified mode\n"
<< " (1-5)\n" << " (1-5)\n"

View File

@ -127,8 +127,9 @@ void VideoAudioDialog::addDisplayTab()
// TIA interpolation // TIA interpolation
myTIAInterpolate = new CheckboxWidget(myTab, _font, xpos, ypos + 1, "Interpolation "); myTIAInterpolate = new CheckboxWidget(myTab, _font, xpos, ypos + 1, "Interpolation ");
wid.push_back(myTIAInterpolate); ypos += lineHeight + VGAP * 4; wid.push_back(myTIAInterpolate);
ypos += lineHeight + VGAP * 4;
// TIA zoom levels (will be dynamically filled later) // TIA zoom levels (will be dynamically filled later)
myTIAZoom = new SliderWidget(myTab, _font, xpos, ypos - 1, swidth, lineHeight, myTIAZoom = new SliderWidget(myTab, _font, xpos, ypos - 1, swidth, lineHeight,
"Zoom ", lwidth, 0, fontWidth * 4, "%"); "Zoom ", lwidth, 0, fontWidth * 4, "%");
@ -162,6 +163,11 @@ void VideoAudioDialog::addDisplayTab()
myTVOverscan->setTickmarkIntervals(2); myTVOverscan->setTickmarkIntervals(2);
wid.push_back(myTVOverscan); wid.push_back(myTVOverscan);
// Aspect ratio correction
ypos += lineHeight + VGAP * 4;
myCorrectAspect = new CheckboxWidget(myTab, _font, xpos, ypos + 1, "Correct aspect ratio");
wid.push_back(myUseStretch);
// Vertical size // Vertical size
ypos += lineHeight + VGAP; ypos += lineHeight + VGAP;
myVSizeAdjust = myVSizeAdjust =
@ -171,7 +177,6 @@ void VideoAudioDialog::addDisplayTab()
myVSizeAdjust->setTickmarkIntervals(2); myVSizeAdjust->setTickmarkIntervals(2);
wid.push_back(myVSizeAdjust); wid.push_back(myVSizeAdjust);
// Add items for tab 0 // Add items for tab 0
addToFocusList(wid, myTab, tabID); addToFocusList(wid, myTab, tabID);
} }
@ -494,6 +499,9 @@ void VideoAudioDialog::loadConfig()
myTVOverscan->setValue(instance().settings().getInt("tia.fs_overscan")); myTVOverscan->setValue(instance().settings().getInt("tia.fs_overscan"));
handleFullScreenChange(); handleFullScreenChange();
// Aspect ratio correction
myCorrectAspect->setState(instance().settings().getBool("tia.correct_aspect"));
// Aspect ratio setting (NTSC and PAL) // Aspect ratio setting (NTSC and PAL)
myVSizeAdjust->setValue(instance().settings().getInt("tia.vsizeadjust")); myVSizeAdjust->setValue(instance().settings().getInt("tia.vsizeadjust"));
@ -616,6 +624,9 @@ void VideoAudioDialog::saveConfig()
// TIA zoom levels // TIA zoom levels
instance().settings().setValue("tia.zoom", myTIAZoom->getValue() / 100.0); instance().settings().setValue("tia.zoom", myTIAZoom->getValue() / 100.0);
// Aspect ratio correction
instance().settings().setValue("tia.correct_aspect", myCorrectAspect->getState());
// Aspect ratio setting (NTSC and PAL) // Aspect ratio setting (NTSC and PAL)
const int oldAdjust = instance().settings().getInt("tia.vsizeadjust"); const int oldAdjust = instance().settings().getInt("tia.vsizeadjust");
const int newAdjust = myVSizeAdjust->getValue(); const int newAdjust = myVSizeAdjust->getValue();
@ -729,6 +740,7 @@ void VideoAudioDialog::setDefaults()
#endif #endif
myTVOverscan->setValue(0); myTVOverscan->setValue(0);
myTIAZoom->setValue(300); myTIAZoom->setValue(300);
myCorrectAspect->setState(true);
myVSizeAdjust->setValue(0); myVSizeAdjust->setValue(0);
handleFullScreenChange(); handleFullScreenChange();

View File

@ -75,6 +75,7 @@ class VideoAudioDialog : public Dialog
SliderWidget* myTVOverscan{nullptr}; SliderWidget* myTVOverscan{nullptr};
CheckboxWidget* myRefreshAdapt{nullptr}; CheckboxWidget* myRefreshAdapt{nullptr};
SliderWidget* myTIAZoom{nullptr}; SliderWidget* myTIAZoom{nullptr};
CheckboxWidget* myCorrectAspect{nullptr};
SliderWidget* myVSizeAdjust{nullptr}; SliderWidget* myVSizeAdjust{nullptr};
// TV effects adjustables (custom mode) // TV effects adjustables (custom mode)