diff -Nur higan_v101-source/higan/target-tomoko/configuration/configuration.cpp higan_v101-source-fullscreen/higan/target-tomoko/configuration/configuration.cpp --- higan_v101-source/higan/target-tomoko/configuration/configuration.cpp 2016-08-08 00:24:02.000000000 -0400 +++ higan_v101-source-fullscreen/higan/target-tomoko/configuration/configuration.cpp 2016-10-30 11:45:08.935985300 -0400 @@ -22,6 +22,7 @@ set("Video/BlurEmulation", true); set("Video/ColorEmulation", true); set("Video/ScanlineEmulation", false); + set("Video/DisableIntegerScaling", true); set("Video/Saturation", 100); set("Video/Gamma", 100); diff -Nur higan_v101-source/higan/target-tomoko/presentation/presentation.cpp higan_v101-source-fullscreen/higan/target-tomoko/presentation/presentation.cpp --- higan_v101-source/higan/target-tomoko/presentation/presentation.cpp 2016-07-29 07:00:48.000000000 -0400 +++ higan_v101-source-fullscreen/higan/target-tomoko/presentation/presentation.cpp 2016-10-30 10:31:20.430689300 -0400 @@ -57,6 +57,10 @@ settings["Video/AspectCorrection"].setValue(aspectCorrection.checked()); resizeViewport(); }); + disableIntegerScaling.setText("Disable Integer Scaling").setChecked(settings["Video/DisableIntegerScaling"].boolean()).onToggle([&] { + settings["Video/DisableIntegerScaling"].setValue(disableIntegerScaling.checked()); + resizeViewport(); + }); videoEmulationMenu.setText("Video Emulation"); blurEmulation.setText("Blurring").setChecked(settings["Video/BlurEmulation"].boolean()).onToggle([&] { settings["Video/BlurEmulation"].setValue(blurEmulation.checked()); @@ -222,9 +226,15 @@ windowHeight = geometry().height(); } - int multiplier = min(windowWidth / (int)(width * stretch), windowHeight / height); - width = width * multiplier * stretch; - height = height * multiplier; + if(settings["Video/DisableIntegerScaling"].boolean()) { + double multiplier = min(windowWidth / (width * stretch), windowHeight / (double)height); + width = width * multiplier * stretch; + height = height * multiplier; + } else { + int multiplier = min(windowWidth / (int)(width * stretch), windowHeight / height); + width = width * multiplier * stretch; + height = height * multiplier; + } if(!fullScreen()) setSize({windowWidth, windowHeight}); viewport.setGeometry({(windowWidth - width) / 2, (windowHeight - height) / 2, width, height}); diff -Nur higan_v101-source/higan/target-tomoko/presentation/presentation.hpp higan_v101-source-fullscreen/higan/target-tomoko/presentation/presentation.hpp --- higan_v101-source/higan/target-tomoko/presentation/presentation.hpp 2016-07-29 07:12:13.000000000 -0400 +++ higan_v101-source-fullscreen/higan/target-tomoko/presentation/presentation.hpp 2016-10-30 10:31:24.221906100 -0400 @@ -37,6 +37,7 @@ Group videoScales{&videoScaleSmall, &videoScaleMedium, &videoScaleLarge}; MenuSeparator videoScaleSeparator{&videoScaleMenu}; MenuCheckItem aspectCorrection{&videoScaleMenu}; + MenuCheckItem disableIntegerScaling{&videoScaleMenu}; Menu videoEmulationMenu{&settingsMenu}; MenuCheckItem blurEmulation{&videoEmulationMenu}; MenuCheckItem colorEmulation{&videoEmulationMenu};