aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
authorTadashi G. Takaoka <takaoka@google.com>2012-08-27 00:29:47 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-08-27 00:29:48 -0700
commit1451a0fb1fbe7b86fe12742a28c759d5cbade5dd (patch)
tree4894883ec314748a0df52635fc8f4575be5a7fed /java
parent76951d8e5a573233aba855a0fa5ba501217a3371 (diff)
parent1c2f33223995d8a6c069a85655f790388cd4e581 (diff)
downloadlatinime-1451a0fb1fbe7b86fe12742a28c759d5cbade5dd.tar.gz
latinime-1451a0fb1fbe7b86fe12742a28c759d5cbade5dd.tar.xz
latinime-1451a0fb1fbe7b86fe12742a28c759d5cbade5dd.zip
Merge "Optimize gesture preview trail drawing a bit" into jb-mr1-dev
Diffstat (limited to 'java')
-rw-r--r--java/res/values/config.xml2
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/GesturePreviewTrail.java25
2 files changed, 16 insertions, 11 deletions
diff --git a/java/res/values/config.xml b/java/res/values/config.xml
index 8477df054..8e2d43e4e 100644
--- a/java/res/values/config.xml
+++ b/java/res/values/config.xml
@@ -51,7 +51,7 @@
<integer name="config_key_preview_linger_timeout">70</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_duration">1000</integer>
+ <integer name="config_gesture_preview_trail_fadeout_duration">800</integer>
<integer name="config_gesture_preview_trail_update_interval">20</integer>
<!--
Configuration for MainKeyboardView
diff --git a/java/src/com/android/inputmethod/keyboard/internal/GesturePreviewTrail.java b/java/src/com/android/inputmethod/keyboard/internal/GesturePreviewTrail.java
index 747627b7d..e814d8009 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/GesturePreviewTrail.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/GesturePreviewTrail.java
@@ -32,6 +32,7 @@ class GesturePreviewTrail {
private final ResizableIntArray mEventTimes = new ResizableIntArray(DEFAULT_CAPACITY);
private int mCurrentStrokeId = -1;
private long mCurrentDownTime;
+ private int mTrailStartIndex;
// Use this value as imaginary zero because x-coordinates may be zero.
private static final int DOWN_EVENT_MARKER = -128;
@@ -80,7 +81,7 @@ class GesturePreviewTrail {
if (isNewStroke) {
final int elapsedTime = (int)(downTime - mCurrentDownTime);
final int[] eventTimes = mEventTimes.getPrimitiveArray();
- for (int i = 0; i < trailSize; i++) {
+ for (int i = mTrailStartIndex; i < trailSize; i++) {
eventTimes[i] -= elapsedTime;
}
@@ -122,13 +123,14 @@ class GesturePreviewTrail {
final int lingeringDuration = mPreviewParams.mFadeoutStartDelay
+ mPreviewParams.mFadeoutDuration;
int startIndex;
- for (startIndex = 0; startIndex < trailSize; startIndex++) {
+ for (startIndex = mTrailStartIndex; startIndex < trailSize; startIndex++) {
final int elapsedTime = sinceDown - eventTimes[startIndex];
// Skip too old trail points.
if (elapsedTime < lingeringDuration) {
break;
}
}
+ mTrailStartIndex = startIndex;
if (startIndex < trailSize) {
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;
- System.arraycopy(eventTimes, startIndex, eventTimes, 0, newSize);
- System.arraycopy(xCoords, startIndex, xCoords, 0, newSize);
- System.arraycopy(yCoords, startIndex, yCoords, 0, newSize);
- mEventTimes.setLength(newSize);
- mXCoordinates.setLength(newSize);
- mYCoordinates.setLength(newSize);
+ if (newSize < startIndex) {
+ mTrailStartIndex = 0;
+ if (newSize > 0) {
+ System.arraycopy(eventTimes, startIndex, eventTimes, 0, newSize);
+ System.arraycopy(xCoords, startIndex, xCoords, 0, newSize);
+ System.arraycopy(yCoords, startIndex, yCoords, 0, newSize);
+ }
+ mEventTimes.setLength(newSize);
+ mXCoordinates.setLength(newSize);
+ mYCoordinates.setLength(newSize);
+ }
return newSize > 0;
}
}