diff options
Diffstat (limited to 'native/jni/src/proximity_info.h')
-rw-r--r-- | native/jni/src/proximity_info.h | 115 |
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]; |