committed by
bunnei
2 changed files with 118 additions and 139 deletions
-
139src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/InputOverlayDrawableButton.java
-
118src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/InputOverlayDrawableButton.kt
@ -1,139 +0,0 @@ |
|||
/** |
|||
* Copyright 2013 Dolphin Emulator Project |
|||
* Licensed under GPLv2+ |
|||
* Refer to the license.txt file included. |
|||
*/ |
|||
|
|||
package org.yuzu.yuzu_emu.overlay; |
|||
|
|||
import android.content.res.Resources; |
|||
import android.graphics.Bitmap; |
|||
import android.graphics.Canvas; |
|||
import android.graphics.Rect; |
|||
import android.graphics.drawable.BitmapDrawable; |
|||
import android.view.MotionEvent; |
|||
|
|||
import org.yuzu.yuzu_emu.NativeLibrary.ButtonState; |
|||
|
|||
|
|||
/** |
|||
* Custom {@link BitmapDrawable} that is capable |
|||
* of storing it's own ID. |
|||
*/ |
|||
public final class InputOverlayDrawableButton { |
|||
// The ID value what type of button this Drawable represents. |
|||
private int mButtonId; |
|||
|
|||
// The ID value what motion event is tracking |
|||
private int mTrackId; |
|||
|
|||
// The drawable position on the screen |
|||
private int mButtonPositionX, mButtonPositionY; |
|||
private int mWidth; |
|||
private int mHeight; |
|||
private BitmapDrawable mDefaultStateBitmap; |
|||
private BitmapDrawable mPressedStateBitmap; |
|||
private boolean mPressedState = false; |
|||
|
|||
/** |
|||
* Constructor |
|||
* |
|||
* @param res {@link Resources} instance. |
|||
* @param defaultStateBitmap {@link Bitmap} to use with the default state Drawable. |
|||
* @param pressedStateBitmap {@link Bitmap} to use with the pressed state Drawable. |
|||
* @param buttonId Identifier for this type of button. |
|||
*/ |
|||
public InputOverlayDrawableButton(Resources res, Bitmap defaultStateBitmap, |
|||
Bitmap pressedStateBitmap, int buttonId) { |
|||
mDefaultStateBitmap = new BitmapDrawable(res, defaultStateBitmap); |
|||
mPressedStateBitmap = new BitmapDrawable(res, pressedStateBitmap); |
|||
mButtonId = buttonId; |
|||
mTrackId = -1; |
|||
|
|||
mWidth = mDefaultStateBitmap.getIntrinsicWidth(); |
|||
mHeight = mDefaultStateBitmap.getIntrinsicHeight(); |
|||
} |
|||
|
|||
/** |
|||
* Updates button status based on the motion event. |
|||
* |
|||
* @return true if value was changed |
|||
*/ |
|||
public boolean updateStatus(MotionEvent event) { |
|||
int pointerIndex = event.getActionIndex(); |
|||
int xPosition = (int) event.getX(pointerIndex); |
|||
int yPosition = (int) event.getY(pointerIndex); |
|||
int pointerId = event.getPointerId(pointerIndex); |
|||
int motion_event = event.getAction() & MotionEvent.ACTION_MASK; |
|||
boolean isActionDown = motion_event == MotionEvent.ACTION_DOWN || motion_event == MotionEvent.ACTION_POINTER_DOWN; |
|||
boolean isActionUp = motion_event == MotionEvent.ACTION_UP || motion_event == MotionEvent.ACTION_POINTER_UP; |
|||
boolean current_state = mPressedState; |
|||
|
|||
if (isActionDown) { |
|||
if (!getBounds().contains(xPosition, yPosition)) { |
|||
return false; |
|||
} |
|||
mPressedState = true; |
|||
mTrackId = pointerId; |
|||
return true; |
|||
} |
|||
|
|||
if (isActionUp) { |
|||
if (mTrackId != pointerId) { |
|||
return false; |
|||
} |
|||
mPressedState = false; |
|||
mTrackId = -1; |
|||
return true; |
|||
} |
|||
|
|||
return false; |
|||
} |
|||
|
|||
public void setPosition(int x, int y) { |
|||
mButtonPositionX = x; |
|||
mButtonPositionY = y; |
|||
} |
|||
|
|||
public void draw(Canvas canvas) { |
|||
getCurrentStateBitmapDrawable().draw(canvas); |
|||
} |
|||
|
|||
private BitmapDrawable getCurrentStateBitmapDrawable() { |
|||
return mPressedState ? mPressedStateBitmap : mDefaultStateBitmap; |
|||
} |
|||
|
|||
public void setBounds(int left, int top, int right, int bottom) { |
|||
mDefaultStateBitmap.setBounds(left, top, right, bottom); |
|||
mPressedStateBitmap.setBounds(left, top, right, bottom); |
|||
} |
|||
|
|||
/** |
|||
* Gets this InputOverlayDrawableButton's button ID. |
|||
* |
|||
* @return this InputOverlayDrawableButton's button ID. |
|||
*/ |
|||
public int getId() { |
|||
return mButtonId; |
|||
} |
|||
|
|||
public int getTrackId() { |
|||
return mTrackId; |
|||
} |
|||
|
|||
public int getStatus() { |
|||
return mPressedState ? ButtonState.PRESSED : ButtonState.RELEASED; |
|||
} |
|||
|
|||
private Rect getBounds() { |
|||
return mDefaultStateBitmap.getBounds(); |
|||
} |
|||
|
|||
public int getWidth() { |
|||
return mWidth; |
|||
} |
|||
|
|||
public int getHeight() { |
|||
return mHeight; |
|||
} |
|||
} |
|||
@ -0,0 +1,118 @@ |
|||
/** |
|||
* Copyright 2013 Dolphin Emulator Project |
|||
* Licensed under GPLv2+ |
|||
* Refer to the license.txt file included. |
|||
*/ |
|||
package org.yuzu.yuzu_emu.overlay |
|||
|
|||
import android.content.res.Resources |
|||
import android.graphics.Bitmap |
|||
import android.graphics.Canvas |
|||
import android.graphics.Rect |
|||
import android.graphics.drawable.BitmapDrawable |
|||
import android.view.MotionEvent |
|||
import org.yuzu.yuzu_emu.NativeLibrary.ButtonState |
|||
|
|||
/** |
|||
* Custom [BitmapDrawable] that is capable |
|||
* of storing it's own ID. |
|||
* |
|||
* @param res [Resources] instance. |
|||
* @param defaultStateBitmap [Bitmap] to use with the default state Drawable. |
|||
* @param pressedStateBitmap [Bitmap] to use with the pressed state Drawable. |
|||
* @param buttonId Identifier for this type of button. |
|||
*/ |
|||
class InputOverlayDrawableButton( |
|||
res: Resources, |
|||
defaultStateBitmap: Bitmap, |
|||
pressedStateBitmap: Bitmap, |
|||
buttonId: Int |
|||
) { |
|||
/** |
|||
* Gets this InputOverlayDrawableButton's button ID. |
|||
* |
|||
* @return this InputOverlayDrawableButton's button ID. |
|||
*/ |
|||
// The ID value what type of button this Drawable represents. |
|||
val id: Int |
|||
|
|||
// The ID value what motion event is tracking |
|||
var trackId: Int |
|||
|
|||
// The drawable position on the screen |
|||
private var buttonPositionX = 0 |
|||
private var buttonPositionY = 0 |
|||
val width: Int |
|||
val height: Int |
|||
private val defaultStateBitmap: BitmapDrawable |
|||
private val pressedStateBitmap: BitmapDrawable |
|||
private var pressedState = false |
|||
|
|||
init { |
|||
this.defaultStateBitmap = BitmapDrawable(res, defaultStateBitmap) |
|||
this.pressedStateBitmap = BitmapDrawable(res, pressedStateBitmap) |
|||
id = buttonId |
|||
trackId = -1 |
|||
width = this.defaultStateBitmap.intrinsicWidth |
|||
height = this.defaultStateBitmap.intrinsicHeight |
|||
} |
|||
|
|||
/** |
|||
* Updates button status based on the motion event. |
|||
* |
|||
* @return true if value was changed |
|||
*/ |
|||
fun updateStatus(event: MotionEvent): Boolean { |
|||
val pointerIndex = event.actionIndex |
|||
val xPosition = event.getX(pointerIndex).toInt() |
|||
val yPosition = event.getY(pointerIndex).toInt() |
|||
val pointerId = event.getPointerId(pointerIndex) |
|||
val motionEvent = event.action and MotionEvent.ACTION_MASK |
|||
val isActionDown = |
|||
motionEvent == MotionEvent.ACTION_DOWN || motionEvent == MotionEvent.ACTION_POINTER_DOWN |
|||
val isActionUp = |
|||
motionEvent == MotionEvent.ACTION_UP || motionEvent == MotionEvent.ACTION_POINTER_UP |
|||
|
|||
if (isActionDown) { |
|||
if (!bounds.contains(xPosition, yPosition)) { |
|||
return false |
|||
} |
|||
pressedState = true |
|||
trackId = pointerId |
|||
return true |
|||
} |
|||
|
|||
if (isActionUp) { |
|||
if (trackId != pointerId) { |
|||
return false |
|||
} |
|||
pressedState = false |
|||
trackId = -1 |
|||
return true |
|||
} |
|||
|
|||
return false |
|||
} |
|||
|
|||
fun setPosition(x: Int, y: Int) { |
|||
buttonPositionX = x |
|||
buttonPositionY = y |
|||
} |
|||
|
|||
fun draw(canvas: Canvas?) { |
|||
currentStateBitmapDrawable.draw(canvas!!) |
|||
} |
|||
|
|||
private val currentStateBitmapDrawable: BitmapDrawable |
|||
get() = if (pressedState) pressedStateBitmap else defaultStateBitmap |
|||
|
|||
fun setBounds(left: Int, top: Int, right: Int, bottom: Int) { |
|||
defaultStateBitmap.setBounds(left, top, right, bottom) |
|||
pressedStateBitmap.setBounds(left, top, right, bottom) |
|||
} |
|||
|
|||
val status: Int |
|||
get() = if (pressedState) ButtonState.PRESSED else ButtonState.RELEASED |
|||
private val bounds: Rect |
|||
get() = defaultStateBitmap.bounds |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue