@@ -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