Refactor key drawing code in KeyboardView
Change-Id: Ic7af05caee32eb6cba68d27ba4e2d9072472b34dmain
parent
9945f36406
commit
72913f97ed
|
@ -99,7 +99,7 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
|
||||||
|
|
||||||
// Main keyboard
|
// Main keyboard
|
||||||
private Keyboard mKeyboard;
|
private Keyboard mKeyboard;
|
||||||
private final KeyDrawParams mKeyDrawParams;
|
protected final KeyDrawParams mKeyDrawParams;
|
||||||
|
|
||||||
// Key preview
|
// Key preview
|
||||||
private final int mKeyPreviewLayoutId;
|
private final int mKeyPreviewLayoutId;
|
||||||
|
@ -171,7 +171,7 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* package */ static class KeyDrawParams {
|
protected static class KeyDrawParams {
|
||||||
// XML attributes
|
// XML attributes
|
||||||
public final int mKeyTextColor;
|
public final int mKeyTextColor;
|
||||||
public final int mKeyTextInactivatedColor;
|
public final int mKeyTextInactivatedColor;
|
||||||
|
@ -351,7 +351,6 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
|
||||||
mDelayAfterPreview = mKeyPreviewDrawParams.mLingerTimeout;
|
mDelayAfterPreview = mKeyPreviewDrawParams.mLingerTimeout;
|
||||||
|
|
||||||
mPaint.setAntiAlias(true);
|
mPaint.setAntiAlias(true);
|
||||||
mPaint.setTextAlign(Align.CENTER);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read fraction value in TypedArray as float.
|
// Read fraction value in TypedArray as float.
|
||||||
|
@ -729,10 +728,10 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int getCharGeometryCacheKey(char reference, Paint paint) {
|
private static int getCharGeometryCacheKey(char referenceChar, Paint paint) {
|
||||||
final int labelSize = (int)paint.getTextSize();
|
final int labelSize = (int)paint.getTextSize();
|
||||||
final Typeface face = paint.getTypeface();
|
final Typeface face = paint.getTypeface();
|
||||||
final int codePointOffset = reference << 15;
|
final int codePointOffset = referenceChar << 15;
|
||||||
if (face == Typeface.DEFAULT) {
|
if (face == Typeface.DEFAULT) {
|
||||||
return codePointOffset + labelSize;
|
return codePointOffset + labelSize;
|
||||||
} else if (face == Typeface.DEFAULT_BOLD) {
|
} else if (face == Typeface.DEFAULT_BOLD) {
|
||||||
|
@ -747,41 +746,35 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
|
||||||
// Working variable for the following methods.
|
// Working variable for the following methods.
|
||||||
private final Rect mTextBounds = new Rect();
|
private final Rect mTextBounds = new Rect();
|
||||||
|
|
||||||
private float getCharHeight(char[] character, Paint paint) {
|
private float getCharHeight(char[] referenceChar, Paint paint) {
|
||||||
final Integer key = getCharGeometryCacheKey(character[0], paint);
|
final Integer key = getCharGeometryCacheKey(referenceChar[0], paint);
|
||||||
final Float cachedValue = sTextHeightCache.get(key);
|
final Float cachedValue = sTextHeightCache.get(key);
|
||||||
if (cachedValue != null)
|
if (cachedValue != null)
|
||||||
return cachedValue;
|
return cachedValue;
|
||||||
|
|
||||||
paint.getTextBounds(character, 0, 1, mTextBounds);
|
paint.getTextBounds(referenceChar, 0, 1, mTextBounds);
|
||||||
final float height = mTextBounds.height();
|
final float height = mTextBounds.height();
|
||||||
sTextHeightCache.put(key, height);
|
sTextHeightCache.put(key, height);
|
||||||
return height;
|
return height;
|
||||||
}
|
}
|
||||||
|
|
||||||
private float getCharWidth(char[] character, Paint paint) {
|
private float getCharWidth(char[] referenceChar, Paint paint) {
|
||||||
final Integer key = getCharGeometryCacheKey(character[0], paint);
|
final Integer key = getCharGeometryCacheKey(referenceChar[0], paint);
|
||||||
final Float cachedValue = sTextWidthCache.get(key);
|
final Float cachedValue = sTextWidthCache.get(key);
|
||||||
if (cachedValue != null)
|
if (cachedValue != null)
|
||||||
return cachedValue;
|
return cachedValue;
|
||||||
|
|
||||||
paint.getTextBounds(character, 0, 1, mTextBounds);
|
paint.getTextBounds(referenceChar, 0, 1, mTextBounds);
|
||||||
final float width = mTextBounds.width();
|
final float width = mTextBounds.width();
|
||||||
sTextWidthCache.put(key, width);
|
sTextWidthCache.put(key, width);
|
||||||
return width;
|
return width;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected float getLabelWidth(CharSequence label, Paint paint) {
|
public float getLabelWidth(String label, Paint paint) {
|
||||||
paint.getTextBounds(label.toString(), 0, label.length(), mTextBounds);
|
paint.getTextBounds(label.toString(), 0, label.length(), mTextBounds);
|
||||||
return mTextBounds.width();
|
return mTextBounds.width();
|
||||||
}
|
}
|
||||||
|
|
||||||
public float getDefaultLabelWidth(String label, Paint paint) {
|
|
||||||
paint.setTextSize(mKeyDrawParams.mKeyLabelSize);
|
|
||||||
paint.setTypeface(mKeyDrawParams.mKeyTextStyle);
|
|
||||||
return getLabelWidth(label, paint);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected static void drawIcon(Canvas canvas, Drawable icon, int x, int y, int width,
|
protected static void drawIcon(Canvas canvas, Drawable icon, int x, int y, int width,
|
||||||
int height) {
|
int height) {
|
||||||
canvas.translate(x, y);
|
canvas.translate(x, y);
|
||||||
|
@ -815,6 +808,14 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
|
||||||
canvas.translate(-x, -y);
|
canvas.translate(-x, -y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Paint newDefaultLabelPaint() {
|
||||||
|
final Paint paint = new Paint();
|
||||||
|
paint.setAntiAlias(true);
|
||||||
|
paint.setTypeface(mKeyDrawParams.mKeyTextStyle);
|
||||||
|
paint.setTextSize(mKeyDrawParams.mKeyLabelSize);
|
||||||
|
return paint;
|
||||||
|
}
|
||||||
|
|
||||||
public void cancelAllMessages() {
|
public void cancelAllMessages() {
|
||||||
mDrawingHandler.cancelAllMessages();
|
mDrawingHandler.cancelAllMessages();
|
||||||
}
|
}
|
||||||
|
|
|
@ -296,17 +296,16 @@ public class MoreKeysKeyboard extends Keyboard {
|
||||||
final int padding = (int)(view.getResources()
|
final int padding = (int)(view.getResources()
|
||||||
.getDimension(R.dimen.more_keys_keyboard_key_horizontal_padding)
|
.getDimension(R.dimen.more_keys_keyboard_key_horizontal_padding)
|
||||||
+ (parentKey.hasLabelsInMoreKeys() ? minKeyWidth * LABEL_PADDING_RATIO : 0));
|
+ (parentKey.hasLabelsInMoreKeys() ? minKeyWidth * LABEL_PADDING_RATIO : 0));
|
||||||
Paint paint = null;
|
final Paint paint = view.newDefaultLabelPaint();
|
||||||
|
paint.setTextSize(parentKey.hasLabelsInMoreKeys()
|
||||||
|
? view.mKeyDrawParams.mKeyLabelSize
|
||||||
|
: view.mKeyDrawParams.mKeyLetterSize);
|
||||||
int maxWidth = minKeyWidth;
|
int maxWidth = minKeyWidth;
|
||||||
for (String moreKeySpec : parentKey.mMoreKeys) {
|
for (String moreKeySpec : parentKey.mMoreKeys) {
|
||||||
final String label = KeySpecParser.getLabel(moreKeySpec);
|
final String label = KeySpecParser.getLabel(moreKeySpec);
|
||||||
// If the label is single letter, minKeyWidth is enough to hold the label.
|
// If the label is single letter, minKeyWidth is enough to hold the label.
|
||||||
if (label != null && StringUtils.codePointCount(label) > 1) {
|
if (label != null && StringUtils.codePointCount(label) > 1) {
|
||||||
if (paint == null) {
|
final int width = (int)view.getLabelWidth(label, paint) + padding;
|
||||||
paint = new Paint();
|
|
||||||
paint.setAntiAlias(true);
|
|
||||||
}
|
|
||||||
final int width = (int)view.getDefaultLabelWidth(label, paint) + padding;
|
|
||||||
if (maxWidth < width) {
|
if (maxWidth < width) {
|
||||||
maxWidth = width;
|
maxWidth = width;
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,9 +23,7 @@ import android.graphics.drawable.Drawable;
|
||||||
import com.android.inputmethod.keyboard.Key;
|
import com.android.inputmethod.keyboard.Key;
|
||||||
import com.android.inputmethod.keyboard.Keyboard;
|
import com.android.inputmethod.keyboard.Keyboard;
|
||||||
import com.android.inputmethod.keyboard.KeyboardSwitcher;
|
import com.android.inputmethod.keyboard.KeyboardSwitcher;
|
||||||
import com.android.inputmethod.keyboard.KeyboardView;
|
|
||||||
import com.android.inputmethod.keyboard.internal.KeyboardIconsSet;
|
import com.android.inputmethod.keyboard.internal.KeyboardIconsSet;
|
||||||
import com.android.inputmethod.latin.LatinImeLogger;
|
|
||||||
import com.android.inputmethod.latin.R;
|
import com.android.inputmethod.latin.R;
|
||||||
import com.android.inputmethod.latin.SuggestedWords;
|
import com.android.inputmethod.latin.SuggestedWords;
|
||||||
import com.android.inputmethod.latin.Utils;
|
import com.android.inputmethod.latin.Utils;
|
||||||
|
@ -38,8 +36,6 @@ public class MoreSuggestions extends Keyboard {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Builder extends Keyboard.Builder<Builder.MoreSuggestionsParam> {
|
public static class Builder extends Keyboard.Builder<Builder.MoreSuggestionsParam> {
|
||||||
private static final boolean DBG = LatinImeLogger.sDBG;
|
|
||||||
|
|
||||||
private final MoreSuggestionsView mPaneView;
|
private final MoreSuggestionsView mPaneView;
|
||||||
private SuggestedWords mSuggestions;
|
private SuggestedWords mSuggestions;
|
||||||
private int mFromPos;
|
private int mFromPos;
|
||||||
|
@ -56,10 +52,8 @@ public class MoreSuggestions extends Keyboard {
|
||||||
public int mDividerWidth;
|
public int mDividerWidth;
|
||||||
|
|
||||||
public int layout(SuggestedWords suggestions, int fromPos, int maxWidth, int minWidth,
|
public int layout(SuggestedWords suggestions, int fromPos, int maxWidth, int minWidth,
|
||||||
int maxRow, KeyboardView view) {
|
int maxRow, MoreSuggestionsView view) {
|
||||||
clearKeys();
|
clearKeys();
|
||||||
final Paint paint = new Paint();
|
|
||||||
paint.setAntiAlias(true);
|
|
||||||
final Resources res = view.getContext().getResources();
|
final Resources res = view.getContext().getResources();
|
||||||
mDivider = res.getDrawable(R.drawable.more_suggestions_divider);
|
mDivider = res.getDrawable(R.drawable.more_suggestions_divider);
|
||||||
// TODO: Drawable itself should have an alpha value.
|
// TODO: Drawable itself should have an alpha value.
|
||||||
|
@ -67,6 +61,7 @@ public class MoreSuggestions extends Keyboard {
|
||||||
mDividerWidth = mDivider.getIntrinsicWidth();
|
mDividerWidth = mDivider.getIntrinsicWidth();
|
||||||
final int padding = (int) res.getDimension(
|
final int padding = (int) res.getDimension(
|
||||||
R.dimen.more_suggestions_key_horizontal_padding);
|
R.dimen.more_suggestions_key_horizontal_padding);
|
||||||
|
final Paint paint = view.newDefaultLabelPaint();
|
||||||
|
|
||||||
int row = 0;
|
int row = 0;
|
||||||
int pos = fromPos, rowStartPos = fromPos;
|
int pos = fromPos, rowStartPos = fromPos;
|
||||||
|
@ -74,7 +69,7 @@ public class MoreSuggestions extends Keyboard {
|
||||||
while (pos < size) {
|
while (pos < size) {
|
||||||
final String word = suggestions.getWord(pos).toString();
|
final String word = suggestions.getWord(pos).toString();
|
||||||
// TODO: Should take care of text x-scaling.
|
// TODO: Should take care of text x-scaling.
|
||||||
mWidths[pos] = (int)view.getDefaultLabelWidth(word, paint) + padding;
|
mWidths[pos] = (int)view.getLabelWidth(word, paint) + padding;
|
||||||
final int numColumn = pos - rowStartPos + 1;
|
final int numColumn = pos - rowStartPos + 1;
|
||||||
final int columnWidth =
|
final int columnWidth =
|
||||||
(maxWidth - mDividerWidth * (numColumn - 1)) / numColumn;
|
(maxWidth - mDividerWidth * (numColumn - 1)) / numColumn;
|
||||||
|
|
|
@ -43,17 +43,17 @@ import com.android.inputmethod.latin.R;
|
||||||
public class MoreSuggestionsView extends KeyboardView implements MoreKeysPanel {
|
public class MoreSuggestionsView extends KeyboardView implements MoreKeysPanel {
|
||||||
private final int[] mCoordinates = new int[2];
|
private final int[] mCoordinates = new int[2];
|
||||||
|
|
||||||
private final KeyDetector mModalPanelKeyDetector;
|
final KeyDetector mModalPanelKeyDetector;
|
||||||
private final KeyDetector mSlidingPanelKeyDetector;
|
private final KeyDetector mSlidingPanelKeyDetector;
|
||||||
|
|
||||||
private Controller mController;
|
private Controller mController;
|
||||||
private KeyboardActionListener mListener;
|
KeyboardActionListener mListener;
|
||||||
private int mOriginX;
|
private int mOriginX;
|
||||||
private int mOriginY;
|
private int mOriginY;
|
||||||
|
|
||||||
private static final TimerProxy EMPTY_TIMER_PROXY = new TimerProxy.Adapter();
|
static final TimerProxy EMPTY_TIMER_PROXY = new TimerProxy.Adapter();
|
||||||
|
|
||||||
private final KeyboardActionListener mSuggestionsPaneListener =
|
final KeyboardActionListener mSuggestionsPaneListener =
|
||||||
new KeyboardActionListener.Adapter() {
|
new KeyboardActionListener.Adapter() {
|
||||||
@Override
|
@Override
|
||||||
public void onPressKey(int primaryCode) {
|
public void onPressKey(int primaryCode) {
|
||||||
|
|
|
@ -62,7 +62,6 @@ import com.android.inputmethod.latin.R;
|
||||||
import com.android.inputmethod.latin.StaticInnerHandlerWrapper;
|
import com.android.inputmethod.latin.StaticInnerHandlerWrapper;
|
||||||
import com.android.inputmethod.latin.Suggest;
|
import com.android.inputmethod.latin.Suggest;
|
||||||
import com.android.inputmethod.latin.SuggestedWords;
|
import com.android.inputmethod.latin.SuggestedWords;
|
||||||
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
|
|
||||||
import com.android.inputmethod.latin.Utils;
|
import com.android.inputmethod.latin.Utils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
Loading…
Reference in New Issue