From efb63246c2e5df29d62416d48f62e2b57b14de7c Mon Sep 17 00:00:00 2001 From: Satoshi Kataoka Date: Wed, 27 Jun 2012 14:52:40 +0900 Subject: [PATCH] Change native functions' interface for gesture Change-Id: I106a858f0be7452dd89f425805a6f72aa88c3f65 --- native/jni/Android.mk | 2 ++ native/jni/src/dictionary.cpp | 3 ++- .../gesture/{ => impl}/gesture_decoder_impl.h | 0 .../{ => impl}/incremental_decoder_impl.h | 3 ++- .../gesture/incremental_decoder_interface.h | 3 ++- native/jni/src/proximity_info.cpp | 22 +++++++++++++++++++ native/jni/src/proximity_info.h | 4 ++++ 7 files changed, 34 insertions(+), 3 deletions(-) rename native/jni/src/gesture/{ => impl}/gesture_decoder_impl.h (100%) rename native/jni/src/gesture/{ => impl}/incremental_decoder_impl.h (94%) diff --git a/native/jni/Android.mk b/native/jni/Android.mk index 5d705b1ff..a6bb48752 100644 --- a/native/jni/Android.mk +++ b/native/jni/Android.mk @@ -26,6 +26,8 @@ include $(CLEAR_VARS) LATIN_IME_SRC_DIR := src LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(LATIN_IME_SRC_DIR) +LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(LATIN_IME_SRC_DIR)/gesture +LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(LATIN_IME_SRC_DIR)/gesture/impl LOCAL_CFLAGS += -Werror -Wall diff --git a/native/jni/src/dictionary.cpp b/native/jni/src/dictionary.cpp index e0b7f87b2..10ea9fe06 100644 --- a/native/jni/src/dictionary.cpp +++ b/native/jni/src/dictionary.cpp @@ -44,7 +44,8 @@ Dictionary::Dictionary(void *dict, int dictSize, int mmapFd, int dictBufAdjust, fullWordMultiplier, maxWordLength, maxWords, options); mBigramDictionary = new BigramDictionary(mDict + headerSize, maxWordLength); mGestureDecoder = new GestureDecoder(maxWordLength, maxWords); - mGestureDecoder->setDict(mUnigramDictionary, mBigramDictionary); + mGestureDecoder->setDict(mUnigramDictionary, mBigramDictionary, + mDict + headerSize /* dict root */, 0 /* root pos */); } Dictionary::~Dictionary() { diff --git a/native/jni/src/gesture/gesture_decoder_impl.h b/native/jni/src/gesture/impl/gesture_decoder_impl.h similarity index 100% rename from native/jni/src/gesture/gesture_decoder_impl.h rename to native/jni/src/gesture/impl/gesture_decoder_impl.h diff --git a/native/jni/src/gesture/incremental_decoder_impl.h b/native/jni/src/gesture/impl/incremental_decoder_impl.h similarity index 94% rename from native/jni/src/gesture/incremental_decoder_impl.h rename to native/jni/src/gesture/impl/incremental_decoder_impl.h index 5731ad892..84121e8e2 100644 --- a/native/jni/src/gesture/incremental_decoder_impl.h +++ b/native/jni/src/gesture/impl/incremental_decoder_impl.h @@ -28,7 +28,8 @@ class IncrementalDecoderImpl : IncrementalDecoderInterface { public: IncrementalDecoderImpl(int maxWordLength, int maxWords) { }; - void setDict(const UnigramDictionary *dict, const BigramDictionary *bigram) { }; + void setDict(const UnigramDictionary *dict, const BigramDictionary *bigram, + const uint8_t *dictRoot, int rootPos) { }; void setPrevWord(const int32_t *prevWord, int prevWordLength) { }; void reset() { }; diff --git a/native/jni/src/gesture/incremental_decoder_interface.h b/native/jni/src/gesture/incremental_decoder_interface.h index d34b0da11..c5404a40c 100644 --- a/native/jni/src/gesture/incremental_decoder_interface.h +++ b/native/jni/src/gesture/incremental_decoder_interface.h @@ -31,7 +31,8 @@ class IncrementalDecoderInterface { int *pointerIds, int *codes, int inputSize, int commitPoint, bool isMainDict, unsigned short *outWords, int *frequencies, int *outputIndices) = 0; virtual void reset() = 0; - virtual void setDict(const UnigramDictionary *dict, const BigramDictionary *bigram) = 0; + virtual void setDict(const UnigramDictionary *dict, const BigramDictionary *bigram, + const uint8_t *dictRoot, int rootPos) = 0; virtual void setPrevWord(const int32_t *prevWord, int prevWordLength) = 0; virtual ~IncrementalDecoderInterface() { }; }; diff --git a/native/jni/src/proximity_info.cpp b/native/jni/src/proximity_info.cpp index 2ba244a7c..a4a641160 100644 --- a/native/jni/src/proximity_info.cpp +++ b/native/jni/src/proximity_info.cpp @@ -15,6 +15,7 @@ */ #include +#include #include #include @@ -210,4 +211,25 @@ int ProximityInfo::getKeyIndex(const int c) const { } return mCodeToKeyIndex[baseLowerC]; } + +// TODO: [Staging] Optimize +void ProximityInfo::getCenters(int *centerXs, int *centerYs, int *codeToKeyIndex, + int *keyToCodeIndex, int *keyCount, int *keyWidth) const { + *keyCount = KEY_COUNT; + *keyWidth = sqrt((float)MOST_COMMON_KEY_WIDTH_SQUARE); + + for (int i = 0; i < KEY_COUNT; ++i) { + const int code = mKeyCharCodes[i]; + const int lowerCode = toBaseLowerCase(code); + centerXs[i] = mKeyXCoordinates[i] + mKeyWidths[i] / 2; + centerYs[i] = mKeyYCoordinates[i] + mKeyHeights[i] / 2; + codeToKeyIndex[code] = i; + if (code != lowerCode && lowerCode >= 0 && lowerCode <= MAX_CHAR_CODE) { + codeToKeyIndex[lowerCode] = i; + keyToCodeIndex[i] = lowerCode; + } else { + keyToCodeIndex[i] = code; + } + } +} } // namespace latinime diff --git a/native/jni/src/proximity_info.h b/native/jni/src/proximity_info.h index fec6555ea..d58935c6b 100644 --- a/native/jni/src/proximity_info.h +++ b/native/jni/src/proximity_info.h @@ -98,6 +98,10 @@ class ProximityInfo { return GRID_HEIGHT; } + // Returns the keyboard key-center information. + void getCenters(int *centersX, int *centersY, int *codeToKeyIndex, int *keyToCodeIndex, + int *keyCount, int *keyWidth) const; + private: DISALLOW_IMPLICIT_CONSTRUCTORS(ProximityInfo); // The max number of the keys in one keyboard layout