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:
parent
43da9ce041
commit
1c2f332239
2 changed files with 16 additions and 11 deletions
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue