@@ -758,7 +758,36 @@ 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+ auto display_type = via::DisplayType::Fit;
762+ auto graphics = Graphics::get ();
763+
764+ if (graphics->m_backbuffer_size .has_value ()) {
765+ const auto & size = graphics->m_backbuffer_size .value ();
766+ const double ratio = static_cast <double >(size[0 ]) / static_cast <double >(size[1 ]);
767+ constexpr double epsilon = 0.01 ;
768+ constexpr double _4_3 = 4.0 / 3.0 ;
769+ constexpr double _16_9 = 16.0 / 9.0 ;
770+ constexpr double _16_10 = 16.0 / 10.0 ;
771+ constexpr double _21_9 = 21.0 / 9.0 ;
772+ constexpr double _32_9 = 32.0 / 9.0 ;
773+ constexpr double _48_9 = 48.0 / 9.0 ;
774+
775+ if (glm::abs (ratio - _4_3) < epsilon) {
776+ display_type = via::DisplayType::Uniform4x3;
777+ } else if (glm::abs (ratio - _16_9) < epsilon) {
778+ display_type = via::DisplayType::Uniform16x9;
779+ } else if (glm::abs (ratio - _16_10) < epsilon) {
780+ display_type = via::DisplayType::Uniform16x10;
781+ } else if (glm::abs (ratio - _21_9) < epsilon) {
782+ display_type = via::DisplayType::Uniform21x9;
783+ } else if (glm::abs (ratio - _32_9) < epsilon) {
784+ display_type = via::DisplayType::Uniform32x9;
785+ } else if (glm::abs (ratio - _48_9) < epsilon) {
786+ display_type = via::DisplayType::Uniform48x9;
787+ }
788+ }
789+
790+ set_display_type_method->call (sdk::get_thread_context (), main_view, display_type);
762791 }
763792}
764793
0 commit comments