aboutsummaryrefslogtreecommitdiffstats
path: root/native/src/proximity_info.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'native/src/proximity_info.cpp')
-rw-r--r--native/src/proximity_info.cpp42
1 files changed, 36 insertions, 6 deletions
diff --git a/native/src/proximity_info.cpp b/native/src/proximity_info.cpp
index d0cba3eb6..5f2d09f5c 100644
--- a/native/src/proximity_info.cpp
+++ b/native/src/proximity_info.cpp
@@ -17,18 +17,48 @@
#include <stdio.h>
#include <string.h>
+#define LOG_TAG "LatinIME: proximity_info.cpp"
+
#include "proximity_info.h"
namespace latinime {
-ProximityInfo::ProximityInfo(int maxProximityCharsSize, int displayWidth, int displayHeight,
- int gridWidth, int gridHeight, uint32_t const *proximityCharsArray)
- : MAX_PROXIMITY_CHARS_SIZE(maxProximityCharsSize), DISPLAY_WIDTH(displayWidth),
- DISPLAY_HEIGHT(displayHeight), GRID_WIDTH(gridWidth), GRID_HEIGHT(gridHeight) {
- mProximityCharsArray = new uint32_t[GRID_WIDTH * GRID_HEIGHT * MAX_PROXIMITY_CHARS_SIZE];
- memcpy(mProximityCharsArray, proximityCharsArray, sizeof(mProximityCharsArray));
+ProximityInfo::ProximityInfo(const int maxProximityCharsSize, const int keyboardWidth,
+ const int keyboardHeight, const int gridWidth, const int gridHeight,
+ const uint32_t *proximityCharsArray)
+ : MAX_PROXIMITY_CHARS_SIZE(maxProximityCharsSize), KEYBOARD_WIDTH(keyboardWidth),
+ KEYBOARD_HEIGHT(keyboardHeight), GRID_WIDTH(gridWidth), GRID_HEIGHT(gridHeight),
+ CELL_WIDTH((keyboardWidth + gridWidth - 1) / gridWidth),
+ CELL_HEIGHT((keyboardHeight + gridHeight - 1) / gridHeight) {
+ const int len = GRID_WIDTH * GRID_HEIGHT * MAX_PROXIMITY_CHARS_SIZE;
+ mProximityCharsArray = new uint32_t[len];
+ if (DEBUG_PROXIMITY_INFO) {
+ LOGI("Create proximity info array %d", len);
+ }
+ memcpy(mProximityCharsArray, proximityCharsArray, len * sizeof(mProximityCharsArray[0]));
}
ProximityInfo::~ProximityInfo() {
delete[] mProximityCharsArray;
}
+
+inline int ProximityInfo::getStartIndexFromCoordinates(const int x, const int y) const {
+ return (y / CELL_HEIGHT) * GRID_WIDTH + (x / CELL_WIDTH)
+ * MAX_PROXIMITY_CHARS_SIZE;
+}
+
+bool ProximityInfo::hasSpaceProximity(const int x, const int y) const {
+ const int startIndex = getStartIndexFromCoordinates(x, y);
+ if (DEBUG_PROXIMITY_INFO) {
+ LOGI("hasSpaceProximity: index %d", startIndex);
+ }
+ for (int i = 0; i < MAX_PROXIMITY_CHARS_SIZE; ++i) {
+ if (DEBUG_PROXIMITY_INFO) {
+ LOGI("Index: %d", mProximityCharsArray[startIndex + i]);
+ }
+ if (mProximityCharsArray[startIndex + i] == KEYCODE_SPACE) {
+ return true;
+ }
+ }
+ return false;
}
+} // namespace latinime