@@ -114,9 +114,10 @@ private boolean handleOnTouchForPointer(MotionEvent event, int actionMask, int p
114
114
{
115
115
final int pointerId = event .getPointerId (pointerIndex );
116
116
final int pointerType = event .getToolType (pointerIndex );
117
+ final int historySize = event .getHistorySize ();
118
+ final boolean useTiltInfo = pointerType == MotionEvent .TOOL_TYPE_STYLUS ;
117
119
118
120
int inputMode = getInputMode ();
119
-
120
121
if (inputMode == INPUT_MODE_FORCE_PEN )
121
122
{
122
123
iinkPointerType = PointerType .PEN ;
@@ -131,13 +132,9 @@ else if (inputMode == INPUT_MODE_FORCE_TOUCH)
131
132
{
132
133
case MotionEvent .TOOL_TYPE_STYLUS :
133
134
if (inputMode == INPUT_MODE_ERASER )
134
- {
135
135
iinkPointerType = PointerType .ERASER ;
136
- }
137
136
else
138
- {
139
137
iinkPointerType = PointerType .PEN ;
140
- }
141
138
break ;
142
139
case MotionEvent .TOOL_TYPE_FINGER :
143
140
case MotionEvent .TOOL_TYPE_MOUSE :
@@ -150,71 +147,99 @@ else if (inputMode == INPUT_MODE_FORCE_TOUCH)
150
147
}
151
148
152
149
if (isScalingEnabled )
153
- {
154
150
scaleGestureDetector .onTouchEvent (event );
155
- }
156
151
157
152
if (iinkPointerType == PointerType .TOUCH )
158
- {
159
153
gestureDetector .onTouchEvent (event );
160
- }
161
-
162
- int historySize = event .getHistorySize ();
163
154
164
155
switch (actionMask )
165
156
{
166
- // ACTION_POINTER_DOWN is "A non-primary pointer has gone down", this is called only when a pointer is already on the touch .
157
+ // ACTION_POINTER_DOWN is "A non-primary pointer has gone down", only called when a pointer is already on the touchscreen .
167
158
case MotionEvent .ACTION_POINTER_DOWN :
159
+ {
168
160
isMultiFingerTouch = true ;
169
161
if (previousPointerId != -1 )
170
162
{
171
163
editor .pointerCancel (previousPointerId );
172
164
previousPointerId = -1 ;
173
165
}
174
166
return true ;
175
-
167
+ }
176
168
case MotionEvent .ACTION_DOWN :
169
+ {
177
170
previousPointerId = pointerId ;
178
171
isMultiFingerTouch = false ;
179
172
// Request unbuffered events for tools that require low capture latency
180
173
ToolController toolController = editor .getToolController ();
181
174
PointerTool tool = toolController .getToolForType (iinkPointerType );
182
175
if (tool == PointerTool .PEN || tool == PointerTool .HIGHLIGHTER )
183
176
editorView .requestUnbufferedDispatch (event );
177
+
184
178
try
185
179
{
186
- editor .pointerDown (event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (), event .getPressure (), iinkPointerType , pointerId );
180
+ if (useTiltInfo )
181
+ editor .pointerDown (event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (),
182
+ event .getPressure (), event .getAxisValue (MotionEvent .AXIS_TILT , pointerIndex ), event .getAxisValue (MotionEvent .AXIS_ORIENTATION , pointerIndex ), iinkPointerType , pointerId );
183
+ else
184
+ editor .pointerDown (event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (), event .getPressure (), iinkPointerType , pointerId );
187
185
}
188
- catch (UnsupportedOperationException e ) {
186
+ catch (UnsupportedOperationException e ) {
189
187
// Special case: pointerDown already called, discard previous and retry
190
188
editor .pointerCancel (pointerId );
191
- editor .pointerDown (event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (), event .getPressure (), iinkPointerType , pointerId );
189
+ if (useTiltInfo )
190
+ editor .pointerDown (event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (),
191
+ event .getPressure (), event .getAxisValue (MotionEvent .AXIS_TILT , pointerIndex ), event .getAxisValue (MotionEvent .AXIS_ORIENTATION , pointerIndex ), iinkPointerType , pointerId );
192
+ else
193
+ editor .pointerDown (event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (), event .getPressure (), iinkPointerType , pointerId );
192
194
}
193
195
return true ;
194
-
196
+ }
195
197
case MotionEvent .ACTION_MOVE :
198
+ {
196
199
if (isMultiFingerTouch )
197
200
return true ;
198
201
199
202
if (historySize > 0 )
200
203
{
201
204
PointerEvent [] pointerEvents = new PointerEvent [historySize + 1 ];
202
- for (int i = 0 ; i < historySize ; ++i )
203
- pointerEvents [i ] = new PointerEvent (PointerEventType .MOVE , event .getHistoricalX (pointerIndex , i ), event .getHistoricalY (pointerIndex , i ), eventTimeOffset + event .getHistoricalEventTime (i ), event .getHistoricalPressure (pointerIndex , i ), iinkPointerType , pointerId );
204
- pointerEvents [historySize ] = new PointerEvent (PointerEventType .MOVE , event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (), event .getPressure (), iinkPointerType , pointerId );
205
+ if (useTiltInfo )
206
+ {
207
+ for (int i = 0 ; i < historySize ; ++i )
208
+ {
209
+ pointerEvents [i ] = new PointerEvent (PointerEventType .MOVE , event .getHistoricalX (pointerIndex , i ), event .getHistoricalY (pointerIndex , i ), eventTimeOffset + event .getHistoricalEventTime (i ),
210
+ event .getHistoricalPressure (pointerIndex , i ), event .getHistoricalAxisValue (MotionEvent .AXIS_TILT , pointerIndex , i ), event .getHistoricalAxisValue (MotionEvent .AXIS_ORIENTATION , pointerIndex , i ), iinkPointerType , pointerId );
211
+ }
212
+ pointerEvents [historySize ] = new PointerEvent (PointerEventType .MOVE , event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (),
213
+ event .getPressure (), event .getAxisValue (MotionEvent .AXIS_TILT , pointerIndex ), event .getAxisValue (MotionEvent .AXIS_ORIENTATION , pointerIndex ), iinkPointerType , pointerId );
214
+ }
215
+ else
216
+ {
217
+ for (int i = 0 ; i < historySize ; ++i )
218
+ {
219
+ pointerEvents [i ] = new PointerEvent (PointerEventType .MOVE , event .getHistoricalX (pointerIndex , i ), event .getHistoricalY (pointerIndex , i ), eventTimeOffset + event .getHistoricalEventTime (i ),
220
+ event .getHistoricalPressure (pointerIndex , i ), iinkPointerType , pointerId );
221
+ }
222
+ pointerEvents [historySize ] = new PointerEvent (PointerEventType .MOVE , event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (), event .getPressure (), iinkPointerType , pointerId );
223
+ }
205
224
editor .pointerEvents (pointerEvents , true );
206
225
}
207
- else
226
+ else // no history
208
227
{
209
- editor .pointerMove (event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (), event .getPressure (), iinkPointerType , pointerId );
228
+ if (useTiltInfo )
229
+ editor .pointerMove (event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (),
230
+ event .getPressure (), event .getAxisValue (MotionEvent .AXIS_TILT , pointerIndex ), event .getAxisValue (MotionEvent .AXIS_ORIENTATION , pointerIndex ), iinkPointerType , pointerId );
231
+ else
232
+ editor .pointerMove (event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (), event .getPressure (), iinkPointerType , pointerId );
210
233
}
211
234
return true ;
212
-
213
- // ACTION_POINTER_UP is "A non-primary pointer has gone up", at least one finger is still on the touch .
235
+ }
236
+ // ACTION_POINTER_UP is "A non-primary pointer has gone up", at least one finger is still on the touchscreen .
214
237
case MotionEvent .ACTION_POINTER_UP :
238
+ {
215
239
return true ;
216
-
240
+ }
217
241
case MotionEvent .ACTION_UP :
242
+ {
218
243
if (isMultiFingerTouch )
219
244
{
220
245
isMultiFingerTouch = false ;
@@ -223,17 +248,37 @@ else if (inputMode == INPUT_MODE_FORCE_TOUCH)
223
248
if (historySize > 0 )
224
249
{
225
250
PointerEvent [] pointerEvents = new PointerEvent [historySize ];
226
- for (int i = 0 ; i < historySize ; ++i )
227
- pointerEvents [i ] = new PointerEvent (PointerEventType .MOVE , event .getHistoricalX (pointerIndex , i ), event .getHistoricalY (pointerIndex , i ), eventTimeOffset + event .getHistoricalEventTime (i ), event .getHistoricalPressure (pointerIndex , i ), iinkPointerType , pointerId );
251
+ if (useTiltInfo )
252
+ {
253
+ for (int i = 0 ; i < historySize ; ++i )
254
+ {
255
+ pointerEvents [i ] = new PointerEvent (PointerEventType .MOVE , event .getHistoricalX (pointerIndex , i ), event .getHistoricalY (pointerIndex , i ), eventTimeOffset + event .getHistoricalEventTime (i ),
256
+ event .getHistoricalPressure (pointerIndex , i ), event .getHistoricalAxisValue (MotionEvent .AXIS_TILT , pointerIndex , i ), event .getHistoricalAxisValue (MotionEvent .AXIS_ORIENTATION , pointerIndex , i ), iinkPointerType , pointerId );
257
+ }
258
+ }
259
+ else
260
+ {
261
+ for (int i = 0 ; i < historySize ; ++i )
262
+ {
263
+ pointerEvents [i ] = new PointerEvent (PointerEventType .MOVE , event .getHistoricalX (pointerIndex , i ), event .getHistoricalY (pointerIndex , i ), eventTimeOffset + event .getHistoricalEventTime (i ),
264
+ event .getHistoricalPressure (pointerIndex , i ), iinkPointerType , pointerId );
265
+ }
266
+ }
228
267
editor .pointerEvents (pointerEvents , true );
229
268
}
230
- editor .pointerUp (event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (), event .getPressure (), iinkPointerType , pointerId );
231
- return true ;
269
+ if (useTiltInfo )
270
+ editor .pointerUp (event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (),
271
+ event .getPressure (), event .getAxisValue (MotionEvent .AXIS_TILT , pointerIndex ), event .getAxisValue (MotionEvent .AXIS_ORIENTATION , pointerIndex ), iinkPointerType , pointerId );
272
+ else
273
+ editor .pointerUp (event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (), event .getPressure (), iinkPointerType , pointerId );
232
274
275
+ return true ;
276
+ }
233
277
case MotionEvent .ACTION_CANCEL :
278
+ {
234
279
editor .pointerCancel (pointerId );
235
280
return true ;
236
-
281
+ }
237
282
default :
238
283
return false ;
239
284
}
0 commit comments