aboutsummaryrefslogtreecommitdiffstats
path: root/native/jni/src/proximity_info.h
diff options
context:
space:
mode:
Diffstat (limited to 'native/jni/src/proximity_info.h')
-rw-r--r--native/jni/src/proximity_info.h115
1 files changed, 40 insertions, 75 deletions
diff --git a/native/jni/src/proximity_info.h b/native/jni/src/proximity_info.h
index 70942aa19..57a175d2c 100644
--- a/native/jni/src/proximity_info.h
+++ b/native/jni/src/proximity_info.h
@@ -17,11 +17,10 @@
#ifndef LATINIME_PROXIMITY_INFO_H
#define LATINIME_PROXIMITY_INFO_H
-#include <stdint.h>
-
#include "defines.h"
#include "hash_map_compat.h"
#include "jni.h"
+#include "proximity_info_utils.h"
namespace latinime {
@@ -29,7 +28,7 @@ class Correction;
class ProximityInfo {
public:
- ProximityInfo(JNIEnv *env, const jstring localeJStr, const int maxProximityCharsSize,
+ ProximityInfo(JNIEnv *env, const jstring localeJStr,
const int keyboardWidth, const int keyboardHeight, const int gridWidth,
const int gridHeight, const int mostCommonKeyWidth, const jintArray proximityChars,
const int keyCount, const jintArray keyXCoordinates, const jintArray keyYCoordinates,
@@ -42,94 +41,59 @@ class ProximityInfo {
float getNormalizedSquaredDistanceFromCenterFloatG(
const int keyId, const int x, const int y) const;
bool sameAsTyped(const unsigned short *word, int length) const;
- int getKeyIndexOf(const int c) const;
int getCodePointOf(const int keyIndex) const;
bool hasSweetSpotData(const int keyIndex) const {
// When there are no calibration data for a key,
// the radius of the key is assigned to zero.
return mSweetSpotRadii[keyIndex] > 0.0f;
}
- float getSweetSpotRadiiAt(int keyIndex) const {
- return mSweetSpotRadii[keyIndex];
- }
- float getSweetSpotCenterXAt(int keyIndex) const {
- return mSweetSpotCenterXs[keyIndex];
- }
- float getSweetSpotCenterYAt(int keyIndex) const {
- return mSweetSpotCenterYs[keyIndex];
- }
+ float getSweetSpotRadiiAt(int keyIndex) const { return mSweetSpotRadii[keyIndex]; }
+ float getSweetSpotCenterXAt(int keyIndex) const { return mSweetSpotCenterXs[keyIndex]; }
+ float getSweetSpotCenterYAt(int keyIndex) const { return mSweetSpotCenterYs[keyIndex]; }
void calculateNearbyKeyCodes(
- const int x, const int y, const int32_t primaryKey, int *inputCodes) const;
-
- bool hasTouchPositionCorrectionData() const {
- return HAS_TOUCH_POSITION_CORRECTION_DATA;
- }
-
- int getMostCommonKeyWidth() const {
- return MOST_COMMON_KEY_WIDTH;
- }
+ const int x, const int y, const int primaryKey, int *inputCodes) const;
+ bool hasTouchPositionCorrectionData() const { return HAS_TOUCH_POSITION_CORRECTION_DATA; }
+ int getMostCommonKeyWidth() const { return MOST_COMMON_KEY_WIDTH; }
+ int getMostCommonKeyWidthSquare() const { return MOST_COMMON_KEY_WIDTH_SQUARE; }
+ int getKeyCount() const { return KEY_COUNT; }
+ int getCellHeight() const { return CELL_HEIGHT; }
+ int getCellWidth() const { return CELL_WIDTH; }
+ int getGridWidth() const { return GRID_WIDTH; }
+ int getGridHeight() const { return GRID_HEIGHT; }
+ int getKeyboardWidth() const { return KEYBOARD_WIDTH; }
+ int getKeyboardHeight() const { return KEYBOARD_HEIGHT; }
+ float getKeyboardHypotenuse() const { return KEYBOARD_HYPOTENUSE; }
- int getMostCommonKeyWidthSquare() const {
- return MOST_COMMON_KEY_WIDTH_SQUARE;
- }
-
- const char *getLocaleStr() const {
- return mLocaleStr;
- }
-
- int getKeyCount() const {
- return KEY_COUNT;
- }
-
- int getCellHeight() const {
- return CELL_HEIGHT;
- }
-
- int getCellWidth() const {
- return CELL_WIDTH;
- }
-
- int getGridWidth() const {
- return GRID_WIDTH;
- }
+ int getKeyCenterXOfCodePointG(int charCode) const;
+ int getKeyCenterYOfCodePointG(int charCode) const;
+ int getKeyCenterXOfKeyIdG(int keyId) const;
+ int getKeyCenterYOfKeyIdG(int keyId) const;
+ int getKeyKeyDistanceG(int keyId0, int keyId1) const;
- int getGridHeight() const {
- return GRID_HEIGHT;
+ AK_FORCE_INLINE void initializeProximities(const int *const inputCodes,
+ const int *const inputXCoordinates, const int *const inputYCoordinates,
+ const int inputSize, int *allInputCodes) const {
+ ProximityInfoUtils::initializeProximities(inputCodes, inputXCoordinates, inputYCoordinates,
+ inputSize, mKeyXCoordinates, mKeyYCoordinates, mKeyWidths, mKeyHeights,
+ mProximityCharsArray, CELL_HEIGHT, CELL_WIDTH, GRID_WIDTH, MOST_COMMON_KEY_WIDTH,
+ KEY_COUNT, mLocaleStr, &mCodeToKeyMap, allInputCodes);
}
- int getKeyboardWidth() const {
- return KEYBOARD_WIDTH;
+ AK_FORCE_INLINE int getKeyIndexOf(const int c) const {
+ return ProximityInfoUtils::getKeyIndexOf(KEY_COUNT, c, &mCodeToKeyMap);
}
- int getKeyboardHeight() const {
- return KEYBOARD_HEIGHT;
+ AK_FORCE_INLINE bool isCodePointOnKeyboard(const int codePoint) const {
+ return getKeyIndexOf(codePoint) != NOT_AN_INDEX;
}
- int getKeyCenterXOfCodePointG(int charCode) const;
- int getKeyCenterYOfCodePointG(int charCode) const;
- int getKeyCenterXOfKeyIdG(int keyId) const;
- int getKeyCenterYOfKeyIdG(int keyId) const;
- int getKeyKeyDistanceG(int key0, int key1) const;
-
private:
DISALLOW_IMPLICIT_CONSTRUCTORS(ProximityInfo);
- static const float NOT_A_DISTANCE_FLOAT;
- int getStartIndexFromCoordinates(const int x, const int y) const;
void initializeG();
float calculateNormalizedSquaredDistance(const int keyIndex, const int inputIndex) const;
bool hasInputCoordinates() const;
- int squaredDistanceToEdge(const int keyId, const int x, const int y) const;
- bool isOnKey(const int keyId, const int x, const int y) const {
- if (keyId < 0) return true; // NOT_A_ID is -1, but return whenever < 0 just in case
- const int left = mKeyXCoordinates[keyId];
- const int top = mKeyYCoordinates[keyId];
- const int right = left + mKeyWidths[keyId] + 1;
- const int bottom = top + mKeyHeights[keyId];
- return left < right && top < bottom && x >= left && x < right && y >= top && y < bottom;
- }
- const int MAX_PROXIMITY_CHARS_SIZE;
const int GRID_WIDTH;
const int GRID_HEIGHT;
const int MOST_COMMON_KEY_WIDTH;
@@ -139,14 +103,15 @@ class ProximityInfo {
const int KEY_COUNT;
const int KEYBOARD_WIDTH;
const int KEYBOARD_HEIGHT;
+ const float KEYBOARD_HYPOTENUSE;
const bool HAS_TOUCH_POSITION_CORRECTION_DATA;
char mLocaleStr[MAX_LOCALE_STRING_LENGTH];
- int32_t *mProximityCharsArray;
- int32_t mKeyXCoordinates[MAX_KEY_COUNT_IN_A_KEYBOARD];
- int32_t mKeyYCoordinates[MAX_KEY_COUNT_IN_A_KEYBOARD];
- int32_t mKeyWidths[MAX_KEY_COUNT_IN_A_KEYBOARD];
- int32_t mKeyHeights[MAX_KEY_COUNT_IN_A_KEYBOARD];
- int32_t mKeyCodePoints[MAX_KEY_COUNT_IN_A_KEYBOARD];
+ int *mProximityCharsArray;
+ int mKeyXCoordinates[MAX_KEY_COUNT_IN_A_KEYBOARD];
+ int mKeyYCoordinates[MAX_KEY_COUNT_IN_A_KEYBOARD];
+ int mKeyWidths[MAX_KEY_COUNT_IN_A_KEYBOARD];
+ int mKeyHeights[MAX_KEY_COUNT_IN_A_KEYBOARD];
+ int mKeyCodePoints[MAX_KEY_COUNT_IN_A_KEYBOARD];
float mSweetSpotCenterXs[MAX_KEY_COUNT_IN_A_KEYBOARD];
float mSweetSpotCenterYs[MAX_KEY_COUNT_IN_A_KEYBOARD];
float mSweetSpotRadii[MAX_KEY_COUNT_IN_A_KEYBOARD];