From 793339b73a9bc87d6fa22742be4631565c2201db Mon Sep 17 00:00:00 2001 From: James Rowe Date: Thu, 10 Nov 2016 00:36:07 -0700 Subject: [PATCH] Round the rectangle size to prevent float to int casting issues And other minor style changes --- src/common/framebuffer_layout.cpp | 6 ++---- src/common/framebuffer_layout.h | 7 +++++-- src/common/math_util.h | 4 ++-- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/common/framebuffer_layout.cpp b/src/common/framebuffer_layout.cpp index e8538dcfd5..46c008d9cb 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 7f88c94630..a125646a32 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 9e630d93df..cdeaeb7333 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)}; } };