Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
libSDL
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PocketInsanity
libSDL
Commits
62176df1
Commit
62176df1
authored
Oct 13, 2011
by
Ryan C. Gordon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added support for multitouch on Android.
Fixes Bugzilla #1294. Thanks to Gabriel Jacobo for the patch!
parent
bc138163
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
73 additions
and
24 deletions
+73
-24
SDLActivity.java
android-project/src/org/libsdl/app/SDLActivity.java
+30
-11
SDL_android.cpp
src/core/android/SDL_android.cpp
+2
-1
SDL_androidtouch.c
src/video/android/SDL_androidtouch.c
+40
-11
SDL_androidtouch.h
src/video/android/SDL_androidtouch.h
+1
-1
No files found.
android-project/src/org/libsdl/app/SDLActivity.java
View file @
62176df1
...
...
@@ -93,7 +93,8 @@ public class SDLActivity extends Activity {
public
static
native
void
onNativeResize
(
int
x
,
int
y
,
int
format
);
public
static
native
void
onNativeKeyDown
(
int
keycode
);
public
static
native
void
onNativeKeyUp
(
int
keycode
);
public
static
native
void
onNativeTouch
(
int
action
,
float
x
,
public
static
native
void
onNativeTouch
(
int
touchDevId
,
int
pointerFingerId
,
int
action
,
float
x
,
float
y
,
float
p
);
public
static
native
void
onNativeAccel
(
float
x
,
float
y
,
float
z
);
public
static
native
void
nativeRunAudioThread
();
...
...
@@ -459,16 +460,34 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback,
// Touch events
public
boolean
onTouch
(
View
v
,
MotionEvent
event
)
{
int
action
=
event
.
getAction
();
float
x
=
event
.
getX
();
float
y
=
event
.
getY
();
float
p
=
event
.
getPressure
();
// TODO: Anything else we need to pass?
SDLActivity
.
onNativeTouch
(
action
,
x
,
y
,
p
);
return
true
;
}
{
final
int
touchDevId
=
event
.
getDeviceId
();
final
int
pointerCount
=
event
.
getPointerCount
();
// touchId, pointerId, action, x, y, pressure
int
actionPointerIndex
=
event
.
getActionIndex
();
int
pointerFingerId
=
event
.
getPointerId
(
actionPointerIndex
);
int
action
=
event
.
getActionMasked
();
float
x
=
event
.
getX
(
actionPointerIndex
);
float
y
=
event
.
getY
(
actionPointerIndex
);
float
p
=
event
.
getPressure
(
actionPointerIndex
);
if
(
action
==
MotionEvent
.
ACTION_MOVE
&&
pointerCount
>
1
)
{
// TODO send motion to every pointer if its position has
// changed since prev event.
for
(
int
i
=
0
;
i
<
pointerCount
;
i
++)
{
pointerFingerId
=
event
.
getPointerId
(
i
);
x
=
event
.
getX
(
i
);
y
=
event
.
getY
(
i
);
p
=
event
.
getPressure
(
i
);
SDLActivity
.
onNativeTouch
(
touchDevId
,
pointerFingerId
,
action
,
x
,
y
,
p
);
}
}
else
{
SDLActivity
.
onNativeTouch
(
touchDevId
,
pointerFingerId
,
action
,
x
,
y
,
p
);
}
}
return
true
;
}
// Sensor events
public
void
enableSensor
(
int
sensortype
,
boolean
enabled
)
{
...
...
src/core/android/SDL_android.cpp
View file @
62176df1
...
...
@@ -123,9 +123,10 @@ extern "C" void Java_org_libsdl_app_SDLActivity_onNativeKeyUp(
// Touch
extern
"C"
void
Java_org_libsdl_app_SDLActivity_onNativeTouch
(
JNIEnv
*
env
,
jclass
jcls
,
jint
touch_device_id_in
,
jint
pointer_finger_id_in
,
jint
action
,
jfloat
x
,
jfloat
y
,
jfloat
p
)
{
Android_OnTouch
(
action
,
x
,
y
,
p
);
Android_OnTouch
(
touch_device_id_in
,
pointer_finger_id_in
,
action
,
x
,
y
,
p
);
}
// Accelerometer
...
...
src/video/android/SDL_androidtouch.c
View file @
62176df1
...
...
@@ -24,6 +24,7 @@
#include "SDL_events.h"
#include "../../events/SDL_mouse_c.h"
#include "../../events/SDL_touch_c.h"
#include "SDL_androidtouch.h"
...
...
@@ -33,27 +34,55 @@
#define ACTION_MOVE 2
#define ACTION_CANCEL 3
#define ACTION_OUTSIDE 4
// The following two are deprecated but it seems they are still emitted (instead the corresponding ACTION_UP/DOWN) as of Android 3.2
#define ACTION_POINTER_1_DOWN 5
#define ACTION_POINTER_1_UP 6
void
Android_OnTouch
(
int
action
,
float
x
,
float
y
,
float
p
)
void
Android_OnTouch
(
int
touch_device_id_in
,
int
pointer_finger_id_in
,
int
action
,
float
x
,
float
y
,
float
p
)
{
SDL_TouchID
touchDeviceId
=
0
;
SDL_FingerID
fingerId
=
0
;
if
(
!
Android_Window
)
{
return
;
}
touchDeviceId
=
(
SDL_TouchID
)
touch_device_id_in
;
if
(
!
SDL_GetTouch
(
touchDeviceId
))
{
SDL_Touch
touch
;
memset
(
&
touch
,
0
,
sizeof
(
touch
)
);
touch
.
id
=
touchDeviceId
;
touch
.
x_min
=
0
.
0
f
;
touch
.
x_max
=
(
float
)
Android_ScreenWidth
;
touch
.
native_xres
=
touch
.
x_max
-
touch
.
x_min
;
touch
.
y_min
=
0
.
0
f
;
touch
.
y_max
=
(
float
)
Android_ScreenHeight
;
touch
.
native_yres
=
touch
.
y_max
-
touch
.
y_min
;
touch
.
pressure_min
=
0
.
0
f
;
touch
.
pressure_max
=
1
.
0
f
;
touch
.
native_pressureres
=
touch
.
pressure_max
-
touch
.
pressure_min
;
if
(
SDL_AddTouch
(
&
touch
,
""
)
<
0
)
{
SDL_Log
(
"error: can't add touch %s, %d"
,
__FILE__
,
__LINE__
);
}
}
if
((
action
!=
ACTION_CANCEL
)
&&
(
action
!=
ACTION_OUTSIDE
))
{
SDL_SetMouseFocus
(
Android_Window
);
SDL_SendMouseMotion
(
Android_Window
,
0
,
(
int
)
x
,
(
int
)
y
);
switch
(
action
)
{
fingerId
=
(
SDL_FingerID
)
pointer_finger_id_in
;
switch
(
action
)
{
case
ACTION_DOWN
:
SDL_SendMouseButton
(
Android_Window
,
SDL_PRESSED
,
SDL_BUTTON_LEFT
);
case
ACTION_POINTER_1_DOWN
:
SDL_SendFingerDown
(
touchDeviceId
,
fingerId
,
SDL_TRUE
,
x
,
y
,
p
);
break
;
case
ACTION_MOVE
:
SDL_SendTouchMotion
(
touchDeviceId
,
fingerId
,
SDL_FALSE
,
x
,
y
,
p
);
break
;
case
ACTION_UP
:
SDL_SendMouseButton
(
Android_Window
,
SDL_RELEASED
,
SDL_BUTTON_LEFT
);
case
ACTION_POINTER_1_UP
:
SDL_SendFingerDown
(
touchDeviceId
,
fingerId
,
SDL_FALSE
,
x
,
y
,
p
);
break
;
}
}
else
{
SDL_SetMouseFocus
(
NULL
);
}
default:
break
;
}
}
/* vi: set ts=4 sw=4 expandtab: */
src/video/android/SDL_androidtouch.h
View file @
62176df1
...
...
@@ -22,6 +22,6 @@
#include "SDL_androidvideo.h"
extern
void
Android_OnTouch
(
int
action
,
float
x
,
float
y
,
float
p
);
extern
void
Android_OnTouch
(
int
touch_device_id_in
,
int
pointer_finger_id_in
,
int
action
,
float
x
,
float
y
,
float
p
);
/* vi: set ts=4 sw=4 expandtab: */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment