356 |
356 |
357 function addFinger(x,y: Longword; id: TSDL_FingerId): PTouch_Data; |
357 function addFinger(x,y: Longword; id: TSDL_FingerId): PTouch_Data; |
358 var |
358 var |
359 xCursor, yCursor, index : LongInt; |
359 xCursor, yCursor, index : LongInt; |
360 begin |
360 begin |
361 //Check array sizes |
361 // check array size |
362 if length(fingers) < pointerCount then |
362 // note: pointerCount will be incremented later, |
363 begin |
363 // so at this point it's the index of the new entry |
364 setLength(fingers, length(fingers)*2); |
364 if Length(fingers) <= pointerCount then |
365 for index := length(fingers) div 2 to length(fingers) do |
365 begin |
366 fingers[index].id := nilFingerId; |
366 setLength(fingers, Length(fingers)*2); |
367 end; |
367 for index := Length(fingers) div 2 to (Length(fingers)-1) do |
368 |
368 fingers[index].id := nilFingerId; |
369 xCursor := convertToCursorX(x); |
369 end; |
370 yCursor := convertToCursorY(y); |
370 |
371 |
371 xCursor := convertToCursorX(x); |
372 //on removing fingers, all fingers are moved to the left |
372 yCursor := convertToCursorY(y); |
373 //with dynamic arrays being zero based, the new position of the finger is the old pointerCount |
373 |
374 fingers[pointerCount].id := id; |
374 //on removing fingers, all fingers are moved to the left |
375 fingers[pointerCount].historicalX := xCursor; |
375 //with dynamic arrays being zero based, the new position of the finger is the old pointerCount |
376 fingers[pointerCount].historicalY := yCursor; |
376 fingers[pointerCount].id := id; |
377 fingers[pointerCount].x := xCursor; |
377 fingers[pointerCount].historicalX := xCursor; |
378 fingers[pointerCount].y := yCursor; |
378 fingers[pointerCount].historicalY := yCursor; |
379 fingers[pointerCount].dx := 0; |
379 fingers[pointerCount].x := xCursor; |
380 fingers[pointerCount].dy := 0; |
380 fingers[pointerCount].y := yCursor; |
381 fingers[pointerCount].timeSinceDown:= RealTicks; |
381 fingers[pointerCount].dx := 0; |
382 fingers[pointerCount].pressedWidget:= nil; |
382 fingers[pointerCount].dy := 0; |
383 |
383 fingers[pointerCount].timeSinceDown:= RealTicks; |
384 addFinger:= @fingers[pointerCount]; |
384 fingers[pointerCount].pressedWidget:= nil; |
385 inc(pointerCount); |
385 |
|
386 addFinger:= @fingers[pointerCount]; |
|
387 inc(pointerCount); |
386 end; |
388 end; |
387 |
389 |
388 function updateFinger(x, y, dx, dy: Longword; id: TSDL_FingerId): PTouch_Data; |
390 function updateFinger(x, y, dx, dy: Longword; id: TSDL_FingerId): PTouch_Data; |
389 var finger : PTouch_Data; |
391 var finger : PTouch_Data; |
390 begin |
392 begin |
391 finger:= findFinger(id); |
393 finger:= findFinger(id); |
392 |
394 |
393 if finger <> nil then |
395 if finger <> nil then |
394 begin |
396 begin |
395 finger^.x:= convertToCursorX(x); |
397 finger^.x:= convertToCursorX(x); |
396 finger^.y:= convertToCursorY(y); |
398 finger^.y:= convertToCursorY(y); |
397 finger^.dx:= dx; |
399 finger^.dx:= dx; |
398 finger^.dy:= dy; |
400 finger^.dy:= dy; |
399 end |
401 end |
400 else |
402 else |
401 WriteLnToConsole('finger ' + inttostr(id) + ' not found'); |
403 WriteLnToConsole('finger ' + inttostr(id) + ' not found'); |
402 updateFinger:= finger |
404 updateFinger:= finger |
403 end; |
405 end; |
404 |
406 |
405 procedure deleteFinger(id: TSDL_FingerId); |
407 procedure deleteFinger(id: TSDL_FingerId); |
406 var |
408 var |
407 index : Longword; |
409 index : Longword; |
408 begin |
410 begin |
409 |
411 |
410 dec(pointerCount); |
412 dec(pointerCount); |
411 for index := 0 to pointerCount do |
413 for index := 0 to pointerCount do |
412 begin |
414 begin |
413 if fingers[index].id = id then |
415 if fingers[index].id = id then |
414 begin |
416 begin |
415 |
417 //put the last finger into the spot of the finger to be removed, |
416 //put the last finger into the spot of the finger to be removed, |
418 //so that all fingers are packed to the far left |
417 //so that all fingers are packed to the far left |
419 if pointerCount <> index then |
418 if pointerCount <> index then |
420 begin |
419 begin |
421 fingers[index].id := fingers[pointerCount].id; |
420 fingers[index].id := fingers[pointerCount].id; |
422 fingers[index].x := fingers[pointerCount].x; |
421 fingers[index].x := fingers[pointerCount].x; |
423 fingers[index].y := fingers[pointerCount].y; |
422 fingers[index].y := fingers[pointerCount].y; |
424 fingers[index].historicalX := fingers[pointerCount].historicalX; |
423 fingers[index].historicalX := fingers[pointerCount].historicalX; |
425 fingers[index].historicalY := fingers[pointerCount].historicalY; |
424 fingers[index].historicalY := fingers[pointerCount].historicalY; |
426 fingers[index].timeSinceDown := fingers[pointerCount].timeSinceDown; |
425 fingers[index].timeSinceDown := fingers[pointerCount].timeSinceDown; |
427 fingers[index].pressedWidget := fingers[pointerCount].pressedWidget; |
426 fingers[index].pressedWidget := fingers[pointerCount].pressedWidget; |
428 |
427 |
429 fingers[pointerCount].id := nilFingerId; |
428 fingers[pointerCount].id := 0; |
|
429 end |
430 end |
430 else fingers[index].id := 0; |
431 else |
431 break; |
432 fingers[index].id := nilFingerId; |
|
433 break; |
432 end; |
434 end; |
433 end; |
435 end; |
434 |
436 |
435 end; |
437 end; |
436 |
438 |