mirror of
https://github.com/k4zmu2a/SpaceCadetPinball.git
synced 2023-12-30 21:52:56 +00:00
Added integer scaling option.
Useful for getting exact upscale in combination with nearest neighbor. Ref issue #97.
This commit is contained in:
parent
64c3f2031b
commit
37198f1b99
@ -116,17 +116,27 @@ void fullscrn::window_size_changed()
|
|||||||
ScaleX = static_cast<float>(width) / res->TableWidth;
|
ScaleX = static_cast<float>(width) / res->TableWidth;
|
||||||
ScaleY = static_cast<float>(height) / res->TableHeight;
|
ScaleY = static_cast<float>(height) / res->TableHeight;
|
||||||
OffsetX = OffsetY = 0;
|
OffsetX = OffsetY = 0;
|
||||||
|
auto offset2X = 0, offset2Y = 0;
|
||||||
|
|
||||||
|
if (options::Options.IntegerScaling)
|
||||||
|
{
|
||||||
|
ScaleX = ScaleX < 1 ? ScaleX : std::floor(ScaleX);
|
||||||
|
ScaleY = ScaleY < 1 ? ScaleY : std::floor(ScaleY);
|
||||||
|
}
|
||||||
|
|
||||||
if (options::Options.UniformScaling)
|
if (options::Options.UniformScaling)
|
||||||
{
|
{
|
||||||
ScaleY = ScaleX = std::min(ScaleX, ScaleY);
|
ScaleY = ScaleX = std::min(ScaleX, ScaleY);
|
||||||
OffsetX = static_cast<int>(floor((width - res->TableWidth * ScaleX) / 2));
|
|
||||||
OffsetY = static_cast<int>(floor((height - res->TableHeight * ScaleY) / 2));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
offset2X = static_cast<int>(floor(width - res->TableWidth * ScaleX));
|
||||||
|
offset2Y = static_cast<int>(floor(height - res->TableHeight * ScaleY));
|
||||||
|
OffsetX = offset2X / 2;
|
||||||
|
OffsetY = offset2Y / 2;
|
||||||
|
|
||||||
render::DestinationRect = SDL_Rect
|
render::DestinationRect = SDL_Rect
|
||||||
{
|
{
|
||||||
OffsetX, OffsetY + menuHeight,
|
OffsetX, OffsetY + menuHeight,
|
||||||
width - OffsetX * 2, height - OffsetY * 2
|
width - offset2X, height - offset2Y
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -101,6 +101,7 @@ void options::InitPrimary()
|
|||||||
Options.SoundChannels = std::min(MaxSoundChannels, std::max(MinSoundChannels, Options.SoundChannels));
|
Options.SoundChannels = std::min(MaxSoundChannels, std::max(MinSoundChannels, Options.SoundChannels));
|
||||||
Options.HybridSleep = get_int("HybridSleep", false);
|
Options.HybridSleep = get_int("HybridSleep", false);
|
||||||
Options.Prefer3DPBGameData = get_int("Prefer 3DPB Game Data", false);
|
Options.Prefer3DPBGameData = get_int("Prefer 3DPB Game Data", false);
|
||||||
|
Options.IntegerScaling = get_int("Integer Scaling", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void options::InitSecondary()
|
void options::InitSecondary()
|
||||||
@ -137,6 +138,7 @@ void options::uninit()
|
|||||||
set_int("Sound Channels", Options.SoundChannels);
|
set_int("Sound Channels", Options.SoundChannels);
|
||||||
set_int("HybridSleep", Options.HybridSleep);
|
set_int("HybridSleep", Options.HybridSleep);
|
||||||
set_int("Prefer 3DPB Game Data", Options.Prefer3DPBGameData);
|
set_int("Prefer 3DPB Game Data", Options.Prefer3DPBGameData);
|
||||||
|
set_int("Integer Scaling", Options.IntegerScaling);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -260,6 +262,10 @@ void options::toggle(Menu1 uIDCheckItem)
|
|||||||
Options.Prefer3DPBGameData ^= true;
|
Options.Prefer3DPBGameData ^= true;
|
||||||
winmain::Restart();
|
winmain::Restart();
|
||||||
break;
|
break;
|
||||||
|
case Menu1::WindowIntegerScale:
|
||||||
|
Options.IntegerScaling ^= true;
|
||||||
|
fullscrn::window_size_changed();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,7 @@ enum class Menu1:int
|
|||||||
R1024x768 = 503,
|
R1024x768 = 503,
|
||||||
WindowUniformScale = 600,
|
WindowUniformScale = 600,
|
||||||
WindowLinearFilter = 601,
|
WindowLinearFilter = 601,
|
||||||
|
WindowIntegerScale = 602,
|
||||||
Prefer3DPBGameData = 700,
|
Prefer3DPBGameData = 700,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -76,6 +77,7 @@ struct optionsStruct
|
|||||||
int SoundChannels;
|
int SoundChannels;
|
||||||
bool HybridSleep;
|
bool HybridSleep;
|
||||||
bool Prefer3DPBGameData;
|
bool Prefer3DPBGameData;
|
||||||
|
bool IntegerScaling;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ControlRef
|
struct ControlRef
|
||||||
|
@ -466,6 +466,10 @@ void winmain::RenderUi()
|
|||||||
{
|
{
|
||||||
options::toggle(Menu1::WindowLinearFilter);
|
options::toggle(Menu1::WindowLinearFilter);
|
||||||
}
|
}
|
||||||
|
if (ImGui::MenuItem("Integer Scaling", nullptr, Options.IntegerScaling))
|
||||||
|
{
|
||||||
|
options::toggle(Menu1::WindowIntegerScale);
|
||||||
|
}
|
||||||
ImGui::DragFloat("UI Scale", &ImIO->FontGlobalScale, 0.005f, 0.8f, 5,
|
ImGui::DragFloat("UI Scale", &ImIO->FontGlobalScale, 0.005f, 0.8f, 5,
|
||||||
"%.2f", ImGuiSliderFlags_AlwaysClamp);
|
"%.2f", ImGuiSliderFlags_AlwaysClamp);
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
|
Loading…
Reference in New Issue
Block a user