diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/NativeLibrary.java b/Source/Android/src/org/dolphinemu/dolphinemu/NativeLibrary.java index 80fcf64ff6..dd4693b347 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/NativeLibrary.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/NativeLibrary.java @@ -17,12 +17,11 @@ public final class NativeLibrary { /** * Handles touch events. - * + * + * @param Button Key code identifying which button was pressed. * @param Action Mask for the action being performed. - * @param X Location on the screen's X-axis that the touch event occurred. - * @param Y Location on the screen's Y-axis that the touch event occurred. */ - public static native void onTouchEvent(int Action, float X, float Y); + public static native void onTouchEvent(int Button, int Action); /** * Handles button press events for a gamepad. diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/emulation/EmulationActivity.java b/Source/Android/src/org/dolphinemu/dolphinemu/emulation/EmulationActivity.java index 1d8b2afe17..dff9d09b22 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/emulation/EmulationActivity.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/emulation/EmulationActivity.java @@ -135,22 +135,6 @@ public final class EmulationActivity extends Activity } } - @Override - public boolean onTouchEvent(MotionEvent event) - { - float X = event.getX(); - float Y = event.getY(); - int Action = event.getActionMasked(); - - // Converts button locations 0 - 1 to OGL screen coords -1.0 - 1.0 - float ScreenX = ((X / screenWidth) * 2.0f) - 1.0f; - float ScreenY = ((Y / screenHeight) * -2.0f) + 1.0f; - - NativeLibrary.onTouchEvent(Action, ScreenX, ScreenY); - - return false; - } - @Override public void onBackPressed() { diff --git a/Source/Core/DolphinWX/Src/Android/ButtonManager.cpp b/Source/Core/DolphinWX/Src/Android/ButtonManager.cpp index 1aa7187075..a80e28f373 100644 --- a/Source/Core/DolphinWX/Src/Android/ButtonManager.cpp +++ b/Source/Core/DolphinWX/Src/Android/ButtonManager.cpp @@ -15,7 +15,7 @@ // Official SVN repository and contact information can be found at // http://code.google.com/p/dolphin-emu/ -#include +#include #include "GLInterface.h" #include "Android/TextureLoader.h" #include "Android/ButtonManager.h" @@ -24,16 +24,8 @@ extern void DrawButton(GLuint tex, float *coords); namespace ButtonManager { - std::vector m_buttons; - std::map m_controllers; - // XXX: This needs to not be here so we can load the locations from file - // This will allow customizable button locations in the future - // These are the OpenGL on screen coordinates - float m_coords[][8] = { // X, Y, X, EY, EX, EY, EX, Y - {0.75f, -1.0f, 0.75f, -0.75f, 1.0f, -0.75f, 1.0f, -1.0f}, // A - {0.50f, -1.0f, 0.50f, -0.75f, 0.75f, -0.75f, 0.75f, -1.0f}, // B - {-0.10f, -1.0f, -0.10f, -0.80f, 0.10f, -0.80f, 0.10f, -1.0f}, // Start - }; + std::unordered_map m_buttons; + std::unordered_map m_controllers; const char *configStrings[] = { "InputA", "InputB", "InputStart", @@ -71,9 +63,17 @@ namespace ButtonManager void Init() { // Initialize our touchscreen buttons - m_buttons.push_back(new Button("ButtonA.png", BUTTON_A, m_coords[0])); - m_buttons.push_back(new Button("ButtonB.png", BUTTON_B, m_coords[1])); - m_buttons.push_back(new Button("ButtonStart.png", BUTTON_START, m_coords[2])); + m_buttons[BUTTON_A] = new Button(); + m_buttons[BUTTON_B] = new Button(); + m_buttons[BUTTON_START] = new Button(); + m_buttons[BUTTON_X] = new Button(); + m_buttons[BUTTON_Y] = new Button(); + m_buttons[BUTTON_Z] = new Button(); + m_buttons[BUTTON_UP] = new Button(); + m_buttons[BUTTON_DOWN] = new Button(); + m_buttons[BUTTON_LEFT] = new Button(); + m_buttons[BUTTON_RIGHT] = new Button(); + // Init our controller bindings IniFile ini; @@ -109,9 +109,7 @@ namespace ButtonManager bool GetButtonPressed(ButtonType button) { bool pressed = false; - for (auto it = m_buttons.begin(); it != m_buttons.end(); ++it) - if ((*it)->GetButtonType() == button) - pressed = (*it)->Pressed(); + pressed = m_buttons[button]->Pressed(); for (auto it = m_controllers.begin(); it != m_controllers.end(); ++it) pressed |= it->second->ButtonValue(button); @@ -125,28 +123,13 @@ namespace ButtonManager return 0.0f; return it->second->AxisValue(axis); } - void TouchEvent(int action, float x, float y) + void TouchEvent(int button, int action) { // Actions // 0 is press // 1 is let go // 2 is move - for (auto it = m_buttons.begin(); it != m_buttons.end(); ++it) - { - float *coords = (*it)->GetCoords(); - if ( x >= coords[0] && - x <= coords[4] && - y >= coords[1] && - y <= coords[3]) - { - if (action == 0) - (*it)->SetState(BUTTON_PRESSED); - if (action == 1) - (*it)->SetState(BUTTON_RELEASED); - if (action == 2) - ; // XXX: Be used later for analog stick - } - } + m_buttons[button]->SetState(action ? BUTTON_RELEASED : BUTTON_PRESSED); } void GamepadEvent(std::string dev, int button, int action) @@ -174,7 +157,7 @@ namespace ButtonManager void Shutdown() { for(auto it = m_buttons.begin(); it != m_buttons.end(); ++it) - delete *it; + delete it->second; for (auto it = m_controllers.begin(); it != m_controllers.end(); ++it) delete it->second; m_controllers.clear(); diff --git a/Source/Core/DolphinWX/Src/Android/ButtonManager.h b/Source/Core/DolphinWX/Src/Android/ButtonManager.h index 39b828efb7..4b284f83d0 100644 --- a/Source/Core/DolphinWX/Src/Android/ButtonManager.h +++ b/Source/Core/DolphinWX/Src/Android/ButtonManager.h @@ -61,32 +61,11 @@ namespace ButtonManager class Button { private: - int m_tex; - ButtonType m_button; ButtonState m_state; - float m_coords[8]; public: - Button(std::string filename, ButtonType button, float *coords) - { - u32 width, height; - char *image; - // image = LoadPNG((std::string(DOLPHIN_DATA_DIR "/") + filename).c_str(), width, height); - // XXX: Make platform specific drawing - - m_button = button; - memcpy(m_coords, coords, sizeof(float) * 8); - m_state = BUTTON_RELEASED; - } - Button(ButtonType button) - { - m_button = button; - m_state = BUTTON_RELEASED; - } + Button() : m_state(BUTTON_RELEASED) {} void SetState(ButtonState state) { m_state = state; } bool Pressed() { return m_state == BUTTON_PRESSED; } - ButtonType GetButtonType() { return m_button; } - GLuint GetTexture() { return m_tex; } - float *GetCoords() { return m_coords; } ~Button() { } }; @@ -131,7 +110,7 @@ namespace ButtonManager void DrawButtons(); bool GetButtonPressed(ButtonType button); float GetAxisValue(ButtonType axis); - void TouchEvent(int action, float x, float y); + void TouchEvent(int button, int action); void GamepadEvent(std::string dev, int button, int action); void GamepadAxisEvent(std::string dev, int axis, float value); void Shutdown(); diff --git a/Source/Core/DolphinWX/Src/MainAndroid.cpp b/Source/Core/DolphinWX/Src/MainAndroid.cpp index 5b8699bb0d..3c0c80871a 100644 --- a/Source/Core/DolphinWX/Src/MainAndroid.cpp +++ b/Source/Core/DolphinWX/Src/MainAndroid.cpp @@ -237,9 +237,9 @@ JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_StopEmulatio Core::Stop(); updateMainFrameEvent.Set(); // Kick the waiting event } -JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_onTouchEvent(JNIEnv *env, jobject obj, jint Action, jfloat X, jfloat Y) +JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_onTouchEvent(JNIEnv *env, jobject obj, jint Button, jint Action) { - ButtonManager::TouchEvent(Action, X, Y); + ButtonManager::TouchEvent(Button, Action); } JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_onGamePadEvent(JNIEnv *env, jobject obj, jstring jDevice, jint Button, jint Action) {