mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-06-20 09:11:40 +00:00
Android: Add the advanced input mapping dialog
It's missing a lot of features from the PC version for now, like buttons for inserting functions and the ability to see what the expression evaluates to. I mostly just wanted to get something in place so you can set up rumble. Co-authored-by: Charles Lombardo <clombardo169@gmail.com>
This commit is contained in:
parent
42943672bb
commit
c2779aef06
24 changed files with 772 additions and 5 deletions
84
Source/Android/jni/Input/CoreDevice.cpp
Normal file
84
Source/Android/jni/Input/CoreDevice.cpp
Normal file
|
@ -0,0 +1,84 @@
|
|||
// Copyright 2022 Dolphin Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "jni/Input/CoreDevice.h"
|
||||
|
||||
#include <memory>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include <jni.h>
|
||||
|
||||
#include "InputCommon/ControllerInterface/CoreDevice.h"
|
||||
#include "jni/AndroidCommon/AndroidCommon.h"
|
||||
#include "jni/AndroidCommon/IDCache.h"
|
||||
|
||||
static ciface::Core::Device::Control* GetControlPointer(JNIEnv* env, jobject obj)
|
||||
{
|
||||
return reinterpret_cast<ciface::Core::Device::Control*>(
|
||||
env->GetLongField(obj, IDCache::GetCoreDeviceControlPointer()));
|
||||
}
|
||||
|
||||
static jobject CoreDeviceControlToJava(JNIEnv* env, jobject device,
|
||||
ciface::Core::Device::Control* control)
|
||||
{
|
||||
if (!control)
|
||||
return nullptr;
|
||||
|
||||
return env->NewObject(IDCache::GetCoreDeviceControlClass(),
|
||||
IDCache::GetCoreDeviceControlConstructor(), device,
|
||||
reinterpret_cast<jlong>(control));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
static jobjectArray CoreDeviceControlVectorToJava(JNIEnv* env, jobject device,
|
||||
const std::vector<T*>& controls)
|
||||
{
|
||||
return VectorToJObjectArray(
|
||||
env, controls, IDCache::GetCoreDeviceControlClass(),
|
||||
[device](JNIEnv* env, T* control) { return CoreDeviceControlToJava(env, device, control); });
|
||||
}
|
||||
|
||||
static std::shared_ptr<ciface::Core::Device>* GetDevicePointer(JNIEnv* env, jobject obj)
|
||||
{
|
||||
return reinterpret_cast<std::shared_ptr<ciface::Core::Device>*>(
|
||||
env->GetLongField(obj, IDCache::GetCoreDevicePointer()));
|
||||
}
|
||||
|
||||
jobject CoreDeviceToJava(JNIEnv* env, std::shared_ptr<ciface::Core::Device> device)
|
||||
{
|
||||
if (!device)
|
||||
return nullptr;
|
||||
|
||||
return env->NewObject(
|
||||
IDCache::GetCoreDeviceClass(), IDCache::GetCoreDeviceConstructor(),
|
||||
reinterpret_cast<jlong>(new std::shared_ptr<ciface::Core::Device>(std::move(device))));
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
|
||||
JNIEXPORT jstring JNICALL
|
||||
Java_org_dolphinemu_dolphinemu_features_input_model_CoreDevice_00024Control_getName(JNIEnv* env,
|
||||
jobject obj)
|
||||
{
|
||||
return ToJString(env, GetControlPointer(env, obj)->GetName());
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_org_dolphinemu_dolphinemu_features_input_model_CoreDevice_finalize(JNIEnv* env, jobject obj)
|
||||
{
|
||||
delete GetDevicePointer(env, obj);
|
||||
}
|
||||
|
||||
JNIEXPORT jobjectArray JNICALL
|
||||
Java_org_dolphinemu_dolphinemu_features_input_model_CoreDevice_getInputs(JNIEnv* env, jobject obj)
|
||||
{
|
||||
return CoreDeviceControlVectorToJava(env, obj, (*GetDevicePointer(env, obj))->Inputs());
|
||||
}
|
||||
|
||||
JNIEXPORT jobjectArray JNICALL
|
||||
Java_org_dolphinemu_dolphinemu_features_input_model_CoreDevice_getOutputs(JNIEnv* env, jobject obj)
|
||||
{
|
||||
return CoreDeviceControlVectorToJava(env, obj, (*GetDevicePointer(env, obj))->Outputs());
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue