Optimize gesture preview trail drawing a bit

This change also change the fading out duration of the gesture
preview trail to 800msec from 1,000msec

Change-Id: Icfd5b1ecad66db4f978249486f5fe362a3ae9640
This commit is contained in:
Tadashi G. Takaoka 2012-08-27 14:43:39 +09:00
parent 43da9ce041
commit 1c2f332239
2 changed files with 16 additions and 11 deletions

View file

@ -51,7 +51,7 @@
<integer name="config_key_preview_linger_timeout">70</integer> <integer name="config_key_preview_linger_timeout">70</integer>
<integer name="config_gesture_floating_preview_text_linger_timeout">200</integer> <integer name="config_gesture_floating_preview_text_linger_timeout">200</integer>
<integer name="config_gesture_preview_trail_fadeout_start_delay">100</integer> <integer name="config_gesture_preview_trail_fadeout_start_delay">100</integer>
<integer name="config_gesture_preview_trail_fadeout_duration">1000</integer> <integer name="config_gesture_preview_trail_fadeout_duration">800</integer>
<integer name="config_gesture_preview_trail_update_interval">20</integer> <integer name="config_gesture_preview_trail_update_interval">20</integer>
<!-- <!--
Configuration for MainKeyboardView Configuration for MainKeyboardView

View file

@ -32,6 +32,7 @@ class GesturePreviewTrail {
private final ResizableIntArray mEventTimes = new ResizableIntArray(DEFAULT_CAPACITY); private final ResizableIntArray mEventTimes = new ResizableIntArray(DEFAULT_CAPACITY);
private int mCurrentStrokeId = -1; private int mCurrentStrokeId = -1;
private long mCurrentDownTime; private long mCurrentDownTime;
private int mTrailStartIndex;
// Use this value as imaginary zero because x-coordinates may be zero. // Use this value as imaginary zero because x-coordinates may be zero.
private static final int DOWN_EVENT_MARKER = -128; private static final int DOWN_EVENT_MARKER = -128;
@ -80,7 +81,7 @@ class GesturePreviewTrail {
if (isNewStroke) { if (isNewStroke) {
final int elapsedTime = (int)(downTime - mCurrentDownTime); final int elapsedTime = (int)(downTime - mCurrentDownTime);
final int[] eventTimes = mEventTimes.getPrimitiveArray(); final int[] eventTimes = mEventTimes.getPrimitiveArray();
for (int i = 0; i < trailSize; i++) { for (int i = mTrailStartIndex; i < trailSize; i++) {
eventTimes[i] -= elapsedTime; eventTimes[i] -= elapsedTime;
} }
@ -122,13 +123,14 @@ class GesturePreviewTrail {
final int lingeringDuration = mPreviewParams.mFadeoutStartDelay final int lingeringDuration = mPreviewParams.mFadeoutStartDelay
+ mPreviewParams.mFadeoutDuration; + mPreviewParams.mFadeoutDuration;
int startIndex; int startIndex;
for (startIndex = 0; startIndex < trailSize; startIndex++) { for (startIndex = mTrailStartIndex; startIndex < trailSize; startIndex++) {
final int elapsedTime = sinceDown - eventTimes[startIndex]; final int elapsedTime = sinceDown - eventTimes[startIndex];
// Skip too old trail points. // Skip too old trail points.
if (elapsedTime < lingeringDuration) { if (elapsedTime < lingeringDuration) {
break; break;
} }
} }
mTrailStartIndex = startIndex;
if (startIndex < trailSize) { if (startIndex < trailSize) {
int lastX = getXCoordValue(xCoords[startIndex]); int lastX = getXCoordValue(xCoords[startIndex]);
@ -147,15 +149,18 @@ class GesturePreviewTrail {
} }
} }
// TODO: Implement ring buffer to avoid moving points.
// Discard faded out points.
final int newSize = trailSize - startIndex; final int newSize = trailSize - startIndex;
System.arraycopy(eventTimes, startIndex, eventTimes, 0, newSize); if (newSize < startIndex) {
System.arraycopy(xCoords, startIndex, xCoords, 0, newSize); mTrailStartIndex = 0;
System.arraycopy(yCoords, startIndex, yCoords, 0, newSize); if (newSize > 0) {
mEventTimes.setLength(newSize); System.arraycopy(eventTimes, startIndex, eventTimes, 0, newSize);
mXCoordinates.setLength(newSize); System.arraycopy(xCoords, startIndex, xCoords, 0, newSize);
mYCoordinates.setLength(newSize); System.arraycopy(yCoords, startIndex, yCoords, 0, newSize);
}
mEventTimes.setLength(newSize);
mXCoordinates.setLength(newSize);
mYCoordinates.setLength(newSize);
}
return newSize > 0; return newSize > 0;
} }
} }