Skip to content

Commit 307c594

Browse files
authored
Ultrawide: possible 16:10 cursor displacement fix (#1308)
1 parent 26dd8ea commit 307c594

File tree

1 file changed

+32
-1
lines changed

1 file changed

+32
-1
lines changed

src/mods/Graphics.cpp

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -758,7 +758,38 @@ void Graphics::do_ultrawide_fix() {
758758
// This disables any kind of pillarboxing and letterboxing.
759759
// This cannot be directly restored once applied.
760760
if (set_display_type_method != nullptr) {
761-
set_display_type_method->call(sdk::get_thread_context(), main_view, via::DisplayType::Fit);
761+
762+
via::DisplayType display_type = via::DisplayType::Fit;
763+
764+
auto graphics = Graphics::get();
765+
766+
if(graphics->m_backbuffer_size.has_value()){
767+
std::array<uint32_t, 2> size = graphics->m_backbuffer_size.value();
768+
769+
double ratio = static_cast<double>(size[0])/static_cast<double>(size[1]);
770+
constexpr double epsilon = 0.01;
771+
772+
if(std::fabs(ratio - 4.0 / 3.0) < epsilon){
773+
display_type = via::DisplayType::Uniform4x3;
774+
}
775+
if(std::fabs(ratio - 16.0 / 9.0) < epsilon){
776+
display_type = via::DisplayType::Uniform16x9;
777+
}
778+
if(std::fabs(ratio - 16.0 / 10.0) < epsilon){
779+
display_type = via::DisplayType::Uniform16x10;
780+
}
781+
if(std::fabs(ratio - 21.0 / 9.0) < epsilon){
782+
display_type = via::DisplayType::Uniform21x9;
783+
}
784+
if(std::fabs(ratio - 32.0 / 9.0) < epsilon){
785+
display_type = via::DisplayType::Uniform32x9;
786+
}
787+
if(std::fabs(ratio - 48.0 / 9.0) < epsilon){
788+
display_type = via::DisplayType::Uniform48x9;
789+
}
790+
}
791+
792+
set_display_type_method->call(sdk::get_thread_context(), main_view, display_type);
762793
}
763794
}
764795

0 commit comments

Comments
 (0)