diff options
author | 2010-10-12 15:02:44 +0900 | |
---|---|---|
committer | 2010-10-17 18:19:42 +0900 | |
commit | cd7b7d3e8febcfbcab4628d1fc5b87e809ce56cc (patch) | |
tree | 412ac20f6cc943d2c80c7c3aba4f86f5f69bbc67 | |
parent | 65100ff39cd8f123926175c2b20a3bb1f48b8698 (diff) | |
download | latinime-cd7b7d3e8febcfbcab4628d1fc5b87e809ce56cc.tar.gz latinime-cd7b7d3e8febcfbcab4628d1fc5b87e809ce56cc.tar.xz latinime-cd7b7d3e8febcfbcab4628d1fc5b87e809ce56cc.zip |
Specify keyboard metrics with physical unit "inch"
Cherrypick I44f3b2eef8086d6e0b0db53d38f08487549060c6 from Gingerbread
This change also introduces the key background drawables which has no
fixed bottom padding. Instead of relying on bottom padding in
drawable, this change also specifies Keyboard.verticalGap with
physical unit. Other keyboard related length, distance and size are
also specified by physical unit.
Bug: 3066107
Change-Id: Ib38355ebfc2f8d5b1d26c4e90eba87196fbeddfa
57 files changed, 240 insertions, 136 deletions
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal.9.png Binary files differindex 0c4820b34..01fc8ca78 100644 --- a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal.9.png +++ b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal.9.png diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off.9.png Binary files differindex 5a20da1db..af4017e2c 100644 --- a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off.9.png +++ b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off.9.png diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on.9.png Binary files differindex 4ec703d6c..4c35aca95 100644 --- a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on.9.png +++ b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on.9.png diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed.9.png Binary files differindex 93322d2e2..174f3452c 100644 --- a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed.9.png +++ b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed.9.png diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off.9.png Binary files differindex 5a9c722ce..1fcbd9a88 100644 --- a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off.9.png +++ b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off.9.png diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on.9.png Binary files differindex 99b6cb170..072753f37 100644 --- a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on.9.png +++ b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on.9.png diff --git a/java/res/drawable-hdpi/btn_keyboard_key_light_normal.9.png b/java/res/drawable-hdpi/btn_keyboard_key_light_normal.9.png Binary files differindex 7dc59bf82..1ad746053 100644 --- a/java/res/drawable-hdpi/btn_keyboard_key_light_normal.9.png +++ b/java/res/drawable-hdpi/btn_keyboard_key_light_normal.9.png diff --git a/java/res/drawable-hdpi/btn_keyboard_key_light_pressed.9.png b/java/res/drawable-hdpi/btn_keyboard_key_light_pressed.9.png Binary files differindex c150341e3..ccd59d5fa 100644 --- a/java/res/drawable-hdpi/btn_keyboard_key_light_pressed.9.png +++ b/java/res/drawable-hdpi/btn_keyboard_key_light_pressed.9.png diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal.9.png Binary files differindex 53fe9c97d..4e337fa08 100644 --- a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal.9.png +++ b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal.9.png diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off.9.png Binary files differindex 649ef9773..fe18497d8 100644 --- a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off.9.png +++ b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off.9.png diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on.9.png Binary files differindex 93f7d87c2..00aab3d5a 100644 --- a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on.9.png +++ b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on.9.png diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed.9.png Binary files differindex 8560b3ba7..ac0bfd3c1 100644 --- a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed.9.png +++ b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed.9.png diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off.9.png Binary files differindex 778abaf24..ea2f35789 100644 --- a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off.9.png +++ b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off.9.png diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on.9.png Binary files differindex 2a23945e5..6195ac0d4 100644 --- a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on.9.png +++ b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on.9.png diff --git a/java/res/drawable-mdpi/btn_keyboard_key_light_normal.9.png b/java/res/drawable-mdpi/btn_keyboard_key_light_normal.9.png Binary files differindex 6af2d8d0c..50cd06ae3 100644 --- a/java/res/drawable-mdpi/btn_keyboard_key_light_normal.9.png +++ b/java/res/drawable-mdpi/btn_keyboard_key_light_normal.9.png diff --git a/java/res/drawable-mdpi/btn_keyboard_key_light_pressed.9.png b/java/res/drawable-mdpi/btn_keyboard_key_light_pressed.9.png Binary files differindex fdaf69966..7ce52f0f5 100644 --- a/java/res/drawable-mdpi/btn_keyboard_key_light_pressed.9.png +++ b/java/res/drawable-mdpi/btn_keyboard_key_light_pressed.9.png diff --git a/java/res/layout/input_gingerbread.xml b/java/res/layout/input_gingerbread.xml index 8f59cae21..73cf0a3fa 100644 --- a/java/res/layout/input_gingerbread.xml +++ b/java/res/layout/input_gingerbread.xml @@ -25,6 +25,7 @@ android:layout_alignParentBottom="true" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingBottom="@dimen/keyboard_bottom_padding" android:background="@drawable/keyboard_dark_background" android:textStyle="bold" diff --git a/java/res/values-land/dimens.xml b/java/res/values-land/dimens.xml index 1396bff9b..043f4b363 100644 --- a/java/res/values-land/dimens.xml +++ b/java/res/values-land/dimens.xml @@ -19,13 +19,17 @@ --> <resources> - <dimen name="key_height">47dip</dimen> + <!-- key_height + key_bottom_gap = popup_key_height --> + <dimen name="key_height">0.250in</dimen> + <dimen name="key_bottom_gap">0.020in</dimen> + <dimen name="popup_key_height">0.270in</dimen> + <dimen name="keyboard_bottom_padding">0.0in</dimen> <dimen name="candidate_strip_height">38dip</dimen> <dimen name="candidate_strip_fading_edge_length">63dip</dimen> <dimen name="spacebar_vertical_correction">2dip</dimen> <!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. --> - <!-- key_height x 1.7 --> - <dimen name="mini_keyboard_slide_allowance">79.9dip</dimen> - <!-- -key_height x 1.0 --> - <dimen name="mini_keyboard_vertical_correction">-47dip</dimen> + <!-- popup_key_height x 1.7 --> + <dimen name="mini_keyboard_slide_allowance">0.459in</dimen> + <!-- popup_key_height x 1.0 --> + <dimen name="mini_keyboard_vertical_correction">-0.270in</dimen> </resources> diff --git a/java/res/values-xlarge/dimens.xml b/java/res/values-xlarge/dimens.xml index 5674ef628..d2cd6c7d1 100644 --- a/java/res/values-xlarge/dimens.xml +++ b/java/res/values-xlarge/dimens.xml @@ -19,18 +19,26 @@ --> <resources> - <dimen name="key_height">72dip</dimen> - <dimen name="candidate_strip_height">46dip</dimen> - <dimen name="spacebar_vertical_correction">0dip</dimen> - <dimen name="key_text_size">28sp</dimen> - <dimen name="key_label_text_size">16sp</dimen> - <dimen name="key_preview_height">40dip</dimen> + <!-- key_height + key_bottom_gap = popup_key_height --> + <dimen name="key_height">0.450in</dimen> + <dimen name="key_bottom_gap">0.0in</dimen> + <dimen name="popup_key_height">0.450in</dimen> + <dimen name="keyboard_bottom_padding">0.10in</dimen> + <!-- key_height x 1.6 --> + <dimen name="key_preview_height">0.720in</dimen> <!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. --> - <!-- key_height x 1.7 --> - <dimen name="mini_keyboard_slide_allowance">122.4dip</dimen> - <!-- -key_height x 1.0 --> - <dimen name="mini_keyboard_vertical_correction">-72dip</dimen> + <!-- popup_key_height x 1.7 --> + <dimen name="mini_keyboard_slide_allowance">0.765in</dimen> + <!-- popup_key_height x 1.0 --> + <dimen name="mini_keyboard_vertical_correction">-0.450in</dimen> + + <dimen name="key_text_size">0.175in</dimen> + <dimen name="key_label_text_size">0.100in</dimen> + <dimen name="key_preview_text_size_large">0.245in</dimen> <!-- We use "inch", not "dip" because this value tries dealing with physical distance related to user's finger. --> <dimen name="keyboard_vertical_correction">0.0in</dimen> + + <dimen name="candidate_strip_height">46dip</dimen> + <dimen name="spacebar_vertical_correction">0dip</dimen> </resources> diff --git a/java/res/values/dimens.xml b/java/res/values/dimens.xml index 1378be72c..2fa47ae52 100644 --- a/java/res/values/dimens.xml +++ b/java/res/values/dimens.xml @@ -19,26 +19,35 @@ --> <resources> - <dimen name="key_height">54dip</dimen> - <dimen name="bubble_pointer_offset">22dip</dimen> + <!-- key_height + key_bottom_gap = popup_key_height --> + <dimen name="key_height">0.290in</dimen> + <dimen name="key_bottom_gap">0.035in</dimen> + <dimen name="popup_key_height">0.325in</dimen> + <dimen name="keyboard_bottom_padding">0.06in</dimen> + <!-- key_height x 1.6 --> + <dimen name="key_preview_height">0.464in</dimen> + <!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. --> + <!-- popup_key_height x 1.7 --> + <dimen name="mini_keyboard_slide_allowance">0.553in</dimen> + <!-- popup_key_height x 1.0 --> + <dimen name="mini_keyboard_vertical_correction">-0.325in</dimen> + + <dimen name="key_text_size">0.13in</dimen> + <dimen name="key_label_text_size">0.083in</dimen> + <dimen name="key_preview_text_size_large">0.236in</dimen> + <dimen name="key_preview_offset">0.000in</dimen> + <!-- We use "inch", not "dip" because this value tries dealing with physical distance related + to user's finger. --> + <dimen name="keyboard_vertical_correction">-0.05in</dimen> + <dimen name="candidate_strip_height">42dip</dimen> <dimen name="candidate_strip_fading_edge_length">63dip</dimen> <dimen name="spacebar_vertical_correction">4dip</dimen> <!-- If the screen height in landscape is larger than the below value, then the keyboard will not go into extract (fullscreen) mode. --> <dimen name="max_height_for_fullscreen">2.5in</dimen> - <dimen name="key_text_size">22sp</dimen> - <dimen name="key_label_text_size">14sp</dimen> - <dimen name="key_preview_offset">0dip</dimen> - <dimen name="key_preview_height">80dip</dimen> - <!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. --> - <!-- key_height x 1.7 --> - <dimen name="mini_keyboard_slide_allowance">91.8dip</dimen> - <!-- -key_height x 1.0 --> - <dimen name="mini_keyboard_vertical_correction">-54dip</dimen> + <dimen name="bubble_pointer_offset">22dip</dimen> + <dimen name="key_hysteresis_distance">0.05in</dimen> - <!-- We use "inch", not "dip" because this value tries dealing with physical distance related - to user's finger. --> - <dimen name="keyboard_vertical_correction">-0.06in</dimen> <dimen name="candidate_min_touchable_width">0.3in</dimen> </resources> diff --git a/java/res/xml-da/kbd_qwerty.xml b/java/res/xml-da/kbd_qwerty.xml index c66290c62..66771c287 100644 --- a/java/res/xml-da/kbd_qwerty.xml +++ b/java/res/xml-da/kbd_qwerty.xml @@ -28,10 +28,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="9.09%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="q" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml-da/kbd_qwerty_black.xml b/java/res/xml-da/kbd_qwerty_black.xml index 7f6ffaa2e..d89204ae6 100644 --- a/java/res/xml-da/kbd_qwerty_black.xml +++ b/java/res/xml-da/kbd_qwerty_black.xml @@ -28,10 +28,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="9.09%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="q" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml-de/kbd_qwerty.xml b/java/res/xml-de/kbd_qwerty.xml index 5d40d39b7..30d8de0cf 100644 --- a/java/res/xml-de/kbd_qwerty.xml +++ b/java/res/xml-de/kbd_qwerty.xml @@ -22,10 +22,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="10%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="q" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml-de/kbd_qwerty_black.xml b/java/res/xml-de/kbd_qwerty_black.xml index 9842dd51d..f394c8d02 100644 --- a/java/res/xml-de/kbd_qwerty_black.xml +++ b/java/res/xml-de/kbd_qwerty_black.xml @@ -22,10 +22,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="10%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="q" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml-fr/kbd_qwerty.xml b/java/res/xml-fr/kbd_qwerty.xml index 9b82e824d..9a4a8796b 100644 --- a/java/res/xml-fr/kbd_qwerty.xml +++ b/java/res/xml-fr/kbd_qwerty.xml @@ -22,10 +22,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="10%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="a" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml-fr/kbd_qwerty_black.xml b/java/res/xml-fr/kbd_qwerty_black.xml index c3f122fa7..be2befbe8 100644 --- a/java/res/xml-fr/kbd_qwerty_black.xml +++ b/java/res/xml-fr/kbd_qwerty_black.xml @@ -22,10 +22,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="10%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="a" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml-iw/kbd_qwerty.xml b/java/res/xml-iw/kbd_qwerty.xml index 8ae7187a2..7f66eef56 100644 --- a/java/res/xml-iw/kbd_qwerty.xml +++ b/java/res/xml-iw/kbd_qwerty.xml @@ -22,10 +22,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="10%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="ק" latin:horizontalGap="5%p" diff --git a/java/res/xml-iw/kbd_qwerty_black.xml b/java/res/xml-iw/kbd_qwerty_black.xml index 1435e1e13..80ade2020 100644 --- a/java/res/xml-iw/kbd_qwerty_black.xml +++ b/java/res/xml-iw/kbd_qwerty_black.xml @@ -22,10 +22,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="10%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="ק" latin:horizontalGap="5%p" diff --git a/java/res/xml-nb/kbd_qwerty.xml b/java/res/xml-nb/kbd_qwerty.xml index 0efe2a177..96a86b013 100644 --- a/java/res/xml-nb/kbd_qwerty.xml +++ b/java/res/xml-nb/kbd_qwerty.xml @@ -28,10 +28,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="9.09%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="q" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml-nb/kbd_qwerty_black.xml b/java/res/xml-nb/kbd_qwerty_black.xml index c7bbf943e..4adeb4801 100644 --- a/java/res/xml-nb/kbd_qwerty_black.xml +++ b/java/res/xml-nb/kbd_qwerty_black.xml @@ -28,10 +28,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="9.09%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="q" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml-ru/kbd_qwerty.xml b/java/res/xml-ru/kbd_qwerty.xml index e40982855..57114a8ea 100644 --- a/java/res/xml-ru/kbd_qwerty.xml +++ b/java/res/xml-ru/kbd_qwerty.xml @@ -22,10 +22,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="9.09%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="й" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml-ru/kbd_qwerty_black.xml b/java/res/xml-ru/kbd_qwerty_black.xml index 784f7457f..8f2f599c3 100644 --- a/java/res/xml-ru/kbd_qwerty_black.xml +++ b/java/res/xml-ru/kbd_qwerty_black.xml @@ -22,10 +22,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="9.09%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="й" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml-sr/kbd_qwerty.xml b/java/res/xml-sr/kbd_qwerty.xml index 703c188cc..1a657055a 100644 --- a/java/res/xml-sr/kbd_qwerty.xml +++ b/java/res/xml-sr/kbd_qwerty.xml @@ -23,10 +23,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="9.09%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="љ" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml-sr/kbd_qwerty_black.xml b/java/res/xml-sr/kbd_qwerty_black.xml index fe80ef676..e4b09c717 100644 --- a/java/res/xml-sr/kbd_qwerty_black.xml +++ b/java/res/xml-sr/kbd_qwerty_black.xml @@ -23,10 +23,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="9.09%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="љ" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml-sv/kbd_qwerty.xml b/java/res/xml-sv/kbd_qwerty.xml index 24a2e0657..8819159e8 100644 --- a/java/res/xml-sv/kbd_qwerty.xml +++ b/java/res/xml-sv/kbd_qwerty.xml @@ -30,10 +30,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="9.09%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="q" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml-sv/kbd_qwerty_black.xml b/java/res/xml-sv/kbd_qwerty_black.xml index ec83dec2a..2532fca8c 100644 --- a/java/res/xml-sv/kbd_qwerty_black.xml +++ b/java/res/xml-sv/kbd_qwerty_black.xml @@ -30,10 +30,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="9.09%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="q" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml-xlarge/kbd_qwerty.xml b/java/res/xml-xlarge/kbd_qwerty.xml index 740e7f5f2..b72503414 100644 --- a/java/res/xml-xlarge/kbd_qwerty.xml +++ b/java/res/xml-xlarge/kbd_qwerty.xml @@ -22,7 +22,7 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="7.5%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > <!-- This row is intentionally not marked as a top row --> diff --git a/java/res/xml-xlarge/popup_smileys.xml b/java/res/xml-xlarge/popup_smileys.xml index cf30a2461..2cfcf741d 100644 --- a/java/res/xml-xlarge/popup_smileys.xml +++ b/java/res/xml-xlarge/popup_smileys.xml @@ -23,7 +23,7 @@ latin:keyWidth="7.5%p" latin:horizontalGap="0px" latin:verticalGap="0px" - latin:keyHeight="@dimen/key_height" + latin:keyHeight="@dimen/popup_key_height" > <Row latin:rowEdgeFlags="top" diff --git a/java/res/xml/kbd_phone.xml b/java/res/xml/kbd_phone.xml index dc88e2b24..17e7ba20b 100644 --- a/java/res/xml/kbd_phone.xml +++ b/java/res/xml/kbd_phone.xml @@ -22,7 +22,7 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="26.67%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > <Row diff --git a/java/res/xml/kbd_phone_black.xml b/java/res/xml/kbd_phone_black.xml index 52479459c..6ade277d9 100644 --- a/java/res/xml/kbd_phone_black.xml +++ b/java/res/xml/kbd_phone_black.xml @@ -22,7 +22,7 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="26.67%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > <Row diff --git a/java/res/xml/kbd_phone_symbols.xml b/java/res/xml/kbd_phone_symbols.xml index 1400d3670..5062d4707 100644 --- a/java/res/xml/kbd_phone_symbols.xml +++ b/java/res/xml/kbd_phone_symbols.xml @@ -22,7 +22,7 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="26.67%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > <Row diff --git a/java/res/xml/kbd_phone_symbols_black.xml b/java/res/xml/kbd_phone_symbols_black.xml index 8b683cc6c..2a6932a9e 100644 --- a/java/res/xml/kbd_phone_symbols_black.xml +++ b/java/res/xml/kbd_phone_symbols_black.xml @@ -22,7 +22,7 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="26.67%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > <Row diff --git a/java/res/xml/kbd_popup_narrow_template.xml b/java/res/xml/kbd_popup_narrow_template.xml index ed3b13003..23c686e8b 100644 --- a/java/res/xml/kbd_popup_narrow_template.xml +++ b/java/res/xml/kbd_popup_narrow_template.xml @@ -22,6 +22,6 @@ android:keyWidth="9.45%p" android:horizontalGap="0px" android:verticalGap="0px" - android:keyHeight="@dimen/key_height" + android:keyHeight="@dimen/popup_key_height" > </Keyboard> diff --git a/java/res/xml/kbd_popup_template.xml b/java/res/xml/kbd_popup_template.xml index cbb705835..f1aa86f39 100644 --- a/java/res/xml/kbd_popup_template.xml +++ b/java/res/xml/kbd_popup_template.xml @@ -22,6 +22,6 @@ latin:keyWidth="10%p" latin:horizontalGap="0px" latin:verticalGap="0px" - latin:keyHeight="@dimen/key_height" + latin:keyHeight="@dimen/popup_key_height" > </Keyboard> diff --git a/java/res/xml/kbd_qwerty.xml b/java/res/xml/kbd_qwerty.xml index c14c7fa0c..21a7ccb78 100644 --- a/java/res/xml/kbd_qwerty.xml +++ b/java/res/xml/kbd_qwerty.xml @@ -22,10 +22,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="10%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="q" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml/kbd_qwerty_black.xml b/java/res/xml/kbd_qwerty_black.xml index e1aa4f323..adb10dcfb 100644 --- a/java/res/xml/kbd_qwerty_black.xml +++ b/java/res/xml/kbd_qwerty_black.xml @@ -22,10 +22,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="10%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="q" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml/kbd_symbols.xml b/java/res/xml/kbd_symbols.xml index 4cdc53947..4ce9a867b 100644 --- a/java/res/xml/kbd_symbols.xml +++ b/java/res/xml/kbd_symbols.xml @@ -22,7 +22,7 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="10%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > <Row diff --git a/java/res/xml/kbd_symbols_black.xml b/java/res/xml/kbd_symbols_black.xml index cb695f534..dedd2da08 100644 --- a/java/res/xml/kbd_symbols_black.xml +++ b/java/res/xml/kbd_symbols_black.xml @@ -22,7 +22,7 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="10%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > <Row diff --git a/java/res/xml/kbd_symbols_shift.xml b/java/res/xml/kbd_symbols_shift.xml index e346384aa..52afa38e3 100644 --- a/java/res/xml/kbd_symbols_shift.xml +++ b/java/res/xml/kbd_symbols_shift.xml @@ -22,7 +22,7 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="10%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > <Row diff --git a/java/res/xml/kbd_symbols_shift_black.xml b/java/res/xml/kbd_symbols_shift_black.xml index a15749212..c1bd4e395 100644 --- a/java/res/xml/kbd_symbols_shift_black.xml +++ b/java/res/xml/kbd_symbols_shift_black.xml @@ -22,7 +22,7 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="10%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > <Row diff --git a/java/res/xml/popup_comma.xml b/java/res/xml/popup_comma.xml index 4e88f26c4..cef836acd 100644 --- a/java/res/xml/popup_comma.xml +++ b/java/res/xml/popup_comma.xml @@ -23,7 +23,7 @@ latin:keyWidth="10%p" latin:horizontalGap="0px" latin:verticalGap="0px" - latin:keyHeight="@dimen/key_height" + latin:keyHeight="@dimen/popup_key_height" > <Row latin:rowEdgeFlags="top|bottom" diff --git a/java/res/xml/popup_domains.xml b/java/res/xml/popup_domains.xml index c110ef6c2..5f92e2f74 100644 --- a/java/res/xml/popup_domains.xml +++ b/java/res/xml/popup_domains.xml @@ -23,7 +23,7 @@ latin:keyWidth="15%p" latin:horizontalGap="0px" latin:verticalGap="0px" - latin:keyHeight="@dimen/key_height" + latin:keyHeight="@dimen/popup_key_height" > <Row latin:rowEdgeFlags="top|bottom" diff --git a/java/res/xml/popup_mic.xml b/java/res/xml/popup_mic.xml index f5ef6eeb0..99c97ce39 100644 --- a/java/res/xml/popup_mic.xml +++ b/java/res/xml/popup_mic.xml @@ -23,7 +23,7 @@ latin:keyWidth="10%p" latin:horizontalGap="0px" latin:verticalGap="0px" - latin:keyHeight="@dimen/key_height" + latin:keyHeight="@dimen/popup_key_height" > <Row latin:rowEdgeFlags="top|bottom" diff --git a/java/res/xml/popup_punctuation.xml b/java/res/xml/popup_punctuation.xml index ecbf09f72..76572b06a 100644 --- a/java/res/xml/popup_punctuation.xml +++ b/java/res/xml/popup_punctuation.xml @@ -23,7 +23,7 @@ latin:keyWidth="10%p" latin:horizontalGap="0px" latin:verticalGap="0px" - latin:keyHeight="@dimen/key_height" + latin:keyHeight="@dimen/popup_key_height" > <Row latin:rowEdgeFlags="top" diff --git a/java/res/xml/popup_smileys.xml b/java/res/xml/popup_smileys.xml index 33006f6ec..2f082318a 100644 --- a/java/res/xml/popup_smileys.xml +++ b/java/res/xml/popup_smileys.xml @@ -23,7 +23,7 @@ latin:keyWidth="15%p" latin:horizontalGap="0px" latin:verticalGap="0px" - latin:keyHeight="@dimen/key_height" + latin:keyHeight="@dimen/popup_key_height" > <Row latin:rowEdgeFlags="top" diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboard.java b/java/src/com/android/inputmethod/latin/LatinKeyboard.java index e10346570..246df5fc4 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboard.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboard.java @@ -86,6 +86,10 @@ public class LatinKeyboard extends BaseKeyboard { // TODO: generalize for any keyboardId private boolean mIsBlackSym; + // TODO: remove this attribute when either Keyboard.mDefaultVerticalGap or Key.parent becomes + // non-private. + private final int mVerticalGap; + private static final int SHIFT_OFF = 0; private static final int SHIFT_ON = 1; private static final int SHIFT_LOCKED = 2; @@ -133,6 +137,8 @@ public class LatinKeyboard extends BaseKeyboard { mIsAlphaKeyboard = xmlLayoutResId == R.xml.kbd_qwerty || xmlLayoutResId == R.xml.kbd_qwerty_black; mSpaceKeyIndex = indexOf(LatinIME.KEYCODE_SPACE); + // TODO remove this initialization after cleanup + mVerticalGap = super.getVerticalGap(); } @Override @@ -168,31 +174,30 @@ public class LatinKeyboard extends BaseKeyboard { } public void setImeOptions(Resources res, int mode, int options) { - if (mEnterKey != null) { - switch (options & (EditorInfo.IME_MASK_ACTION|EditorInfo.IME_FLAG_NO_ENTER_ACTION)) { - case EditorInfo.IME_ACTION_GO: - resetKeyAttributes(mEnterKey, res.getText(R.string.label_go_key)); - break; - case EditorInfo.IME_ACTION_NEXT: - resetKeyAttributes(mEnterKey, res.getText(R.string.label_next_key)); - break; - case EditorInfo.IME_ACTION_DONE: - resetKeyAttributes(mEnterKey, res.getText(R.string.label_done_key)); - break; - case EditorInfo.IME_ACTION_SEARCH: - resetKeyAttributes(mEnterKey, null); - mEnterKey.iconPreview = res.getDrawable( - R.drawable.sym_keyboard_feedback_search); - mEnterKey.icon = res.getDrawable(mIsBlackSym ? - R.drawable.sym_bkeyboard_search : R.drawable.sym_keyboard_search); - break; - case EditorInfo.IME_ACTION_SEND: - resetKeyAttributes(mEnterKey, res.getText(R.string.label_send_key)); - break; - } - // Set the initial size of the preview icon - setDefaultBounds(mEnterKey.iconPreview); + if (mEnterKey == null) + return; + switch (options & (EditorInfo.IME_MASK_ACTION | EditorInfo.IME_FLAG_NO_ENTER_ACTION)) { + case EditorInfo.IME_ACTION_GO: + resetKeyAttributes(mEnterKey, res.getText(R.string.label_go_key)); + break; + case EditorInfo.IME_ACTION_NEXT: + resetKeyAttributes(mEnterKey, res.getText(R.string.label_next_key)); + break; + case EditorInfo.IME_ACTION_DONE: + resetKeyAttributes(mEnterKey, res.getText(R.string.label_done_key)); + break; + case EditorInfo.IME_ACTION_SEARCH: + resetKeyAttributes(mEnterKey, null); + mEnterKey.iconPreview = res.getDrawable(R.drawable.sym_keyboard_feedback_search); + mEnterKey.icon = res.getDrawable(mIsBlackSym ? R.drawable.sym_bkeyboard_search + : R.drawable.sym_keyboard_search); + break; + case EditorInfo.IME_ACTION_SEND: + resetKeyAttributes(mEnterKey, res.getText(R.string.label_send_key)); + break; } + // Set the initial size of the preview icon + setDefaultBounds(mEnterKey.iconPreview); } public void enableShiftLock() { @@ -663,6 +668,7 @@ public class LatinKeyboard extends BaseKeyboard { return textSize; } + // TODO LatinKey could be static class class LatinKey extends BaseKeyboard.Key { // functional normal state (with properties) @@ -711,6 +717,8 @@ public class LatinKeyboard extends BaseKeyboard { */ @Override public boolean isInside(int x, int y) { + // TODO This should be done by parent.isInside(this, x, y) + // if Key.parent were protected. boolean result = LatinKeyboard.this.isInside(this, x, y); return result; } @@ -730,6 +738,15 @@ public class LatinKeyboard extends BaseKeyboard { } return super.getCurrentDrawableState(); } + + @Override + public int squaredDistanceFrom(int x, int y) { + // We should count vertical gap between rows to calculate the center of this Key. + final int verticalGap = LatinKeyboard.this.mVerticalGap; + final int xDist = this.x + width / 2 - x; + final int yDist = this.y + (height + verticalGap) / 2 - y; + return xDist * xDist + yDist * yDist; + } } /** diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java index 83b761904..660fe0ed0 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java @@ -47,6 +47,7 @@ import android.widget.PopupWindow; import android.widget.TextView; import java.util.ArrayList; +import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.WeakHashMap; @@ -158,6 +159,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx // Miscellaneous constants /* package */ static final int NOT_A_KEY = -1; private static final int[] LONG_PRESSABLE_STATE_SET = { android.R.attr.state_long_pressable }; + private static final int NUMBER_HINT_VERTICAL_ADJUSTMENT_PIXEL = -1; // XML attribute private int mKeyTextSize; @@ -178,6 +180,8 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx // Main keyboard private BaseKeyboard mKeyboard; private Key[] mKeys; + // TODO this attribute should be gotten from Keyboard. + private int mKeyboardVerticalGap; // Key preview popup private TextView mPreviewText; @@ -240,6 +244,11 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx private final Paint mPaint; private final Rect mPadding; private final Rect mClipRegion = new Rect(0, 0, 0, 0); + // This map caches key label text height in pixel as value and key label text size as map key. + private final HashMap<Integer, Integer> mTextHeightCache = new HashMap<Integer, Integer>(); + // Distance from horizontal center of the key, proportional to key label text height. + private final float KEY_LABEL_VERTICAL_ADJUSTMENT_FACTOR = 0.55f; + private final String KEY_LABEL_HEIGHT_REFERENCE_CHAR = "H"; private final UIHandler mHandler = new UIHandler(); @@ -468,7 +477,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx mPreviewPopup = new PopupWindow(context); if (previewLayout != 0) { mPreviewText = (TextView) inflate.inflate(previewLayout, null); - mPreviewTextSizeLarge = (int) mPreviewText.getTextSize(); + mPreviewTextSizeLarge = (int) res.getDimension(R.dimen.key_preview_text_size_large); mPreviewPopup.setContentView(mPreviewText); mPreviewPopup.setBackgroundDrawable(null); } else { @@ -579,6 +588,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx LatinImeLogger.onSetKeyboard(keyboard); mKeys = mKeyDetector.setKeyboard(keyboard, -getPaddingLeft(), -getPaddingTop() + mVerticalCorrection); + mKeyboardVerticalGap = (int)getResources().getDimension(R.dimen.key_bottom_gap); for (PointerTracker tracker : mPointerTrackers) { tracker.setKeyboard(keyboard, mKeys, mKeyHysteresisDistance); } @@ -723,7 +733,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx int dimensionSum = 0; for (int i = 0; i < length; i++) { Key key = keys[i]; - dimensionSum += Math.min(key.width, key.height) + key.gap; + dimensionSum += Math.min(key.width, key.height + mKeyboardVerticalGap) + key.gap; } if (dimensionSum < 0 || length == 0) return; mKeyDetector.setProximityThreshold((int) (dimensionSum * 1.4f / length)); @@ -775,13 +785,14 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx paint.setColor(mKeyTextColor); boolean drawSingleKey = false; if (invalidKey != null && canvas.getClipBounds(clipRegion)) { - // Is clipRegion completely contained within the invalidated key? - if (invalidKey.x + kbdPaddingLeft - 1 <= clipRegion.left && - invalidKey.y + kbdPaddingTop - 1 <= clipRegion.top && - invalidKey.x + invalidKey.width + kbdPaddingLeft + 1 >= clipRegion.right && - invalidKey.y + invalidKey.height + kbdPaddingTop + 1 >= clipRegion.bottom) { - drawSingleKey = true; - } + // TODO we should use Rect.inset and Rect.contains here. + // Is clipRegion completely contained within the invalidated key? + if (invalidKey.x + kbdPaddingLeft - 1 <= clipRegion.left && + invalidKey.y + kbdPaddingTop - 1 <= clipRegion.top && + invalidKey.x + invalidKey.width + kbdPaddingLeft + 1 >= clipRegion.right && + invalidKey.y + invalidKey.height + kbdPaddingTop + 1 >= clipRegion.bottom) { + drawSingleKey = true; + } } canvas.drawColor(0x00000000, PorterDuff.Mode.CLEAR); final int keyCount = keys.length; @@ -797,8 +808,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx String label = key.label == null? null : adjustCase(key.label).toString(); final Rect bounds = keyBackground.getBounds(); - if (key.width != bounds.right || - key.height != bounds.bottom) { + if (key.width != bounds.right || key.height != bounds.bottom) { keyBackground.setBounds(0, 0, key.width, key.height); } canvas.translate(key.x + kbdPaddingLeft, key.y + kbdPaddingTop); @@ -818,22 +828,34 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx } // For characters, use large font. For labels like "Done", use small font. + final int labelSize; if (label.length() > 1 && key.codes.length < 2) { - paint.setTextSize(mLabelTextSize); + labelSize = mLabelTextSize; paint.setTypeface(Typeface.DEFAULT_BOLD); } else { - paint.setTextSize(mKeyTextSize); + labelSize = mKeyTextSize; paint.setTypeface(mKeyTextStyle); } + paint.setTextSize(labelSize); + + Integer labelHeightValue = mTextHeightCache.get(labelSize); + final int labelHeight; + if (labelHeightValue != null) { + labelHeight = labelHeightValue; + } else { + Rect textBounds = new Rect(); + paint.getTextBounds(KEY_LABEL_HEIGHT_REFERENCE_CHAR, 0, 1, textBounds); + labelHeight = textBounds.height(); + mTextHeightCache.put(labelSize, labelHeight); + } + // Draw a drop shadow for the text paint.setShadowLayer(mShadowRadius, 0, 0, mShadowColor); - // Draw the text - canvas.drawText(label, - (key.width - padding.left - padding.right) / 2 - + padding.left, - (key.height - padding.top - padding.bottom) / 2 - + (paint.getTextSize() - paint.descent()) / 2 + padding.top, - paint); + final int centerX = (key.width + padding.left - padding.right) / 2; + final int centerY = (key.height + padding.top - padding.bottom) / 2; + final float baseline = centerY + + labelHeight * KEY_LABEL_VERTICAL_ADJUSTMENT_FACTOR; + canvas.drawText(label, centerX, baseline, paint); // Turn off drop shadow paint.setShadowLayer(0, 0, 0, 0); } @@ -843,16 +865,22 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx if (icon == null && key.hintIcon != null && drawHintIcon) icon = key.hintIcon; if (icon != null) { - // Hack for key hint icon displaying at the top right corner of the key. - final int drawableWidth = icon == key.hintIcon - ? key.width : icon.getIntrinsicWidth(); - final int drawableHeight = icon == key.hintIcon - ? key.height : icon.getIntrinsicHeight(); - - final int drawableX = (key.width - padding.left - padding.right - - drawableWidth) / 2 + padding.left; - final int drawableY = (key.height - padding.top - padding.bottom - - drawableHeight) / 2 + padding.top; + // Special handing for the upper-right number hint icons + final int drawableWidth; + final int drawableHeight; + final int drawableX; + final int drawableY; + if (icon == key.hintIcon) { + drawableWidth = key.width; + drawableHeight = key.height; + drawableX = 0; + drawableY = NUMBER_HINT_VERTICAL_ADJUSTMENT_PIXEL; + } else { + drawableWidth = key.icon.getIntrinsicWidth(); + drawableHeight = key.icon.getIntrinsicHeight(); + drawableX = (key.width + padding.left - padding.right - drawableWidth) / 2; + drawableY = (key.height + padding.top - padding.bottom - drawableHeight) / 2; + } canvas.translate(drawableX, drawableY); icon.setBounds(0, 0, drawableWidth, drawableHeight); icon.draw(canvas); @@ -1020,6 +1048,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx if (key == null) return; mInvalidatedKey = key; + // TODO we should clean up this and record key's region to use in onBufferDraw. mDirtyRect.union(key.x + getPaddingLeft(), key.y + getPaddingTop(), key.x + key.width + getPaddingLeft(), key.y + key.height + getPaddingTop()); onBufferDraw(); |