diff options
-rw-r--r-- | java/res/values/attrs.xml | 2 | ||||
-rw-r--r-- | java/res/values/themes-lxx-dark.xml | 1 | ||||
-rw-r--r-- | java/res/values/themes-lxx-light.xml | 1 | ||||
-rw-r--r-- | java/res/xml-sw600dp/key_styles_enter.xml | 28 | ||||
-rw-r--r-- | java/res/xml/key_styles_common.xml | 23 | ||||
-rw-r--r-- | java/res/xml/key_styles_enter.xml | 28 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/keyboard/Key.java | 5 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/keyboard/KeyboardView.java | 24 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/keyboard/MoreKeysKeyboard.java | 4 |
9 files changed, 90 insertions, 26 deletions
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml index 2e81bdf48..f1253b40c 100644 --- a/java/res/values/attrs.xml +++ b/java/res/values/attrs.xml @@ -338,6 +338,8 @@ <!-- If true, use functionalTextColor instead of ketTextColor to drawing the label on the key --> <flag name="followFunctionalTextColor" value="0x80000" /> + <!-- Keep aspect ratio of key background. --> + <flag name="keepBackgroundAspectRatio" value="0x100000" /> <!-- If true, disable keyHintLabel. --> <flag name="disableKeyHintLabel" value="0x40000000" /> <!-- If true, disable additionalMoreKeys. --> diff --git a/java/res/values/themes-lxx-dark.xml b/java/res/values/themes-lxx-dark.xml index 76e9d33bf..5b2681359 100644 --- a/java/res/values/themes-lxx-dark.xml +++ b/java/res/values/themes-lxx-dark.xml @@ -114,6 +114,7 @@ <item name="android:background">@android:color/transparent</item> <item name="keyBackground">@drawable/btn_keyboard_key_popup_action_lxx_dark</item> <item name="divider">@null</item> + <item name="keyLabelFlags">keepBackgroundAspectRatio</item> </style> <style name="SuggestionStripView.LXX_Dark" diff --git a/java/res/values/themes-lxx-light.xml b/java/res/values/themes-lxx-light.xml index 5cd84171d..f607807c8 100644 --- a/java/res/values/themes-lxx-light.xml +++ b/java/res/values/themes-lxx-light.xml @@ -114,6 +114,7 @@ <item name="android:background">@android:color/transparent</item> <item name="keyBackground">@drawable/btn_keyboard_key_popup_action_lxx_light</item> <item name="divider">@null</item> + <item name="keyLabelFlags">keepBackgroundAspectRatio</item> </style> <style name="SuggestionStripView.LXX_Light" diff --git a/java/res/xml-sw600dp/key_styles_enter.xml b/java/res/xml-sw600dp/key_styles_enter.xml index d066d2d12..63ef2f8f9 100644 --- a/java/res/xml-sw600dp/key_styles_enter.xml +++ b/java/res/xml-sw600dp/key_styles_enter.xml @@ -80,13 +80,27 @@ </default> </switch> <!-- Enter key style --> - <key-style - latin:styleName="defaultEnterKeyStyle" - latin:keySpec="!icon/enter_key|!code/key_enter" - latin:keyLabelFlags="preserveCase|autoXScale|followKeyLabelRatio|followFunctionalTextColor" - latin:keyActionFlags="noKeyPreview" - latin:backgroundType="action" - latin:parentStyle="navigateMoreKeysStyle" /> + <switch> + <case latin:keyboardTheme="ICS|KLP"> + <key-style + latin:styleName="defaultEnterKeyStyle" + latin:keySpec="!icon/enter_key|!code/key_enter" + latin:keyLabelFlags="preserveCase|autoXScale|followKeyLabelRatio|followFunctionalTextColor" + latin:keyActionFlags="noKeyPreview" + latin:backgroundType="action" + latin:parentStyle="navigateMoreKeysStyle" /> + </case> + <!-- keyboardTheme="LXXLight|LXXDark" --> + <default> + <key-style + latin:styleName="defaultEnterKeyStyle" + latin:keySpec="!icon/enter_key|!code/key_enter" + latin:keyLabelFlags="preserveCase|autoXScale|followKeyLabelRatio|followFunctionalTextColor|keepBackgroundAspectRatio" + latin:keyActionFlags="noKeyPreview" + latin:backgroundType="action" + latin:parentStyle="navigateMoreKeysStyle" /> + </default> + </switch> <include latin:keyboardLayout="@xml/key_styles_actions" /> <switch> <!-- Shift + Enter in textMultiLine field. --> diff --git a/java/res/xml/key_styles_common.xml b/java/res/xml/key_styles_common.xml index 43ee26b07..b36ddf236 100644 --- a/java/res/xml/key_styles_common.xml +++ b/java/res/xml/key_styles_common.xml @@ -80,11 +80,24 @@ latin:keyActionFlags="isRepeatable|noKeyPreview" latin:backgroundType="functional" /> <!-- emojiKeyStyle must be defined before including @xml/key_syles_enter. --> - <key-style - latin:styleName="emojiKeyStyle" - latin:keySpec="!icon/emoji_action_key|!code/key_emoji" - latin:keyActionFlags="noKeyPreview" - latin:backgroundType="action" /> + <switch> + <case latin:keyboardTheme="ICS|KLP"> + <key-style + latin:styleName="emojiKeyStyle" + latin:keySpec="!icon/emoji_action_key|!code/key_emoji" + latin:keyActionFlags="noKeyPreview" + latin:backgroundType="action" /> + </case> + <!-- keyboardTheme="LXXLight|LXXDark" --> + <default> + <key-style + latin:styleName="emojiKeyStyle" + latin:keySpec="!icon/emoji_action_key|!code/key_emoji" + latin:keyLabelFlags="keepBackgroundAspectRatio" + latin:keyActionFlags="noKeyPreview" + latin:backgroundType="action" /> + </default> + </switch> <include latin:keyboardLayout="@xml/key_styles_enter" /> <!-- TODO: Currently there is no way to specify icon alignment per theme. --> diff --git a/java/res/xml/key_styles_enter.xml b/java/res/xml/key_styles_enter.xml index d6d01b862..564f465e9 100644 --- a/java/res/xml/key_styles_enter.xml +++ b/java/res/xml/key_styles_enter.xml @@ -212,13 +212,27 @@ </default> </switch> <!-- Enter key style --> - <key-style - latin:styleName="defaultEnterKeyStyle" - latin:keySpec="!icon/enter_key|!code/key_enter" - latin:keyLabelFlags="preserveCase|autoXScale|followKeyLabelRatio|followFunctionalTextColor" - latin:keyActionFlags="noKeyPreview" - latin:backgroundType="action" - latin:parentStyle="navigateMoreKeysStyle" /> + <switch> + <case latin:keyboardTheme="ICS|KLP"> + <key-style + latin:styleName="defaultEnterKeyStyle" + latin:keySpec="!icon/enter_key|!code/key_enter" + latin:keyLabelFlags="preserveCase|autoXScale|followKeyLabelRatio|followFunctionalTextColor" + latin:keyActionFlags="noKeyPreview" + latin:backgroundType="action" + latin:parentStyle="navigateMoreKeysStyle" /> + </case> + <!-- keyboardTheme="LXXLight|LXXDark" --> + <default> + <key-style + latin:styleName="defaultEnterKeyStyle" + latin:keySpec="!icon/enter_key|!code/key_enter" + latin:keyLabelFlags="preserveCase|autoXScale|followKeyLabelRatio|followFunctionalTextColor|keepBackgroundAspectRatio" + latin:keyActionFlags="noKeyPreview" + latin:backgroundType="action" + latin:parentStyle="navigateMoreKeysStyle" /> + </default> + </switch> <include latin:keyboardLayout="@xml/key_styles_actions" /> <switch> <!-- Shift + Enter in textMultiLine field. --> diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java index 8548544fd..86ea4c563 100644 --- a/java/src/com/android/inputmethod/keyboard/Key.java +++ b/java/src/com/android/inputmethod/keyboard/Key.java @@ -87,6 +87,7 @@ public class Key implements Comparable<Key> { private static final int LABEL_FLAGS_SHIFTED_LETTER_ACTIVATED = 0x20000; private static final int LABEL_FLAGS_FROM_CUSTOM_ACTION_LABEL = 0x40000; private static final int LABEL_FLAGS_FOLLOW_FUNCTIONAL_TEXT_COLOR = 0x80000; + private static final int LABEL_FLAGS_KEEP_BACKGROUND_ASPECT_RATIO = 0x100000; private static final int LABEL_FLAGS_DISABLE_HINT_LABEL = 0x40000000; private static final int LABEL_FLAGS_DISABLE_ADDITIONAL_MORE_KEYS = 0x80000000; @@ -697,6 +698,10 @@ public class Key implements Comparable<Key> { return (mLabelFlags & LABEL_FLAGS_AUTO_SCALE) == LABEL_FLAGS_AUTO_SCALE; } + public final boolean needsToKeepBackgroundAspectRatio(final int defaultFlags) { + return ((mLabelFlags | defaultFlags) & LABEL_FLAGS_KEEP_BACKGROUND_ASPECT_RATIO) != 0; + } + private final boolean isShiftedLetterActivated() { return (mLabelFlags & LABEL_FLAGS_SHIFTED_LETTER_ACTIVATED) != 0 && !TextUtils.isEmpty(mHintLabel); diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java index 075cd901d..bb3cbb0eb 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java @@ -340,11 +340,25 @@ public class KeyboardView extends View { // Draw key background. protected void onDrawKeyBackground(final Key key, final Canvas canvas, final Drawable background) { - final Rect padding = mKeyBackgroundPadding; - final int bgWidth = key.getDrawWidth() + padding.left + padding.right; - final int bgHeight = key.getHeight() + padding.top + padding.bottom; - final int bgX = -padding.left; - final int bgY = -padding.top; + final int keyWidth = key.getDrawWidth(); + final int keyHeight = key.getHeight(); + final int bgWidth, bgHeight, bgX, bgY; + if (key.needsToKeepBackgroundAspectRatio(mDefaultKeyLabelFlags)) { + final int intrinsicWidth = background.getIntrinsicWidth(); + final int intrinsicHeight = background.getIntrinsicHeight(); + final float minScale = Math.min( + keyWidth / (float)intrinsicWidth, keyHeight / (float)intrinsicHeight); + bgWidth = (int)(intrinsicWidth * minScale); + bgHeight = (int)(intrinsicHeight * minScale); + bgX = (keyWidth - bgWidth) / 2; + bgY = (keyHeight - bgHeight) / 2; + } else { + final Rect padding = mKeyBackgroundPadding; + bgWidth = keyWidth + padding.left + padding.right; + bgHeight = keyHeight + padding.top + padding.bottom; + bgX = -padding.left; + bgY = -padding.top; + } final Rect bounds = background.getBounds(); if (bgWidth != bounds.right || bgHeight != bounds.bottom) { background.setBounds(0, 0, bgWidth, bgHeight); diff --git a/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboard.java b/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboard.java index 73c84cd92..abcfff8a6 100644 --- a/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboard.java +++ b/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboard.java @@ -308,8 +308,8 @@ public final class MoreKeysKeyboard extends Keyboard { dividerWidth = 0; } final MoreKeySpec[] moreKeys = key.getMoreKeys(); - mParams.setParameters(moreKeys.length, key.getMoreKeysColumnNumber(), keyWidth, rowHeight, - key.getX() + key.getWidth() / 2, keyboard.mId.mWidth, + mParams.setParameters(moreKeys.length, key.getMoreKeysColumnNumber(), keyWidth, + rowHeight, key.getX() + key.getWidth() / 2, keyboard.mId.mWidth, key.isMoreKeysFixedColumn(), key.isMoreKeysFixedOrder(), dividerWidth); } |