mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 06:09:50 -06: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:
@ -51,4 +51,11 @@ Java_org_dolphinemu_dolphinemu_features_input_model_controlleremu_ControlReferen
|
||||
ControlReferenceFromJava(env, obj)->SetExpression(GetJString(env, expr));
|
||||
return result ? ToJString(env, *result) : nullptr;
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL
|
||||
Java_org_dolphinemu_dolphinemu_features_input_model_controlleremu_ControlReference_isInput(
|
||||
JNIEnv* env, jobject obj)
|
||||
{
|
||||
return static_cast<jboolean>(ControlReferenceFromJava(env, obj)->IsInput());
|
||||
}
|
||||
}
|
||||
|
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());
|
||||
}
|
||||
}
|
15
Source/Android/jni/Input/CoreDevice.h
Normal file
15
Source/Android/jni/Input/CoreDevice.h
Normal file
@ -0,0 +1,15 @@
|
||||
// Copyright 2022 Dolphin Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include <jni.h>
|
||||
|
||||
namespace ciface::Core
|
||||
{
|
||||
class Device;
|
||||
}
|
||||
|
||||
jobject CoreDeviceToJava(JNIEnv* env, std::shared_ptr<ciface::Core::Device> device);
|
@ -53,6 +53,19 @@ Java_org_dolphinemu_dolphinemu_features_input_model_MappingCommon_detectInput(
|
||||
ciface::MappingCommon::Quote::On));
|
||||
}
|
||||
|
||||
JNIEXPORT jstring JNICALL
|
||||
Java_org_dolphinemu_dolphinemu_features_input_model_MappingCommon_getExpressionForControl(
|
||||
JNIEnv* env, jclass, jstring j_control, jstring j_device, jstring j_default_device)
|
||||
{
|
||||
ciface::Core::DeviceQualifier device_qualifier, default_device_qualifier;
|
||||
device_qualifier.FromString(GetJString(env, j_device));
|
||||
default_device_qualifier.FromString(GetJString(env, j_default_device));
|
||||
|
||||
return ToJString(env, ciface::MappingCommon::GetExpressionForControl(GetJString(env, j_control),
|
||||
device_qualifier,
|
||||
default_device_qualifier));
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_org_dolphinemu_dolphinemu_features_input_model_MappingCommon_save(JNIEnv* env, jclass)
|
||||
{
|
||||
|
Reference in New Issue
Block a user