aboutsummaryrefslogtreecommitdiff
path: root/src/frontend/FrontendUtil.h
diff options
context:
space:
mode:
authorRSDuck <RSDuck@users.noreply.github.com>2023-07-29 21:27:28 +0200
committerRSDuck <RSDuck@users.noreply.github.com>2023-07-29 21:27:28 +0200
commit3efbf1b813e40c02e3e12488712f33bb0b63f468 (patch)
tree3b5cbca73ca0e7ba20361594ab62a2fa869b601b /src/frontend/FrontendUtil.h
parent8fd46e5f8ccc4fe152bef2059114f6373030d63c (diff)
a bit of frontend refactoring
Diffstat (limited to 'src/frontend/FrontendUtil.h')
-rw-r--r--src/frontend/FrontendUtil.h218
1 files changed, 119 insertions, 99 deletions
diff --git a/src/frontend/FrontendUtil.h b/src/frontend/FrontendUtil.h
index 91f5d88..51f8f61 100644
--- a/src/frontend/FrontendUtil.h
+++ b/src/frontend/FrontendUtil.h
@@ -1,99 +1,119 @@
-/*
- Copyright 2016-2022 melonDS team
-
- This file is part of melonDS.
-
- melonDS is free software: you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation, either version 3 of the License, or (at your option)
- any later version.
-
- melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with melonDS. If not, see http://www.gnu.org/licenses/.
-*/
-
-#ifndef FRONTENDUTIL_H
-#define FRONTENDUTIL_H
-
-#include "types.h"
-
-#include <string>
-#include <vector>
-
-namespace Frontend
-{
-
-// setup the display layout based on the provided display size and parameters
-// * screenWidth/screenHeight: size of the host display
-// * screenLayout: how the DS screens are laid out
-// 0 = natural (top screen above bottom screen always)
-// 1 = vertical
-// 2 = horizontal
-// 3 = hybrid
-// * rotation: angle at which the DS screens are presented: 0/1/2/3 = 0/90/180/270
-// * sizing: how the display size is shared between the two screens
-// 0 = even (both screens get same size)
-// 1 = emphasize top screen (make top screen as big as possible, fit bottom screen in remaining space)
-// 2 = emphasize bottom screen
-// 4 = top only
-// 5 = bottom only
-// * screenGap: size of the gap between the two screens
-// * integerScale: force screens to be scaled up at integer scaling factors
-// * screenSwap: whether to swap the position of both screens
-// * topAspect/botAspect: ratio by which to scale the top and bottom screen respectively
-void SetupScreenLayout(int screenWidth, int screenHeight,
- int screenLayout,
- int rotation,
- int sizing,
- int screenGap,
- bool integerScale,
- bool swapScreens,
- float topAspect, float botAspect);
-
-const int MaxScreenTransforms = 3;
-
-// get a 2x3 transform matrix for each screen and whether it's a top or bottom screen
-// note: the transform assumes an origin point at the top left of the display,
-// X going right and Y going down
-// for each screen the source coordinates should be (0,0) and (256,192)
-// 'out' should point to an array of 6*MaxScreenTransforms floats
-// 'kind' should point to an array of MaxScreenTransforms ints
-// (0 = indicates top screen, 1 = bottom screen)
-// returns the amount of screens
-int GetScreenTransforms(float* out, int* kind);
-
-// de-transform the provided host display coordinates to get coordinates
-// on the bottom screen
-bool GetTouchCoords(int& x, int& y, bool clamp);
-
-
-// initialize the audio utility
-void Init_Audio(int outputfreq);
-
-// get how many samples to read from the core audio output
-// based on how many are needed by the frontend (outlen in samples)
-int AudioOut_GetNumSamples(int outlen);
-
-// resample audio from the core audio output to match the frontend's
-// output frequency, and apply specified volume
-// note: this assumes the output buffer is interleaved stereo
-void AudioOut_Resample(s16* inbuf, int inlen, s16* outbuf, int outlen, int volume);
-
-// feed silence to the microphone input
-void Mic_FeedSilence();
-
-// feed random noise to the microphone input
-void Mic_FeedNoise();
-
-// feed an external buffer to the microphone input
-// buffer should be mono
-void Mic_FeedExternalBuffer();
-void Mic_SetExternalBuffer(s16* buffer, u32 len);
-
-}
-
-#endif // FRONTENDUTIL_H
+/*
+ Copyright 2016-2022 melonDS team
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef FRONTENDUTIL_H
+#define FRONTENDUTIL_H
+
+#include "types.h"
+
+#include <string>
+#include <vector>
+
+namespace Frontend
+{
+
+enum ScreenLayout
+{
+ screenLayout_Natural, // top screen above bottom screen always
+ screenLayout_Horizontal,
+ screenLayout_Vertical,
+ screenLayout_Hybrid,
+ screenLayout_MAX,
+};
+
+enum ScreenRotation
+{
+ screenRot_0Deg,
+ screenRot_90Deg,
+ screenRot_180Deg,
+ screenRot_270Deg,
+ screenRot_MAX,
+};
+
+enum ScreenSizing
+{
+ screenSizing_Even, // both screens get same size
+ screenSizing_EmphTop, // make top screen as big as possible, fit bottom screen in remaining space
+ screenSizing_EmphBot,
+ screenSizing_Auto, // not applied in SetupScreenLayout
+ screenSizing_TopOnly,
+ screenSizing_BotOnly,
+ screenSizing_MAX,
+};
+
+// setup the display layout based on the provided display size and parameters
+// * screenWidth/screenHeight: size of the host display
+// * screenLayout: how the DS screens are laid out
+// * rotation: angle at which the DS screens are presented
+// * sizing: how the display size is shared between the two screens
+// * screenGap: size of the gap between the two screens in pixels
+// * integerScale: force screens to be scaled up at integer scaling factors
+// * screenSwap: whether to swap the position of both screens
+// * topAspect/botAspect: ratio by which to scale the top and bottom screen respectively
+void SetupScreenLayout(int screenWidth, int screenHeight,
+ ScreenLayout screenLayout,
+ ScreenRotation rotation,
+ ScreenSizing sizing,
+ int screenGap,
+ bool integerScale,
+ bool swapScreens,
+ float topAspect, float botAspect);
+
+const int MaxScreenTransforms = 3;
+
+// get a 2x3 transform matrix for each screen and whether it's a top or bottom screen
+// note: the transform assumes an origin point at the top left of the display,
+// X going right and Y going down
+// for each screen the source coordinates should be (0,0) and (256,192)
+// 'out' should point to an array of 6*MaxScreenTransforms floats
+// 'kind' should point to an array of MaxScreenTransforms ints
+// (0 = indicates top screen, 1 = bottom screen)
+// returns the amount of screens
+int GetScreenTransforms(float* out, int* kind);
+
+// de-transform the provided host display coordinates to get coordinates
+// on the bottom screen
+bool GetTouchCoords(int& x, int& y, bool clamp);
+
+
+// initialize the audio utility
+void Init_Audio(int outputfreq);
+
+// get how many samples to read from the core audio output
+// based on how many are needed by the frontend (outlen in samples)
+int AudioOut_GetNumSamples(int outlen);
+
+// resample audio from the core audio output to match the frontend's
+// output frequency, and apply specified volume
+// note: this assumes the output buffer is interleaved stereo
+void AudioOut_Resample(s16* inbuf, int inlen, s16* outbuf, int outlen, int volume);
+
+// feed silence to the microphone input
+void Mic_FeedSilence();
+
+// feed random noise to the microphone input
+void Mic_FeedNoise();
+
+// feed an external buffer to the microphone input
+// buffer should be mono
+void Mic_FeedExternalBuffer();
+void Mic_SetExternalBuffer(s16* buffer, u32 len);
+
+}
+
+#endif // FRONTENDUTIL_H