mirror of
https://github.com/izzy2lost/WeeU.git
synced 2026-07-06 00:19:59 -07:00
Added overlay settings
This commit is contained in:
@@ -413,3 +413,107 @@ Java_info_cemu_Cemu_NativeLibrary_onOverlayAxis([[maybe_unused]] JNIEnv* env, [[
|
||||
{
|
||||
s_emulationState.getEmulatedController(controllerIndex).setAxisValue(mappingId, value);
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT jint JNICALL
|
||||
Java_info_cemu_Cemu_NativeLibrary_getOverlayPosition([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz)
|
||||
{
|
||||
return static_cast<jint>(g_config.data().overlay.position);
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT void JNICALL
|
||||
Java_info_cemu_Cemu_NativeLibrary_setOverlayPosition([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jint position)
|
||||
{
|
||||
g_config.data().overlay.position = static_cast<ScreenPosition>(position);
|
||||
g_config.Save();
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT jboolean JNICALL
|
||||
Java_info_cemu_Cemu_NativeLibrary_isOverlayFPSEnabled([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz)
|
||||
{
|
||||
return g_config.data().overlay.fps;
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT void JNICALL
|
||||
Java_info_cemu_Cemu_NativeLibrary_setOverlayFPSEnabled([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jboolean enabled)
|
||||
{
|
||||
g_config.data().overlay.fps = enabled;
|
||||
g_config.Save();
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT jboolean JNICALL
|
||||
Java_info_cemu_Cemu_NativeLibrary_isOverlayDrawCallsPerFrameEnabled([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz)
|
||||
{
|
||||
return g_config.data().overlay.drawcalls;
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT void JNICALL
|
||||
Java_info_cemu_Cemu_NativeLibrary_setOverlayDrawCallsPerFrameEnabled([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jboolean enabled)
|
||||
{
|
||||
g_config.data().overlay.drawcalls = enabled;
|
||||
g_config.Save();
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT jboolean JNICALL
|
||||
Java_info_cemu_Cemu_NativeLibrary_isOverlayCPUUsageEnabled([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz)
|
||||
{
|
||||
return g_config.data().overlay.cpu_usage;
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT void JNICALL
|
||||
Java_info_cemu_Cemu_NativeLibrary_setOverlayCPUUsageEnabled([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jboolean enabled)
|
||||
{
|
||||
g_config.data().overlay.cpu_usage = enabled;
|
||||
g_config.Save();
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT jboolean JNICALL
|
||||
Java_info_cemu_Cemu_NativeLibrary_isOverlayCPUPerCoreUsageEnabled([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz)
|
||||
{
|
||||
return g_config.data().overlay.cpu_per_core_usage;
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT void JNICALL
|
||||
Java_info_cemu_Cemu_NativeLibrary_setOverlayCPUPerCoreUsageEnabled([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jboolean enabled)
|
||||
{
|
||||
g_config.data().overlay.cpu_per_core_usage = enabled;
|
||||
g_config.Save();
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT jboolean JNICALL
|
||||
Java_info_cemu_Cemu_NativeLibrary_isOverlayRAMUsageEnabled([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz)
|
||||
{
|
||||
return g_config.data().overlay.ram_usage;
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT void JNICALL
|
||||
Java_info_cemu_Cemu_NativeLibrary_setOverlayRAMUsageEnabled([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jboolean enabled)
|
||||
{
|
||||
g_config.data().overlay.ram_usage = enabled;
|
||||
g_config.Save();
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT jboolean JNICALL
|
||||
Java_info_cemu_Cemu_NativeLibrary_isOverlayVRAMUsageEnabled([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz)
|
||||
{
|
||||
return g_config.data().overlay.vram_usage;
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT void JNICALL
|
||||
Java_info_cemu_Cemu_NativeLibrary_setOverlayVRAMUsageEnabled([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jboolean enabled)
|
||||
{
|
||||
g_config.data().overlay.vram_usage = enabled;
|
||||
g_config.Save();
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT jboolean JNICALL
|
||||
Java_info_cemu_Cemu_NativeLibrary_isOverlayDebugEnabled([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz)
|
||||
{
|
||||
return g_config.data().overlay.debug;
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT void JNICALL
|
||||
Java_info_cemu_Cemu_NativeLibrary_setOverlayDebugEnabled([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jboolean enabled)
|
||||
{
|
||||
g_config.data().overlay.debug = enabled;
|
||||
g_config.Save();
|
||||
}
|
||||
@@ -95,7 +95,6 @@ public class DPadInput extends Input {
|
||||
iconDpadRightPressed,
|
||||
iconDpadRightNotPressed
|
||||
);
|
||||
Log.i("INPUT", "Dpad reconfigure: " + rect);
|
||||
}
|
||||
|
||||
public DPadInput(Resources resources, @DrawableRes int backgroundId, @DrawableRes int pressedButtonId, @DrawableRes int notPressedButtonId, ButtonStateChangeListener buttonStateChangeListener, InputOverlaySettingsProvider.InputOverlaySettings settings) {
|
||||
|
||||
@@ -29,8 +29,6 @@ public class NativeLibrary {
|
||||
boolean exists(String uri);
|
||||
}
|
||||
|
||||
public static native void setFileSystemCallbacks(FileSystemCallbacks fileSystemCallbacks);
|
||||
|
||||
public static native void setDPI(float dpi);
|
||||
|
||||
public static native void setSurface(Surface surface, boolean isMainCanvas);
|
||||
@@ -383,4 +381,58 @@ public class NativeLibrary {
|
||||
public static native void onOverlayButton(int controllerIndex, int mappingId, boolean value);
|
||||
|
||||
public static native void onOverlayAxis(int controllerIndex, int mappingId, float value);
|
||||
|
||||
static final int OVERLAY_SCREEN_POSITION_DISABLED = 0;
|
||||
static final int OVERLAY_SCREEN_POSITION_TOP_LEFT = 1;
|
||||
static final int OVERLAY_SCREEN_POSITION_TOP_CENTER = 2;
|
||||
static final int OVERLAY_SCREEN_POSITION_TOP_RIGHT = 3;
|
||||
static final int OVERLAY_SCREEN_POSITION_BOTTOM_LEFT = 4;
|
||||
static final int OVERLAY_SCREEN_POSITION_BOTTOM_CENTER = 5;
|
||||
static final int OVERLAY_SCREEN_POSITION_BOTTOM_RIGHT = 6;
|
||||
|
||||
public static int overlayScreenPositionToResourceNameId(int overlayScreenPosition) {
|
||||
return switch (overlayScreenPosition) {
|
||||
case OVERLAY_SCREEN_POSITION_DISABLED -> R.string.overlay_position_disabled;
|
||||
case OVERLAY_SCREEN_POSITION_TOP_LEFT -> R.string.overlay_position_top_left;
|
||||
case OVERLAY_SCREEN_POSITION_TOP_CENTER -> R.string.overlay_position_top_center;
|
||||
case OVERLAY_SCREEN_POSITION_TOP_RIGHT -> R.string.overlay_position_top_right;
|
||||
case OVERLAY_SCREEN_POSITION_BOTTOM_LEFT -> R.string.overlay_position_bottom_left;
|
||||
case OVERLAY_SCREEN_POSITION_BOTTOM_CENTER -> R.string.overlay_position_bottom_center;
|
||||
case OVERLAY_SCREEN_POSITION_BOTTOM_RIGHT -> R.string.overlay_position_bottom_right;
|
||||
default ->
|
||||
throw new RuntimeException("Invalid overlay position: " + overlayScreenPosition);
|
||||
};
|
||||
}
|
||||
|
||||
public static native int getOverlayPosition();
|
||||
|
||||
public static native void setOverlayPosition(int position);
|
||||
|
||||
public static native boolean isOverlayFPSEnabled();
|
||||
|
||||
public static native void setOverlayFPSEnabled(boolean enabled);
|
||||
|
||||
public static native boolean isOverlayDrawCallsPerFrameEnabled();
|
||||
|
||||
public static native void setOverlayDrawCallsPerFrameEnabled(boolean enabled);
|
||||
|
||||
public static native boolean isOverlayCPUUsageEnabled();
|
||||
|
||||
public static native void setOverlayCPUUsageEnabled(boolean enabled);
|
||||
|
||||
public static native boolean isOverlayCPUPerCoreUsageEnabled();
|
||||
|
||||
public static native void setOverlayCPUPerCoreUsageEnabled(boolean enabled);
|
||||
|
||||
public static native boolean isOverlayRAMUsageEnabled();
|
||||
|
||||
public static native void setOverlayRAMUsageEnabled(boolean enabled);
|
||||
|
||||
public static native boolean isOverlayVRAMUsageEnabled();
|
||||
|
||||
public static native void setOverlayVRAMUsageEnabled(boolean enabled);
|
||||
|
||||
public static native boolean isOverlayDebugEnabled();
|
||||
|
||||
public static native void setOverlayDebugEnabled(boolean enabled);
|
||||
}
|
||||
|
||||
@@ -52,6 +52,7 @@ public class OptionsFragment extends Fragment {
|
||||
genericRecyclerViewAdapter.addRecyclerViewItem(new SimpleButtonRecyclerViewItem(getString(R.string.graphics_settings), () -> NavHostFragment.findNavController(OptionsFragment.this).navigate(R.id.action_optionsFragment_to_graphicSettingsFragment)));
|
||||
genericRecyclerViewAdapter.addRecyclerViewItem(new SimpleButtonRecyclerViewItem(getString(R.string.audio_settings), () -> NavHostFragment.findNavController(OptionsFragment.this).navigate(R.id.action_optionsFragment_to_audioSettingsFragment)));
|
||||
genericRecyclerViewAdapter.addRecyclerViewItem(new SimpleButtonRecyclerViewItem(getString(R.string.graphic_packs), () -> NavHostFragment.findNavController(OptionsFragment.this).navigate(R.id.action_optionsFragment_to_graphicPacksRootFragment)));
|
||||
genericRecyclerViewAdapter.addRecyclerViewItem(new SimpleButtonRecyclerViewItem(getString(R.string.overlay), () -> NavHostFragment.findNavController(OptionsFragment.this).navigate(R.id.action_optionsFragment_to_overlaySettingsFragment)));
|
||||
binding.optionsRecyclerView.setAdapter(genericRecyclerViewAdapter);
|
||||
|
||||
return binding.getRoot();
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
package info.cemu.Cemu;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import info.cemu.Cemu.databinding.FragmentOverlaySettingsBinding;
|
||||
|
||||
public class OverlaySettingsFragment extends Fragment {
|
||||
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
FragmentOverlaySettingsBinding binding = FragmentOverlaySettingsBinding.inflate(inflater, container, false);
|
||||
|
||||
GenericRecyclerViewAdapter genericRecyclerViewAdapter = new GenericRecyclerViewAdapter();
|
||||
|
||||
var overlayPositionChoices = Stream.of(
|
||||
NativeLibrary.OVERLAY_SCREEN_POSITION_DISABLED,
|
||||
NativeLibrary.OVERLAY_SCREEN_POSITION_TOP_LEFT,
|
||||
NativeLibrary.OVERLAY_SCREEN_POSITION_TOP_CENTER,
|
||||
NativeLibrary.OVERLAY_SCREEN_POSITION_TOP_RIGHT,
|
||||
NativeLibrary.OVERLAY_SCREEN_POSITION_BOTTOM_LEFT,
|
||||
NativeLibrary.OVERLAY_SCREEN_POSITION_BOTTOM_CENTER,
|
||||
NativeLibrary.OVERLAY_SCREEN_POSITION_BOTTOM_RIGHT)
|
||||
.map(position -> new SelectionAdapter.ChoiceItem<>(t -> t.setText(NativeLibrary.overlayScreenPositionToResourceNameId(position)), position))
|
||||
.collect(Collectors.toList());
|
||||
int overlayPosition = NativeLibrary.getOverlayPosition();
|
||||
SelectionAdapter<Integer> tvChannelsSelectionAdapter = new SelectionAdapter<>(overlayPositionChoices, overlayPosition);
|
||||
SingleSelectionRecyclerViewItem<Integer> tvChannelsModeSelection = new SingleSelectionRecyclerViewItem<>(getString(R.string.overlay_position),
|
||||
getString(NativeLibrary.overlayScreenPositionToResourceNameId(overlayPosition)), tvChannelsSelectionAdapter,
|
||||
(position, selectionRecyclerViewItem) -> {
|
||||
NativeLibrary.setOverlayPosition(position);
|
||||
selectionRecyclerViewItem.setDescription(getString(NativeLibrary.overlayScreenPositionToResourceNameId(position)));
|
||||
});
|
||||
genericRecyclerViewAdapter.addRecyclerViewItem(tvChannelsModeSelection);
|
||||
|
||||
CheckboxRecyclerViewItem overlayFps = new CheckboxRecyclerViewItem(getString(R.string.fps_label),
|
||||
getString(R.string.fps_description), NativeLibrary.isOverlayFPSEnabled(),
|
||||
NativeLibrary::setOverlayFPSEnabled);
|
||||
genericRecyclerViewAdapter.addRecyclerViewItem(overlayFps);
|
||||
|
||||
CheckboxRecyclerViewItem drawCallsCheckbox = new CheckboxRecyclerViewItem(getString(R.string.draw_calls_per_frame_label),
|
||||
getString(R.string.draw_calls_per_frame_label_desription), NativeLibrary.isOverlayDrawCallsPerFrameEnabled(),
|
||||
NativeLibrary::setOverlayDrawCallsPerFrameEnabled);
|
||||
genericRecyclerViewAdapter.addRecyclerViewItem(drawCallsCheckbox);
|
||||
|
||||
CheckboxRecyclerViewItem cpuUsageCheckbox = new CheckboxRecyclerViewItem(getString(R.string.cpu_usage_label),
|
||||
getString(R.string.cpu_usage_description), NativeLibrary.isOverlayCPUUsageEnabled(),
|
||||
NativeLibrary::setOverlayCPUUsageEnabled);
|
||||
genericRecyclerViewAdapter.addRecyclerViewItem(cpuUsageCheckbox);
|
||||
|
||||
CheckboxRecyclerViewItem ramUsageCheckbox = new CheckboxRecyclerViewItem(getString(R.string.ram_usage_label),
|
||||
getString(R.string.ram_usage_description), NativeLibrary.isOverlayRAMUsageEnabled(),
|
||||
NativeLibrary::setOverlayRAMUsageEnabled);
|
||||
genericRecyclerViewAdapter.addRecyclerViewItem(ramUsageCheckbox);
|
||||
|
||||
CheckboxRecyclerViewItem vramUsageCheckbox = new CheckboxRecyclerViewItem(getString(R.string.vram_usage_label),
|
||||
getString(R.string.vram_usage_description), NativeLibrary.isOverlayVRAMUsageEnabled(),
|
||||
NativeLibrary::setOverlayVRAMUsageEnabled);
|
||||
genericRecyclerViewAdapter.addRecyclerViewItem(vramUsageCheckbox);
|
||||
|
||||
binding.audioSettingsRecyclerView.setAdapter(genericRecyclerViewAdapter);
|
||||
|
||||
return binding.getRoot();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".AudioSettingsFragment">
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/audio_settings_recycler_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="8dp"
|
||||
android:orientation="vertical"
|
||||
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
|
||||
|
||||
</FrameLayout>
|
||||
@@ -55,6 +55,9 @@
|
||||
<action
|
||||
android:id="@+id/action_optionsFragment_to_graphicPacksRootFragment"
|
||||
app:destination="@id/graphicPacksRootFragment" />
|
||||
<action
|
||||
android:id="@+id/action_optionsFragment_to_overlaySettingsFragment"
|
||||
app:destination="@id/overlaySettingsFragment" />
|
||||
</fragment>
|
||||
<fragment
|
||||
android:id="@+id/controllerInputsFragment"
|
||||
@@ -70,6 +73,11 @@
|
||||
android:name="info.cemu.Cemu.AudioSettingsFragment"
|
||||
android:label="@string/audio_settings"
|
||||
tools:layout="@layout/fragment_audio_settings" />
|
||||
<fragment
|
||||
android:id="@+id/overlaySettingsFragment"
|
||||
android:name="info.cemu.Cemu.OverlaySettingsFragment"
|
||||
android:label="@string/overlay_settings"
|
||||
tools:layout="@layout/fragment_audio_settings" />
|
||||
<fragment
|
||||
android:id="@+id/inputOverlaySettingsFragment"
|
||||
android:name="info.cemu.Cemu.InputOverlaySettingsFragment"
|
||||
|
||||
@@ -130,4 +130,24 @@
|
||||
<string name="reset_overlay_button_desc">Reset the positions and sizes of the inputs</string>
|
||||
<string name="vibrate">Vibrate</string>
|
||||
<string name="enable_vibrate_on_touch">Enable vibrate on touch</string>
|
||||
<string name="overlay_settings">Overlay settings</string>
|
||||
<string name="overlay_position_disabled">Disabled</string>
|
||||
<string name="overlay_position_top_left">Top left</string>
|
||||
<string name="overlay_position_top_center">Top center</string>
|
||||
<string name="overlay_position_top_right">Top right</string>
|
||||
<string name="overlay_position_bottom_left">Bottom left</string>
|
||||
<string name="overlay_position_bottom_center">Bottom center</string>
|
||||
<string name="overlay_position_bottom_right">Bottom right</string>
|
||||
<string name="overlay_position">Position</string>
|
||||
<string name="overlay">Overlay</string>
|
||||
<string name="fps_label">FPS</string>
|
||||
<string name="fps_description">The number of frames per second. Average over last 5 seconds</string>
|
||||
<string name="draw_calls_per_frame_label">Draw calls per frame</string>
|
||||
<string name="draw_calls_per_frame_label_desription">The number of draw calls per frame. Average over last 5 seconds</string>
|
||||
<string name="cpu_usage_label">CPU usage</string>
|
||||
<string name="cpu_usage_description">CPU usage of Cemu in percent</string>
|
||||
<string name="ram_usage_label">RAM usage</string>
|
||||
<string name="ram_usage_description">Cemu RAM usage in MB</string>
|
||||
<string name="vram_usage_label">VRAM usage</string>
|
||||
<string name="vram_usage_description">The VRAM usage of Cemu in MB</string>
|
||||
</resources>
|
||||
Reference in New Issue
Block a user