aboutsummaryrefslogtreecommitdiff
path: root/src/core/frontend/framebuffer_layout.h
diff options
context:
space:
mode:
authorYuri Kunde Schlesner <yuriks@yuriks.net>2017-05-28 01:01:00 -0700
committerGitHub <noreply@github.com>2017-05-28 01:01:00 -0700
commit4caa2bad9d57c97aa749d3a44f6be6f593bb798b (patch)
treeba001a9832ee8965963d17fd4e93e9222e1153de /src/core/frontend/framebuffer_layout.h
parentec8dfc8fb7218e5c552c42d30a68e13e350c3d0e (diff)
parent7b81903756451281bd1f07d8e9a2dceeff79df08 (diff)
Merge pull request #2733 from yuriks/cmake-cleanup
Dependencies and build system cleanup
Diffstat (limited to 'src/core/frontend/framebuffer_layout.h')
-rw-r--r--src/core/frontend/framebuffer_layout.h64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/core/frontend/framebuffer_layout.h b/src/core/frontend/framebuffer_layout.h
new file mode 100644
index 000000000..9a7738969
--- /dev/null
+++ b/src/core/frontend/framebuffer_layout.h
@@ -0,0 +1,64 @@
+// Copyright 2016 Citra Emulator Project
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include "common/math_util.h"
+
+namespace Layout {
+
+/// Describes the layout of the window framebuffer (size and top/bottom screen positions)
+struct FramebufferLayout {
+ unsigned width;
+ unsigned height;
+ bool top_screen_enabled;
+ bool bottom_screen_enabled;
+ MathUtil::Rectangle<unsigned> top_screen;
+ MathUtil::Rectangle<unsigned> bottom_screen;
+
+ /**
+ * Returns the ration of pixel size of the top screen, compared to the native size of the 3DS
+ * screen.
+ */
+ float GetScalingRatio() const;
+};
+
+/**
+ * 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 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);
+
+/**
+ * Factory method for constructing a Frame with the a 4x size Top screen with a 1x size bottom
+ * screen on the right
+ * 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);
+
+/**
+ * Factory method for constructing a custom FramebufferLayout
+ * @param width Window framebuffer width in pixels
+ * @param height Window framebuffer height in pixels
+ * @return Newly created FramebufferLayout object with default screen regions initialized
+ */
+FramebufferLayout CustomFrameLayout(unsigned width, unsigned height);
+
+} // namespace Layout