You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-05 12:10:55 +00:00
Android: Add support for cursor icons
This commit is contained in:
@@ -44,11 +44,15 @@ import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.graphics.PixelFormat;
|
||||
import android.opengl.GLSurfaceView;
|
||||
import android.os.Build;
|
||||
import android.view.GestureDetector;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.PointerIcon;
|
||||
import android.view.SurfaceView;
|
||||
|
||||
import androidx.annotation.Keep;
|
||||
|
||||
/**
|
||||
* A simple GLSurfaceView sub-class that demonstrate how to perform
|
||||
* OpenGL ES 2.0 rendering into a GL Surface. Note the following important
|
||||
@@ -72,6 +76,7 @@ public class GodotGLRenderView extends GLSurfaceView implements GodotRenderView
|
||||
private final GodotInputHandler inputHandler;
|
||||
private final GestureDetector detector;
|
||||
private final GodotRenderer godotRenderer;
|
||||
private PointerIcon pointerIcon;
|
||||
|
||||
public GodotGLRenderView(Context context, Godot godot, XRMode xrMode, boolean p_use_32_bits,
|
||||
boolean p_use_debug_opengl) {
|
||||
@@ -83,6 +88,9 @@ public class GodotGLRenderView extends GLSurfaceView implements GodotRenderView
|
||||
this.inputHandler = new GodotInputHandler(this);
|
||||
this.detector = new GestureDetector(context, new GodotGestureHandler(this));
|
||||
this.godotRenderer = new GodotRenderer();
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
pointerIcon = PointerIcon.getSystemIcon(getContext(), PointerIcon.TYPE_DEFAULT);
|
||||
}
|
||||
init(xrMode, false, 16, 0);
|
||||
}
|
||||
|
||||
@@ -149,6 +157,21 @@ public class GodotGLRenderView extends GLSurfaceView implements GodotRenderView
|
||||
return inputHandler.onGenericMotionEvent(event);
|
||||
}
|
||||
|
||||
/**
|
||||
* called from JNI to change pointer icon
|
||||
*/
|
||||
@Keep
|
||||
public void setPointerIcon(int pointerType) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
pointerIcon = PointerIcon.getSystemIcon(getContext(), pointerType);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public PointerIcon onResolvePointerIcon(MotionEvent me, int pointerIndex) {
|
||||
return pointerIcon;
|
||||
}
|
||||
|
||||
private void init(XRMode xrMode, boolean translucent, int depth, int stencil) {
|
||||
setPreserveEGLContextOnPause(true);
|
||||
setFocusableInTouchMode(true);
|
||||
|
||||
@@ -47,4 +47,6 @@ public interface GodotRenderView {
|
||||
abstract public void onBackPressed();
|
||||
|
||||
abstract public GodotInputHandler getInputHandler();
|
||||
|
||||
abstract public void setPointerIcon(int pointerType);
|
||||
}
|
||||
|
||||
@@ -37,17 +37,22 @@ import org.godotengine.godot.vulkan.VkSurfaceView;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.view.GestureDetector;
|
||||
import android.view.InputDevice;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.PointerIcon;
|
||||
import android.view.SurfaceView;
|
||||
|
||||
import androidx.annotation.Keep;
|
||||
|
||||
public class GodotVulkanRenderView extends VkSurfaceView implements GodotRenderView {
|
||||
private final Godot godot;
|
||||
private final GodotInputHandler mInputHandler;
|
||||
private final GestureDetector mGestureDetector;
|
||||
private final VkRenderer mRenderer;
|
||||
private PointerIcon pointerIcon;
|
||||
|
||||
public GodotVulkanRenderView(Context context, Godot godot) {
|
||||
super(context);
|
||||
@@ -56,7 +61,9 @@ public class GodotVulkanRenderView extends VkSurfaceView implements GodotRenderV
|
||||
mInputHandler = new GodotInputHandler(this);
|
||||
mGestureDetector = new GestureDetector(context, new GodotGestureHandler(this));
|
||||
mRenderer = new VkRenderer();
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
pointerIcon = PointerIcon.getSystemIcon(getContext(), PointerIcon.TYPE_DEFAULT);
|
||||
}
|
||||
setFocusableInTouchMode(true);
|
||||
startRenderer(mRenderer);
|
||||
}
|
||||
@@ -124,6 +131,21 @@ public class GodotVulkanRenderView extends VkSurfaceView implements GodotRenderV
|
||||
return mInputHandler.onGenericMotionEvent(event);
|
||||
}
|
||||
|
||||
/**
|
||||
* called from JNI to change pointer icon
|
||||
*/
|
||||
@Keep
|
||||
public void setPointerIcon(int pointerType) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
pointerIcon = PointerIcon.getSystemIcon(getContext(), pointerType);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public PointerIcon onResolvePointerIcon(MotionEvent me, int pointerIndex) {
|
||||
return pointerIcon;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
|
||||
Reference in New Issue
Block a user