android: Convert InputOverlayDrawableButton to Kotlin
This commit is contained in:
		@@ -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
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user