diff --git a/src/common/framebuffer_layout.cpp b/src/common/framebuffer_layout.cpp index e8538dcfd..46c008d9c 100644 --- a/src/common/framebuffer_layout.cpp +++ b/src/common/framebuffer_layout.cpp @@ -14,8 +14,6 @@ static const float TOP_SCREEN_ASPECT_RATIO = static_cast(VideoCore::kScreenTopHeight) / VideoCore::kScreenTopWidth; static const float BOT_SCREEN_ASPECT_RATIO = static_cast(VideoCore::kScreenBottomHeight) / VideoCore::kScreenBottomWidth; -static const float BOT_TO_TOP_SCREEN_RATIO_DIFFERENCE = - BOT_SCREEN_ASPECT_RATIO - TOP_SCREEN_ASPECT_RATIO; // Finds the largest size subrectangle contained in window area that is confined to the aspect ratio template @@ -23,8 +21,8 @@ static MathUtil::Rectangle maxRectangle(MathUtil::Rectangle window_area, float screen_aspect_ratio) { float scale = std::min(static_cast(window_area.GetWidth()), window_area.GetHeight() / screen_aspect_ratio); - return MathUtil::Rectangle{0, 0, static_cast(scale), - static_cast(scale * screen_aspect_ratio)}; + return MathUtil::Rectangle{0, 0, static_cast(std::round(scale)), + static_cast(std::round(scale * screen_aspect_ratio))}; } FramebufferLayout DefaultFrameLayout(unsigned width, unsigned height, bool swapped) { diff --git a/src/common/framebuffer_layout.h b/src/common/framebuffer_layout.h index 7f88c9463..a125646a3 100644 --- a/src/common/framebuffer_layout.h +++ b/src/common/framebuffer_layout.h @@ -20,14 +20,16 @@ struct FramebufferLayout { * Factory method for constructing a default FramebufferLayout * @param width Window framebuffer width in pixels * @param height Window framebuffer height in pixels + * @param is_swapped if true, the bottom screen will be displayed above the top screen * @return Newly created FramebufferLayout object with default screen regions initialized */ FramebufferLayout DefaultFrameLayout(unsigned width, unsigned height, bool is_swapped); /** - * Factory method for constructing a FramebufferLayout with only the top screen + * Factory method for constructing a FramebufferLayout with only the top or bottom screen * @param width Window framebuffer width in pixels * @param height Window framebuffer height in pixels + * @param is_swapped if true, the bottom screen will be displayed (and the top won't be displayed) * @return Newly created FramebufferLayout object with default screen regions initialized */ FramebufferLayout SingleFrameLayout(unsigned width, unsigned height, bool is_swapped); @@ -38,7 +40,8 @@ FramebufferLayout SingleFrameLayout(unsigned width, unsigned height, bool is_swa * This is useful in particular because it matches well with a 1920x1080 resolution monitor * @param width Window framebuffer width in pixels * @param height Window framebuffer height in pixels + * @param is_swapped if true, the bottom screen will be the large display * @return Newly created FramebufferLayout object with default screen regions initialized */ FramebufferLayout LargeFrameLayout(unsigned width, unsigned height, bool is_swapped); -} \ No newline at end of file +} diff --git a/src/common/math_util.h b/src/common/math_util.h index 9e630d93d..cdeaeb733 100644 --- a/src/common/math_util.h +++ b/src/common/math_util.h @@ -45,8 +45,8 @@ struct Rectangle { return Rectangle{left, top + y, right, bottom + y}; } Rectangle Scale(const float s) const { - return Rectangle{left, top, static_cast((right + left) * s), - static_cast((top + bottom) * s)}; + return Rectangle{left, top, static_cast(left + GetWidth() * s), + static_cast(top + GetHeight() * s)}; } };