aboutsummaryrefslogtreecommitdiffstats
path: root/native/src/proximity_info.cpp
diff options
context:
space:
mode:
authorYusuke Nojima <nojima@google.com>2011-10-05 06:37:34 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2011-10-05 06:37:34 -0700
commit5e458b8e74bbc789b80b4fc567f426cfa5c63426 (patch)
tree4b8de4b71acbda214a89afe5e7f12dc6354e8f00 /native/src/proximity_info.cpp
parent30d24d8d40cef27240152dfbdea801b2a28552d8 (diff)
parente4ba822cc6959490868fd8868ffad1c4e9b23992 (diff)
downloadlatinime-5e458b8e74bbc789b80b4fc567f426cfa5c63426.tar.gz
latinime-5e458b8e74bbc789b80b4fc567f426cfa5c63426.tar.xz
latinime-5e458b8e74bbc789b80b4fc567f426cfa5c63426.zip
am e4ba822c: Promote touches in hit box according to the distance from sweet spot
* commit 'e4ba822cc6959490868fd8868ffad1c4e9b23992': Promote touches in hit box according to the distance from sweet spot
Diffstat (limited to 'native/src/proximity_info.cpp')
-rw-r--r--native/src/proximity_info.cpp46
1 files changed, 17 insertions, 29 deletions
diff --git a/native/src/proximity_info.cpp b/native/src/proximity_info.cpp
index 4c21c2eb3..de3f421f3 100644
--- a/native/src/proximity_info.cpp
+++ b/native/src/proximity_info.cpp
@@ -115,41 +115,42 @@ void ProximityInfo::setInputParams(const int* inputCodes, const int inputLength,
}
mPrimaryInputWord[inputLength] = 0;
for (int i = 0; i < mInputLength; ++i) {
- mSweetSpotTypes[i] = calculateSweetSpotType(i);
+ float normalizedSquaredDistance = calculateNormalizedSquaredDistance(i);
+ if (normalizedSquaredDistance >= 0.0f) {
+ mNormalizedSquaredDistance[i] =
+ (int)(normalizedSquaredDistance * NORMALIZED_SQUARED_DISTANCE_SCALING_FACTOR);
+ } else {
+ mNormalizedSquaredDistance[i] = NOT_A_DISTANCE;
+ }
}
}
inline float square(const float x) { return x * x; }
-ProximityInfo::SweetSpotType ProximityInfo::calculateSweetSpotType(int index) const {
+float ProximityInfo::calculateNormalizedSquaredDistance(int index) const {
+ static const float NOT_A_DISTANCE_FLOAT = -1.0f;
if (KEY_COUNT == 0 || !mInputXCoordinates || !mInputYCoordinates) {
// We do not have the coordinate data
- return UNKNOWN;
+ return NOT_A_DISTANCE_FLOAT;
}
const int currentChar = getPrimaryCharAt(index);
const unsigned short baseLowerC = Dictionary::toBaseLowerCase(currentChar);
if (baseLowerC > MAX_CHAR_CODE) {
- return UNKNOWN;
+ return NOT_A_DISTANCE_FLOAT;
}
const int keyIndex = mCodeToKeyIndex[baseLowerC];
if (keyIndex < 0) {
- return UNKNOWN;
+ return NOT_A_DISTANCE_FLOAT;
}
const float radius = mSweetSpotRadii[keyIndex];
if (radius <= 0.0) {
// When there are no calibration data for a key,
// the radius of the key is assigned to zero.
- return UNKNOWN;
+ return NOT_A_DISTANCE;
}
const float squaredRadius = square(radius);
const float squaredDistance = calculateSquaredDistanceFromSweetSpotCenter(keyIndex, index);
- if (squaredDistance <= squaredRadius) {
- return IN_SWEET_SPOT;
- }
- if (squaredDistance <= square(NEUTRAL_AREA_RADIUS_RATIO) * squaredRadius) {
- return IN_NEUTRAL_AREA;
- }
- return OUT_OF_NEUTRAL_AREA;
+ return squaredDistance / squaredRadius;
}
float ProximityInfo::calculateSquaredDistanceFromSweetSpotCenter(
@@ -213,22 +214,7 @@ ProximityInfo::ProximityType ProximityInfo::getMatchedProximityId(
// The first char in the array is what user typed. If it matches right away,
// that means the user typed that same char for this pos.
if (firstChar == baseLowerC || firstChar == c) {
- if (CALIBRATE_SCORE_BY_TOUCH_COORDINATES) {
- switch (mSweetSpotTypes[index]) {
- case UNKNOWN:
- return EQUIVALENT_CHAR_NORMAL;
- case IN_SWEET_SPOT:
- return EQUIVALENT_CHAR_STRONG;
- case IN_NEUTRAL_AREA:
- return EQUIVALENT_CHAR_NORMAL;
- case OUT_OF_NEUTRAL_AREA:
- return EQUIVALENT_CHAR_WEAK;
- default:
- assert(false);
- }
- } else {
- return EQUIVALENT_CHAR_NORMAL;
- }
+ return EQUIVALENT_CHAR;
}
if (!checkProximityChars) return UNRELATED_CHAR;
@@ -266,6 +252,8 @@ bool ProximityInfo::sameAsTyped(const unsigned short *word, int length) const {
return true;
}
+const int ProximityInfo::NORMALIZED_SQUARED_DISTANCE_SCALING_FACTOR_LOG_2;
+const int ProximityInfo::NORMALIZED_SQUARED_DISTANCE_SCALING_FACTOR;
const int ProximityInfo::MAX_KEY_COUNT_IN_A_KEYBOARD;
const int ProximityInfo::MAX_CHAR_CODE;