diff options
| author | 2015-03-07 17:21:19 -0500 | |
|---|---|---|
| committer | 2015-03-07 17:21:19 -0500 | |
| commit | 9960c49c217d2c1ae202bdacd475c9a47cda39b9 (patch) | |
| tree | a80e07b2ee63c3a081f3b3aec4eb45279b6f9b85 /src/common/emu_window.cpp | |
| parent | Merge pull request #615 from Subv/services (diff) | |
| download | yuzu-9960c49c217d2c1ae202bdacd475c9a47cda39b9.tar.gz yuzu-9960c49c217d2c1ae202bdacd475c9a47cda39b9.tar.xz yuzu-9960c49c217d2c1ae202bdacd475c9a47cda39b9.zip | |
Set framebuffer layout from EmuWindow.
Diffstat (limited to 'src/common/emu_window.cpp')
| -rw-r--r-- | src/common/emu_window.cpp | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/common/emu_window.cpp b/src/common/emu_window.cpp index 48bb35db5..1082ae26d 100644 --- a/src/common/emu_window.cpp +++ b/src/common/emu_window.cpp | |||
| @@ -3,6 +3,7 @@ | |||
| 3 | // Refer to the license.txt file included. | 3 | // Refer to the license.txt file included. |
| 4 | 4 | ||
| 5 | #include "emu_window.h" | 5 | #include "emu_window.h" |
| 6 | #include "video_core/video_core.h" | ||
| 6 | 7 | ||
| 7 | void EmuWindow::KeyPressed(KeyMap::HostDeviceKey key) { | 8 | void EmuWindow::KeyPressed(KeyMap::HostDeviceKey key) { |
| 8 | Service::HID::PadState mapped_key = KeyMap::GetPadKey(key); | 9 | Service::HID::PadState mapped_key = KeyMap::GetPadKey(key); |
| @@ -15,3 +16,52 @@ void EmuWindow::KeyReleased(KeyMap::HostDeviceKey key) { | |||
| 15 | 16 | ||
| 16 | Service::HID::PadButtonRelease(mapped_key); | 17 | Service::HID::PadButtonRelease(mapped_key); |
| 17 | } | 18 | } |
| 19 | |||
| 20 | EmuWindow::FramebufferLayout EmuWindow::FramebufferLayout::DefaultScreenLayout(int width, int height) { | ||
| 21 | ASSERT(width > 0); | ||
| 22 | ASSERT(height > 0); | ||
| 23 | |||
| 24 | EmuWindow::FramebufferLayout res = { width, height, {}, {} }; | ||
| 25 | |||
| 26 | float window_aspect_ratio = static_cast<float>(height) / width; | ||
| 27 | float emulation_aspect_ratio = static_cast<float>(VideoCore::kScreenTopHeight * 2) / | ||
| 28 | VideoCore::kScreenTopWidth; | ||
| 29 | |||
| 30 | if (window_aspect_ratio > emulation_aspect_ratio) { | ||
| 31 | // Window is narrower than the emulation content => apply borders to the top and bottom | ||
| 32 | int viewport_height = static_cast<int>(std::round(emulation_aspect_ratio * width)); | ||
| 33 | |||
| 34 | res.top_screen.left = 0; | ||
| 35 | res.top_screen.right = res.top_screen.left + width; | ||
| 36 | res.top_screen.top = (height - viewport_height) / 2; | ||
| 37 | res.top_screen.bottom = res.top_screen.top + viewport_height / 2; | ||
| 38 | |||
| 39 | int bottom_width = static_cast<int>((static_cast<float>(VideoCore::kScreenBottomWidth) / | ||
| 40 | VideoCore::kScreenTopWidth) * (res.top_screen.right - res.top_screen.left)); | ||
| 41 | int bottom_border = ((res.top_screen.right - res.top_screen.left) - bottom_width) / 2; | ||
| 42 | |||
| 43 | res.bottom_screen.left = bottom_border; | ||
| 44 | res.bottom_screen.right = res.bottom_screen.left + bottom_width; | ||
| 45 | res.bottom_screen.top = res.top_screen.bottom; | ||
| 46 | res.bottom_screen.bottom = res.bottom_screen.top + viewport_height / 2; | ||
| 47 | } else { | ||
| 48 | // Otherwise, apply borders to the left and right sides of the window. | ||
| 49 | int viewport_width = static_cast<int>(std::round(height / emulation_aspect_ratio)); | ||
| 50 | |||
| 51 | res.top_screen.left = (width - viewport_width) / 2; | ||
| 52 | res.top_screen.right = res.top_screen.left + viewport_width; | ||
| 53 | res.top_screen.top = 0; | ||
| 54 | res.top_screen.bottom = res.top_screen.top + height / 2; | ||
| 55 | |||
| 56 | int bottom_width = static_cast<int>((static_cast<float>(VideoCore::kScreenBottomWidth) / | ||
| 57 | VideoCore::kScreenTopWidth) * (res.top_screen.right - res.top_screen.left)); | ||
| 58 | int bottom_border = ((res.top_screen.right - res.top_screen.left) - bottom_width) / 2; | ||
| 59 | |||
| 60 | res.bottom_screen.left = res.top_screen.left + bottom_border; | ||
| 61 | res.bottom_screen.right = res.bottom_screen.left + bottom_width; | ||
| 62 | res.bottom_screen.top = res.top_screen.bottom; | ||
| 63 | res.bottom_screen.bottom = res.bottom_screen.top + height / 2; | ||
| 64 | } | ||
| 65 | |||
| 66 | return res; | ||
| 67 | } | ||