mirror of
https://gitlab.futo.org/keyboard/latinime.git
synced 2024-09-28 14:54:30 +01:00
Cleanup ProximityInfo.calulateSweetSpot
Change-Id: I98238359dffd76a620d3b0e73b3b22dd82c56c93
This commit is contained in:
parent
8950f259b1
commit
6cb72b0f36
@ -104,6 +104,20 @@ public class ProximityInfo {
|
|||||||
final int[] keyWidths = new int[keyCount];
|
final int[] keyWidths = new int[keyCount];
|
||||||
final int[] keyHeights = new int[keyCount];
|
final int[] keyHeights = new int[keyCount];
|
||||||
final int[] keyCharCodes = new int[keyCount];
|
final int[] keyCharCodes = new int[keyCount];
|
||||||
|
final float[] sweetSpotCenterXs;
|
||||||
|
final float[] sweetSpotCenterYs;
|
||||||
|
final float[] sweetSpotRadii;
|
||||||
|
final boolean calculateSweetSpotParams;
|
||||||
|
if (touchPositionCorrection != null && touchPositionCorrection.isValid()) {
|
||||||
|
sweetSpotCenterXs = new float[keyCount];
|
||||||
|
sweetSpotCenterYs = new float[keyCount];
|
||||||
|
sweetSpotRadii = new float[keyCount];
|
||||||
|
calculateSweetSpotParams = true;
|
||||||
|
} else {
|
||||||
|
sweetSpotCenterXs = sweetSpotCenterYs = sweetSpotRadii = null;
|
||||||
|
calculateSweetSpotParams = false;
|
||||||
|
}
|
||||||
|
|
||||||
for (int i = 0; i < keyCount; ++i) {
|
for (int i = 0; i < keyCount; ++i) {
|
||||||
final Key key = keys.get(i);
|
final Key key = keys.get(i);
|
||||||
keyXCoordinates[i] = key.mX;
|
keyXCoordinates[i] = key.mX;
|
||||||
@ -111,18 +125,23 @@ public class ProximityInfo {
|
|||||||
keyWidths[i] = key.mWidth;
|
keyWidths[i] = key.mWidth;
|
||||||
keyHeights[i] = key.mHeight;
|
keyHeights[i] = key.mHeight;
|
||||||
keyCharCodes[i] = key.mCode;
|
keyCharCodes[i] = key.mCode;
|
||||||
}
|
if (calculateSweetSpotParams) {
|
||||||
|
final Rect hitBox = key.mHitBox;
|
||||||
float[] sweetSpotCenterXs = null;
|
final int row = hitBox.top / mKeyHeight;
|
||||||
float[] sweetSpotCenterYs = null;
|
if (row < touchPositionCorrection.mRadii.length) {
|
||||||
float[] sweetSpotRadii = null;
|
final float hitBoxCenterX = (hitBox.left + hitBox.right) * 0.5f;
|
||||||
|
final float hitBoxCenterY = (hitBox.top + hitBox.bottom) * 0.5f;
|
||||||
if (touchPositionCorrection != null && touchPositionCorrection.isValid()) {
|
final float hitBoxWidth = hitBox.right - hitBox.left;
|
||||||
sweetSpotCenterXs = new float[keyCount];
|
final float hitBoxHeight = hitBox.bottom - hitBox.top;
|
||||||
sweetSpotCenterYs = new float[keyCount];
|
final float x = touchPositionCorrection.mXs[row];
|
||||||
sweetSpotRadii = new float[keyCount];
|
final float y = touchPositionCorrection.mYs[row];
|
||||||
calculateSweetSpot(keys, touchPositionCorrection,
|
final float radius = touchPositionCorrection.mRadii[row];
|
||||||
sweetSpotCenterXs, sweetSpotCenterYs, sweetSpotRadii);
|
sweetSpotCenterXs[i] = hitBoxCenterX + x * hitBoxWidth;
|
||||||
|
sweetSpotCenterYs[i] = hitBoxCenterY + y * hitBoxHeight;
|
||||||
|
sweetSpotRadii[i] = radius * (float)Math.sqrt(
|
||||||
|
hitBoxWidth * hitBoxWidth + hitBoxHeight * hitBoxHeight);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mNativeProximityInfo = setProximityInfoNative(MAX_PROXIMITY_CHARS_SIZE,
|
mNativeProximityInfo = setProximityInfoNative(MAX_PROXIMITY_CHARS_SIZE,
|
||||||
@ -131,32 +150,6 @@ public class ProximityInfo {
|
|||||||
sweetSpotCenterXs, sweetSpotCenterYs, sweetSpotRadii);
|
sweetSpotCenterXs, sweetSpotCenterYs, sweetSpotRadii);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void calculateSweetSpot(List<Key> keys, TouchPositionCorrection touchPositionCorrection,
|
|
||||||
float[] sweetSpotCenterXs, float[] sweetSpotCenterYs, float[] sweetSpotRadii) {
|
|
||||||
final int keyCount = keys.size();
|
|
||||||
final float[] xs = touchPositionCorrection.mXs;
|
|
||||||
final float[] ys = touchPositionCorrection.mYs;
|
|
||||||
final float[] radii = touchPositionCorrection.mRadii;
|
|
||||||
for (int i = 0; i < keyCount; ++i) {
|
|
||||||
final Key key = keys.get(i);
|
|
||||||
final Rect hitBox = key.mHitBox;
|
|
||||||
final int row = hitBox.top / mKeyHeight;
|
|
||||||
if (row < radii.length) {
|
|
||||||
final float hitBoxCenterX = (hitBox.left + hitBox.right) * 0.5f;
|
|
||||||
final float hitBoxCenterY = (hitBox.top + hitBox.bottom) * 0.5f;
|
|
||||||
final float hitBoxWidth = hitBox.right - hitBox.left;
|
|
||||||
final float hitBoxHeight = hitBox.bottom - hitBox.top;
|
|
||||||
final float x = xs[row];
|
|
||||||
final float y = ys[row];
|
|
||||||
final float radius = radii[row];
|
|
||||||
sweetSpotCenterXs[i] = hitBoxCenterX + x * hitBoxWidth;
|
|
||||||
sweetSpotCenterYs[i] = hitBoxCenterY + y * hitBoxHeight;
|
|
||||||
sweetSpotRadii[i] = radius
|
|
||||||
* (float)Math.sqrt(hitBoxWidth * hitBoxWidth + hitBoxHeight * hitBoxHeight);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public long getNativeProximityInfo() {
|
public long getNativeProximityInfo() {
|
||||||
return mNativeProximityInfo;
|
return mNativeProximityInfo;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user