From 4486d7727038ca6be2dda16cc213549dc080ba8d Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" <takaoka@google.com> Date: Mon, 12 Sep 2011 16:29:24 +0900 Subject: [PATCH] Introduce autoXScale label option Bug: 5267649 Change-Id: I7fdcb98c209b7ccf73075ef3a4e758782fe161e3 --- java/res/values/attrs.xml | 1 + java/res/xml-sw600dp/kbd_phone_shift.xml | 2 ++ java/res/xml-sw768dp/kbd_phone_shift.xml | 2 ++ java/res/xml/kbd_key_styles.xml | 4 ++++ java/res/xml/kbd_phone_shift.xml | 4 ++-- java/src/com/android/inputmethod/keyboard/Key.java | 5 +++++ .../android/inputmethod/keyboard/KeyboardView.java | 14 +++++++++++--- 7 files changed, 27 insertions(+), 5 deletions(-) diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml index a456b221b8..a876e28890 100644 --- a/java/res/values/attrs.xml +++ b/java/res/values/attrs.xml @@ -217,6 +217,7 @@ <flag name="hasHintLabel" value="0x800" /> <flag name="withIconLeft" value="0x1000" /> <flag name="withIconRight" value="0x2000" /> + <flag name="autoXScale" value="0x4000" /> </attr> <!-- The icon to display on the key instead of the label. --> <attr name="keyIcon" format="enum"> diff --git a/java/res/xml-sw600dp/kbd_phone_shift.xml b/java/res/xml-sw600dp/kbd_phone_shift.xml index 2b6936dce4..4c4f8ad12f 100644 --- a/java/res/xml-sw600dp/kbd_phone_shift.xml +++ b/java/res/xml-sw600dp/kbd_phone_shift.xml @@ -41,6 +41,7 @@ <Key latin:code="44" latin:keyLabel="@string/label_pause_key" + latin:keyLabelOption="followKeyHintLabelRatio|autoXScale" latin:keyWidth="9.25%p" /> <Key latin:keyStyle="num1KeyStyle" @@ -69,6 +70,7 @@ <Key latin:code="59" latin:keyLabel="@string/label_wait_key" + latin:keyLabelOption="followKeyHintLabelRatio|autoXScale" latin:keyWidth="9.25%p" /> <Key latin:keyStyle="num4KeyStyle" diff --git a/java/res/xml-sw768dp/kbd_phone_shift.xml b/java/res/xml-sw768dp/kbd_phone_shift.xml index 646f0b8671..46f67d3116 100644 --- a/java/res/xml-sw768dp/kbd_phone_shift.xml +++ b/java/res/xml-sw768dp/kbd_phone_shift.xml @@ -43,6 +43,7 @@ <Key latin:code="44" latin:keyLabel="@string/label_pause_key" + latin:keyLabelOption="followKeyHintLabelRatio|autoXScale" latin:keyWidth="8.047%p" /> <Key latin:keyStyle="num1KeyStyle" @@ -72,6 +73,7 @@ <Key latin:code="59" latin:keyLabel="@string/label_wait_key" + latin:keyLabelOption="followKeyHintLabelRatio|autoXScale" latin:keyWidth="8.047%p" /> <Key latin:keyStyle="num4KeyStyle" diff --git a/java/res/xml/kbd_key_styles.xml b/java/res/xml/kbd_key_styles.xml index 12eab22b98..84b1900f01 100644 --- a/java/res/xml/kbd_key_styles.xml +++ b/java/res/xml/kbd_key_styles.xml @@ -101,6 +101,7 @@ latin:styleName="returnKeyStyle" latin:code="@integer/key_return" latin:keyLabel="@string/label_go_key" + latin:keyLabelOption="autoXScale" latin:parentStyle="functionalKeyStyle" /> </case> <case @@ -110,6 +111,7 @@ latin:styleName="returnKeyStyle" latin:code="@integer/key_return" latin:keyLabel="@string/label_next_key" + latin:keyLabelOption="autoXScale" latin:parentStyle="functionalKeyStyle" /> </case> <case @@ -119,6 +121,7 @@ latin:styleName="returnKeyStyle" latin:code="@integer/key_return" latin:keyLabel="@string/label_done_key" + latin:keyLabelOption="autoXScale" latin:parentStyle="functionalKeyStyle" /> </case> <case @@ -128,6 +131,7 @@ latin:styleName="returnKeyStyle" latin:code="@integer/key_return" latin:keyLabel="@string/label_send_key" + latin:keyLabelOption="autoXScale" latin:parentStyle="functionalKeyStyle" /> </case> <case diff --git a/java/res/xml/kbd_phone_shift.xml b/java/res/xml/kbd_phone_shift.xml index 89a9bd058b..5be9bf9a9e 100644 --- a/java/res/xml/kbd_phone_shift.xml +++ b/java/res/xml/kbd_phone_shift.xml @@ -49,7 +49,7 @@ <Key latin:code="44" latin:keyLabel="@string/label_pause_key" - latin:keyLabelOption="followKeyHintLabelRatio" /> + latin:keyLabelOption="followKeyHintLabelRatio|autoXScale" /> <Key latin:keyLabel="," latin:keyStyle="numKeyStyle" /> @@ -65,7 +65,7 @@ <Key latin:code="59" latin:keyLabel="@string/label_wait_key" - latin:keyLabelOption="followKeyHintLabelRatio" /> + latin:keyLabelOption="followKeyHintLabelRatio|autoXScale" /> <Key latin:keyLabel="#" latin:keyStyle="numKeyStyle" /> diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java index 4ccb27e4cb..06d248e3a7 100644 --- a/java/src/com/android/inputmethod/keyboard/Key.java +++ b/java/src/com/android/inputmethod/keyboard/Key.java @@ -64,6 +64,7 @@ public class Key { private static final int LABEL_OPTION_HAS_HINT_LABEL = 0x800; private static final int LABEL_OPTION_WITH_ICON_LEFT = 0x1000; private static final int LABEL_OPTION_WITH_ICON_RIGHT = 0x2000; + private static final int LABEL_OPTION_AUTO_X_SCALE = 0x4000; /** Icon to display instead of a label. Icon takes precedence over a label */ private Drawable mIcon; @@ -439,6 +440,10 @@ public class Key { return (mLabelOption & LABEL_OPTION_WITH_ICON_RIGHT) != 0; } + public boolean needsXScale() { + return (mLabelOption & LABEL_OPTION_AUTO_X_SCALE) != 0; + } + public Drawable getIcon() { return mIcon; } diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java index acb76cc78c..5a44460a1c 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java @@ -91,6 +91,9 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy { // TODO: Use resource parameter for this value. private static final float LABEL_ICON_MARGIN = 0.05f; + // The maximum key label width in the proportion to the key width. + private static final float MAX_LABEL_RATIO = 0.90f; + // Main keyboard private Keyboard mKeyboard; private final KeyDrawParams mKeyDrawParams; @@ -572,18 +575,22 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy { paint.setTextAlign(Align.LEFT); } else if (key.hasLabelWithIconLeft() && icon != null) { labelWidth = getLabelWidth(label, paint) + icon.getIntrinsicWidth() - + (int)(LABEL_ICON_MARGIN * keyWidth); + + LABEL_ICON_MARGIN * keyWidth; positionX = centerX + labelWidth / 2; paint.setTextAlign(Align.RIGHT); } else if (key.hasLabelWithIconRight() && icon != null) { labelWidth = getLabelWidth(label, paint) + icon.getIntrinsicWidth() - + (int)(LABEL_ICON_MARGIN * keyWidth); + + LABEL_ICON_MARGIN * keyWidth; positionX = centerX - labelWidth / 2; paint.setTextAlign(Align.LEFT); } else { positionX = centerX; paint.setTextAlign(Align.CENTER); } + if (key.needsXScale()) { + paint.setTextScaleX( + Math.min(1.0f, (keyWidth * MAX_LABEL_RATIO) / getLabelWidth(label, paint))); + } if (key.hasUppercaseLetter() && isManualTemporaryUpperCase) { paint.setColor(params.mKeyTextInactivatedColor); @@ -598,8 +605,9 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy { paint.setColor(Color.TRANSPARENT); } canvas.drawText(label, 0, label.length(), positionX, baseline, paint); - // Turn off drop shadow + // Turn off drop shadow and reset x-scale. paint.setShadowLayer(0, 0, 0, 0); + paint.setTextScaleX(1.0f); if (icon != null) { final int iconWidth = icon.getIntrinsicWidth(); -- GitLab