diff options
| author | Ryan Houdek <Sonicadvance1@gmail.com> | 2013-11-29 18:37:33 -0600 |
|---|---|---|
| committer | Ryan Houdek <Sonicadvance1@gmail.com> | 2013-11-29 18:37:33 -0600 |
| commit | 49eef423a84c7f9ce3a89eb10b8a43e8416361b4 (patch) | |
| tree | b82c38165f77dfee3313e1b00ff7f93935ab9f9c /Source/Android/src/org | |
| parent | 7f85c3215bb0671f2607204196bcfed77ddc544b (diff) | |
[Android-overlay] Add the new overlay icons. Support configuring them. Disable hardfloat since it has issues since Dalvik doesn't understand passing floats due to ABI differences.
Diffstat (limited to 'Source/Android/src/org')
5 files changed, 76 insertions, 51 deletions
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/emulation/EmulationActivity.java b/Source/Android/src/org/dolphinemu/dolphinemu/emulation/EmulationActivity.java index 9232cfe5fa..bb737a0b7e 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/emulation/EmulationActivity.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/emulation/EmulationActivity.java @@ -37,6 +37,7 @@ public final class EmulationActivity extends Activity private float screenWidth; private float screenHeight; private SharedPreferences sharedPrefs; + public static WindowManager wm; @Override public void onCreate(Bundle savedInstanceState) @@ -45,7 +46,7 @@ public final class EmulationActivity extends Activity // Retrieve screen dimensions. DisplayMetrics displayMetrics = new DisplayMetrics(); - WindowManager wm = getWindowManager(); + wm = getWindowManager(); wm.getDefaultDisplay().getMetrics(displayMetrics); this.screenHeight = displayMetrics.heightPixels; this.screenWidth = displayMetrics.widthPixels; diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/emulation/overlay/InputOverlay.java b/Source/Android/src/org/dolphinemu/dolphinemu/emulation/overlay/InputOverlay.java index 4f34df7dc6..efee6216d0 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/emulation/overlay/InputOverlay.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/emulation/overlay/InputOverlay.java @@ -9,18 +9,25 @@ package org.dolphinemu.dolphinemu.emulation.overlay; import android.content.Context; import android.content.SharedPreferences; import android.content.res.Resources; -import android.graphics.*; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.preference.PreferenceManager; import android.util.AttributeSet; +import android.util.DisplayMetrics; +import android.util.Log; import android.view.MotionEvent; import android.view.SurfaceView; import android.view.View; import android.view.View.OnTouchListener; +import android.view.WindowManager; import org.dolphinemu.dolphinemu.NativeLibrary; import org.dolphinemu.dolphinemu.NativeLibrary.ButtonState; import org.dolphinemu.dolphinemu.NativeLibrary.ButtonType; import org.dolphinemu.dolphinemu.R; +import org.dolphinemu.dolphinemu.emulation.EmulationActivity; import java.util.HashSet; import java.util.Set; @@ -34,6 +41,18 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener private final Set<InputOverlayDrawableButton> overlayButtons = new HashSet<InputOverlayDrawableButton>(); private final Set<InputOverlayDrawableJoystick> overlayJoysticks = new HashSet<InputOverlayDrawableJoystick>(); + public static Bitmap resizeBitmap(WindowManager wm, Context context, Bitmap bitmap, float scale) { + // Retrieve screen dimensions. + DisplayMetrics displayMetrics = new DisplayMetrics(); + wm.getDefaultDisplay().getMetrics(displayMetrics); + + Bitmap bitmapResized = Bitmap.createScaledBitmap(bitmap, + (int)(displayMetrics.heightPixels * scale), + (int)(displayMetrics.heightPixels * scale), + false); + return bitmapResized; + } + /** * Constructor * @@ -45,11 +64,15 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener super(context, attrs); // Add all the overlay items to the HashSet. - overlayButtons.add(initializeOverlayButton(context, R.drawable.button_a, ButtonType.BUTTON_A)); - overlayButtons.add(initializeOverlayButton(context, R.drawable.button_b, ButtonType.BUTTON_B)); - overlayButtons.add(initializeOverlayButton(context, R.drawable.button_start, ButtonType.BUTTON_START)); + overlayButtons.add(initializeOverlayButton(context, R.drawable.gcpad_a, ButtonType.BUTTON_A)); + overlayButtons.add(initializeOverlayButton(context, R.drawable.gcpad_b, ButtonType.BUTTON_B)); + overlayButtons.add(initializeOverlayButton(context, R.drawable.gcpad_x, ButtonType.BUTTON_X)); + overlayButtons.add(initializeOverlayButton(context, R.drawable.gcpad_y, ButtonType.BUTTON_Y)); + overlayButtons.add(initializeOverlayButton(context, R.drawable.gcpad_start, ButtonType.BUTTON_START)); + overlayButtons.add(initializeOverlayButton(context, R.drawable.gcpad_l, ButtonType.TRIGGER_L)); + overlayButtons.add(initializeOverlayButton(context, R.drawable.gcpad_r, ButtonType.TRIGGER_R)); overlayJoysticks.add(initializeOverlayJoystick(context, - R.drawable.joy_outer, R.drawable.joy_inner, + R.drawable.gcpad_joystick_range, R.drawable.gcpad_joystick, ButtonType.STICK_MAIN)); // Set the on touch listener. @@ -88,30 +111,11 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener // TODO: Refactor this so we detect either Axis movements or button presses so we don't run two loops all the time. // int buttonState = (event.getAction() == MotionEvent.ACTION_DOWN) ? ButtonState.PRESSED : ButtonState.RELEASED; + // Check if there was a touch within the bounds of a drawable. for (InputOverlayDrawableButton button : overlayButtons) - { - // Check if there was a touch within the bounds of a drawable. if (button.getBounds().contains((int)event.getX(), (int)event.getY())) - { - switch (button.getId()) - { - case ButtonType.BUTTON_A: - NativeLibrary.onTouchEvent(0, ButtonType.BUTTON_A, buttonState); - break; - - case ButtonType.BUTTON_B: - NativeLibrary.onTouchEvent(0, ButtonType.BUTTON_B, buttonState); - break; - - case ButtonType.BUTTON_START: - NativeLibrary.onTouchEvent(0, ButtonType.BUTTON_START, buttonState); - break; - - default: - break; - } - } - } + NativeLibrary.onTouchEvent(0, button.getId(), buttonState); + for (InputOverlayDrawableJoystick joystick : overlayJoysticks) { @@ -120,9 +124,7 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener float[] axises = joystick.getAxisValues(); for (int a = 0; a < 4; ++a) - { NativeLibrary.onTouchAxisEvent(0, axisIDs[a], axises[a]); - } } return true; @@ -168,7 +170,7 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener final SharedPreferences sPrefs = PreferenceManager.getDefaultSharedPreferences(context); // Initialize the InputOverlayDrawableButton. - final Bitmap bitmap = BitmapFactory.decodeResource(res, resId); + final Bitmap bitmap = resizeBitmap(EmulationActivity.wm, context, BitmapFactory.decodeResource(res, resId), 0.20f); final InputOverlayDrawableButton overlayDrawable = new InputOverlayDrawableButton(res, bitmap, buttonId); // String ID of the Drawable. This is what is passed into SharedPreferences @@ -212,7 +214,7 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener final SharedPreferences sPrefs = PreferenceManager.getDefaultSharedPreferences(context); // Initialize the InputOverlayDrawableJoystick. - final Bitmap bitmapOuter = BitmapFactory.decodeResource(res, resOuter); + final Bitmap bitmapOuter = resizeBitmap(EmulationActivity.wm, context, BitmapFactory.decodeResource(res, resOuter), 0.30f); final Bitmap bitmapInner = BitmapFactory.decodeResource(res, resInner); // String ID of the Drawable. This is what is passed into SharedPreferences @@ -226,7 +228,7 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener // Now set the bounds for the InputOverlayDrawableJoystick. // This will dictate where on the screen (and the what the size) the InputOverlayDrawableJoystick will be. - int outerSize = bitmapOuter.getWidth() + 256; + int outerSize = bitmapOuter.getWidth(); Rect outerRect = new Rect(drawableX, drawableY, drawableX + outerSize, drawableY + outerSize); Rect innerRect = new Rect(0, 0, outerSize / 4, outerSize / 4); diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/emulation/overlay/InputOverlayDrawableJoystick.java b/Source/Android/src/org/dolphinemu/dolphinemu/emulation/overlay/InputOverlayDrawableJoystick.java index 582a8c3f80..791e5812e9 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/emulation/overlay/InputOverlayDrawableJoystick.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/emulation/overlay/InputOverlayDrawableJoystick.java @@ -80,6 +80,7 @@ public final class InputOverlayDrawableJoystick extends BitmapDrawable } } } + if (trackid == -1) return; float touchX = event.getX(); @@ -101,27 +102,15 @@ public final class InputOverlayDrawableJoystick extends BitmapDrawable public float[] getAxisValues() { - float[] joyaxises = new float[4]; + float[] joyaxises = {0f, 0f, 0f, 0f}; if (axises[0] >= 0.0f) - { - joyaxises[0] = 0.0f; joyaxises[1] = Math.min(axises[0], 1.0f); - } else - { joyaxises[0] = Math.min(Math.abs(axises[0]), 1.0f); - joyaxises[1] = 0.0f; - } if (axises[1] >= 0.0) - { - joyaxises[2] = 0.0f; joyaxises[3] = Math.min(axises[1], 1.0f); - } else - { joyaxises[2] = Math.min(Math.abs(axises[1]), 1.0f); - joyaxises[3] = 0.0f; - } return joyaxises; } diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/settings/input/overlayconfig/OverlayConfigActivity.java b/Source/Android/src/org/dolphinemu/dolphinemu/settings/input/overlayconfig/OverlayConfigActivity.java index aaed9a74a7..5158fd683f 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/settings/input/overlayconfig/OverlayConfigActivity.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/settings/input/overlayconfig/OverlayConfigActivity.java @@ -6,6 +6,7 @@ package org.dolphinemu.dolphinemu.settings.input.overlayconfig; +import android.view.WindowManager; import org.dolphinemu.dolphinemu.R; import android.app.Activity; @@ -22,16 +23,28 @@ public final class OverlayConfigActivity extends Activity { super.onCreate(savedInstanceState); + WindowManager wm = getWindowManager(); + // Initialize all of the buttons to add. - final OverlayConfigButton buttonA = new OverlayConfigButton(this, "button_a", R.drawable.button_a); - final OverlayConfigButton buttonB = new OverlayConfigButton(this, "button_b", R.drawable.button_b); - final OverlayConfigButton buttonS = new OverlayConfigButton(this, "button_start", R.drawable.button_start); + final OverlayConfigButton buttonA = new OverlayConfigButton(wm, this, "gcpad_a", R.drawable.gcpad_a); + final OverlayConfigButton buttonB = new OverlayConfigButton(wm, this, "gcpad_b", R.drawable.gcpad_b); + final OverlayConfigButton buttonX = new OverlayConfigButton(wm, this, "gcpad_x", R.drawable.gcpad_x); + final OverlayConfigButton buttonY = new OverlayConfigButton(wm, this, "gcpad_y", R.drawable.gcpad_y); + final OverlayConfigButton buttonS = new OverlayConfigButton(wm, this, "gcpad_start", R.drawable.gcpad_start); + final OverlayConfigButton buttonL = new OverlayConfigButton(wm, this, "gcpad_l", R.drawable.gcpad_l); + final OverlayConfigButton buttonR = new OverlayConfigButton(wm, this, "gcpad_r", R.drawable.gcpad_r); + final OverlayConfigButton joystick = new OverlayConfigButton(wm, this, "gcpad_joystick_range", R.drawable.gcpad_joystick_range); // Add the buttons to the layout final RelativeLayout configLayout = new RelativeLayout(this); configLayout.addView(buttonA); configLayout.addView(buttonB); + configLayout.addView(buttonX); + configLayout.addView(buttonY); configLayout.addView(buttonS); + configLayout.addView(buttonL); + configLayout.addView(buttonR); + configLayout.addView(joystick); // Now set the layout setContentView(configLayout); diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/settings/input/overlayconfig/OverlayConfigButton.java b/Source/Android/src/org/dolphinemu/dolphinemu/settings/input/overlayconfig/OverlayConfigButton.java index 3592664cbd..380369014d 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/settings/input/overlayconfig/OverlayConfigButton.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/settings/input/overlayconfig/OverlayConfigButton.java @@ -8,11 +8,17 @@ package org.dolphinemu.dolphinemu.settings.input.overlayconfig; import android.content.Context; import android.content.SharedPreferences; +import android.graphics.Bitmap; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; import android.preference.PreferenceManager; +import android.util.DisplayMetrics; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; +import android.view.WindowManager; import android.widget.Button; +import org.dolphinemu.dolphinemu.R; /** * A movable {@link Button} for use within the @@ -36,6 +42,18 @@ public final class OverlayConfigButton extends Button implements OnTouchListener // float buttonY = sPrefs.getFloat(buttonId+"-Y", -1f); // private final String buttonId; + private Drawable resizeDrawable(WindowManager wm, Context context, Drawable image, float scale) { + // Retrieve screen dimensions. + DisplayMetrics displayMetrics = new DisplayMetrics(); + wm.getDefaultDisplay().getMetrics(displayMetrics); + + Bitmap b = ((BitmapDrawable)image).getBitmap(); + Bitmap bitmapResized = Bitmap.createScaledBitmap(b, + (int)(displayMetrics.heightPixels * scale), + (int)(displayMetrics.heightPixels * scale), + false); + return new BitmapDrawable(context.getResources(), bitmapResized); + } /** * Constructor @@ -44,7 +62,7 @@ public final class OverlayConfigButton extends Button implements OnTouchListener * @param buttonId the String ID for this button. * @param drawableId the Drawable ID for the image to represent this OverlayConfigButton. */ - public OverlayConfigButton(Context context, String buttonId, int drawableId) + public OverlayConfigButton(WindowManager wm, Context context, String buttonId, int drawableId) { super(context); @@ -55,7 +73,9 @@ public final class OverlayConfigButton extends Button implements OnTouchListener setOnTouchListener(this); // Set the button's icon that represents it. - setBackground(context.getResources().getDrawable(drawableId)); + setBackground(resizeDrawable(wm, context, + context.getResources().getDrawable(drawableId), + drawableId == R.drawable.gcpad_joystick_range ? 0.30f : 0.20f)); // Get the SharedPreferences instance. sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); |
