diff options
| author | Lioncash <mathew1800@gmail.com> | 2013-10-25 16:52:46 -0400 |
|---|---|---|
| committer | Lioncash <mathew1800@gmail.com> | 2013-10-25 16:52:46 -0400 |
| commit | 9f36081a8f84cbef302a210a4c779250133ec5ba (patch) | |
| tree | d3ec882a7516e34c42333e44f11e51829228820c /Source/Android/src/org | |
| parent | 1267877e80d08a818983cc7b0c01a6f3e5061330 (diff) | |
[Android] Implement a very basic version of the input overlay configuration screen.
Still a bit of a mess, but this will get cleaned up during finalizations.
Diffstat (limited to 'Source/Android/src/org')
10 files changed, 269 insertions, 7 deletions
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/AboutFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/AboutFragment.java index 8b29e607d7..3695bfa40b 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/AboutFragment.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/AboutFragment.java @@ -20,7 +20,7 @@ import android.widget.TextView; import java.util.ArrayList; import java.util.List; -import org.dolphinemu.dolphinemu.settings.VideoSettingsFragment; +import org.dolphinemu.dolphinemu.settings.video.VideoSettingsFragment; /** * Represents the about screen. diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/emulation/EmulationActivity.java b/Source/Android/src/org/dolphinemu/dolphinemu/emulation/EmulationActivity.java index 912fc021c5..8b8f4e0551 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/emulation/EmulationActivity.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/emulation/EmulationActivity.java @@ -21,8 +21,8 @@ import android.view.WindowManager.LayoutParams; import org.dolphinemu.dolphinemu.NativeLibrary; import org.dolphinemu.dolphinemu.R; -import org.dolphinemu.dolphinemu.settings.InputConfigFragment; -import org.dolphinemu.dolphinemu.settings.VideoSettingsFragment; +import org.dolphinemu.dolphinemu.settings.input.InputConfigFragment; +import org.dolphinemu.dolphinemu.settings.video.VideoSettingsFragment; import java.util.List; diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/emulation/overlay/InputOverlay.java b/Source/Android/src/org/dolphinemu/dolphinemu/emulation/overlay/InputOverlay.java new file mode 100644 index 0000000000..c2272fdc5f --- /dev/null +++ b/Source/Android/src/org/dolphinemu/dolphinemu/emulation/overlay/InputOverlay.java @@ -0,0 +1,64 @@ +package org.dolphinemu.dolphinemu.emulation.overlay; + +import java.util.HashSet; +import java.util.Set; + +import android.content.Context; +import android.graphics.Canvas; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.SurfaceView; +import android.view.View; +import android.view.View.OnTouchListener; + +/** + * Draws the interactive input overlay on top of the + * {@link NativeGLSurfaceView} that is rendering emulation. + */ +public final class InputOverlay extends SurfaceView implements OnTouchListener +{ + private final Set<InputOverlayItem> overlayItems = new HashSet<InputOverlayItem>(); + + /** + * Constructor + * + * @param context The current {@link Context}. + * @param attrs {@link AttributeSet} for parsing XML attributes. + */ + public InputOverlay(Context context, AttributeSet attrs) + { + super(context, attrs); + + // Force draw + setWillNotDraw(false); + + // Request focus for the overlay so it has priority on presses. + requestFocus(); + } + + @Override + public boolean onTouch(View v, MotionEvent event) + { + switch (event.getAction()) + { + case MotionEvent.ACTION_DOWN: + { + // TODO: Handle down presses. + return true; + } + } + + return false; + } + + @Override + public void onDraw(Canvas canvas) + { + super.onDraw(canvas); + + for (InputOverlayItem item : overlayItems) + { + item.draw(canvas); + } + } +} diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/emulation/overlay/InputOverlayItem.java b/Source/Android/src/org/dolphinemu/dolphinemu/emulation/overlay/InputOverlayItem.java new file mode 100644 index 0000000000..a45578b263 --- /dev/null +++ b/Source/Android/src/org/dolphinemu/dolphinemu/emulation/overlay/InputOverlayItem.java @@ -0,0 +1,107 @@ +package org.dolphinemu.dolphinemu.emulation.overlay; + +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Rect; +import android.graphics.drawable.BitmapDrawable; + +/** + * Represents a drawable image for the {@link InputOverlay} + */ +public final class InputOverlayItem +{ + // The image as a BitmapDrawable + private BitmapDrawable drawable; + + // Width and height of the underlying image. + private int width; + private int height; + + // X and Y coordinates to display this item at. + private int x; + private int y; + + // Image scale factor. + private float scaleFactor = 1.0f; + + // Rectangle that we draw this item to. + private Rect drawRect; + + /** + * Constructor. + * + * @param res Reference to the app resources for fetching display metrics. + * @param resId Resource ID of the {@link BitmapDrawable} to encapsulate. + */ + public InputOverlayItem(Resources res, int resId) + { + // Idiot-proof the constructor. + if (res == null) + throw new IllegalArgumentException("res cannot be null"); + + // Everything is valid, decode the filename as a bitmap. + drawable = (BitmapDrawable) res.getDrawable(resId); + Bitmap image = drawable.getBitmap(); + + // Set width/height + width = image.getWidth(); + height = image.getHeight(); + + // Initialize rectangle to zero width, height, x, and y. + drawRect = new Rect(); + } + + /** + * Constructor + * + * @param res Reference to the app resources for fetching display metrics. + * @param resId Resource ID of the {@link BitmapDrawable} to encapsulate. + * @param x X coordinate on the screen to place the control. + * @param y Y coordinate on the screen to place the control. + */ + public InputOverlayItem(Resources res, int resId, int x, int y) + { + this(res, resId); + + setPosition(x, y); + } + + /** + * Sets the position of this item on the screen. + * + * @param x New x-coordinate for this image. + * @param y New y-coordinate for this image. + */ + public void setPosition(int x, int y) + { + this.x = x; + this.y = y; + + drawRect.set(x, y, x + (int)(width * scaleFactor), y + (int)(height * scaleFactor)); + drawable.setBounds(drawRect); + } + + /** + * Sets a new scaling factor for the current image. + * + * @param scaleFactor The new scaling factor. Note that 1.0 is normal size. + */ + public void setScaleFactor(float scaleFactor) + { + this.scaleFactor = scaleFactor; + + // Adjust for the new scale factor. + setPosition(x, y); + } + + /** + * Draws this item to a given canvas. + * + * @param canvas The canvas to draw this item to. + */ + public void draw(Canvas canvas) + { + drawable.draw(canvas); + } +} diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/settings/PrefsActivity.java b/Source/Android/src/org/dolphinemu/dolphinemu/settings/PrefsActivity.java index 51153866e1..5368475319 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/settings/PrefsActivity.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/settings/PrefsActivity.java @@ -7,6 +7,9 @@ package org.dolphinemu.dolphinemu.settings; import org.dolphinemu.dolphinemu.R; +import org.dolphinemu.dolphinemu.settings.cpu.CPUSettingsFragment; +import org.dolphinemu.dolphinemu.settings.input.InputConfigFragment; +import org.dolphinemu.dolphinemu.settings.video.VideoSettingsFragment; import android.app.ActionBar; import android.app.ActionBar.Tab; diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/settings/CPUSettingsFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/settings/cpu/CPUSettingsFragment.java index 47f0cb7d35..77caec2b83 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/settings/CPUSettingsFragment.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/settings/cpu/CPUSettingsFragment.java @@ -4,7 +4,7 @@ * Refer to the license.txt file included. */ -package org.dolphinemu.dolphinemu.settings; +package org.dolphinemu.dolphinemu.settings.cpu; import org.dolphinemu.dolphinemu.R; diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/settings/InputConfigFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/settings/input/InputConfigFragment.java index a23f1b4a3f..2ada44ccff 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/settings/InputConfigFragment.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/settings/input/InputConfigFragment.java @@ -4,12 +4,13 @@ * Refer to the license.txt file included. */ -package org.dolphinemu.dolphinemu.settings; +package org.dolphinemu.dolphinemu.settings.input; import android.app.AlertDialog; import android.app.Fragment; import android.content.Context; import android.content.DialogInterface; +import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.preference.Preference; @@ -115,9 +116,17 @@ public final class InputConfigFragment extends PreferenceFragment // Everything is set, show the dialog. dialog.show(); + return true; + } + + if (pref.getKey().equals("inputOverlayConfigPref")) + { + Intent inputOverlayConfig = new Intent(getActivity(), InputOverlayConfigActivity.class); + startActivity(inputOverlayConfig); + return true; } - return true; + return false; } /** diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/settings/input/InputOverlayConfigActivity.java b/Source/Android/src/org/dolphinemu/dolphinemu/settings/input/InputOverlayConfigActivity.java new file mode 100644 index 0000000000..3084c181d1 --- /dev/null +++ b/Source/Android/src/org/dolphinemu/dolphinemu/settings/input/InputOverlayConfigActivity.java @@ -0,0 +1,27 @@ +/** + * Copyright 2013 Dolphin Emulator Project + * Licensed under GPLv2 + * Refer to the license.txt file included. + */ + +package org.dolphinemu.dolphinemu.settings.input; + +import org.dolphinemu.dolphinemu.R; + +import android.app.Activity; +import android.os.Bundle; + +/** + * {@link Activity} used for configuring the input overlay. + */ +public final class InputOverlayConfigActivity extends Activity +{ + @Override + public void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + + // Set the initial layout. + setContentView(R.layout.input_overlay_config_layout); + } +} diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/settings/input/InputOverlayConfigButton.java b/Source/Android/src/org/dolphinemu/dolphinemu/settings/input/InputOverlayConfigButton.java new file mode 100644 index 0000000000..cca596e85c --- /dev/null +++ b/Source/Android/src/org/dolphinemu/dolphinemu/settings/input/InputOverlayConfigButton.java @@ -0,0 +1,52 @@ +/** + * Copyright 2013 Dolphin Emulator Project + * Licensed under GPLv2 + * Refer to the license.txt file included. + */ + +package org.dolphinemu.dolphinemu.settings.input; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnTouchListener; +import android.widget.Button; + +/** + * A movable {@link Button} for use within the + * input overlay configuration screen. + */ +public final class InputOverlayConfigButton extends Button implements OnTouchListener +{ + /** + * Constructor + * + * @param context The current {@link Context}. + * @param attribs {@link AttributeSet} for parsing XML attributes. + */ + public InputOverlayConfigButton(Context context, AttributeSet attribs) + { + super(context, attribs); + + // Set the button as its own OnTouchListener. + setOnTouchListener(this); + } + + @Override + public boolean onTouch(View v, MotionEvent event) + { + switch(event.getAction()) + { + // Only change the X/Y coordinates when we move the button. + case MotionEvent.ACTION_MOVE: + { + setX(getX() + event.getX()); + setY(getY() + event.getY()); + return true; + } + } + + return false; + } +} diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/settings/VideoSettingsFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/settings/video/VideoSettingsFragment.java index fffea888a7..47f9ef475f 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/settings/VideoSettingsFragment.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/settings/video/VideoSettingsFragment.java @@ -4,7 +4,7 @@ * Refer to the license.txt file included. */ -package org.dolphinemu.dolphinemu.settings; +package org.dolphinemu.dolphinemu.settings.video; import android.app.Activity; import android.content.SharedPreferences; |
