KeyDrawParams.java revision 71b52a84e2d078d0f57712dba88f8cc691412672
1/* 2 * Copyright (C) 2012 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.inputmethod.keyboard.internal; 18 19import android.content.res.TypedArray; 20import android.graphics.Color; 21import android.graphics.Paint; 22import android.graphics.Rect; 23import android.graphics.Typeface; 24import android.graphics.drawable.Drawable; 25 26import com.android.inputmethod.keyboard.Keyboard; 27import com.android.inputmethod.latin.Constants; 28import com.android.inputmethod.latin.R; 29import com.android.inputmethod.latin.ResourceUtils; 30 31public class KeyDrawParams { 32 // XML attributes 33 public final int mKeyTextColor; 34 public final int mKeyTextInactivatedColor; 35 public final int mKeyTextShadowColor; 36 public final float mKeyTextShadowRadius; 37 public final Drawable mKeyBackground; 38 public final int mKeyHintLetterColor; 39 public final int mKeyHintLabelColor; 40 public final int mKeyShiftedLetterHintInactivatedColor; 41 public final int mKeyShiftedLetterHintActivatedColor; 42 43 private final Typeface mKeyTypefaceFromKeyboardView; 44 private final float mKeyLetterRatio; 45 private final int mKeyLetterSizeFromKeyboardView; 46 private final float mKeyLargeLetterRatio; 47 private final float mKeyLabelRatio; 48 private final float mKeyLargeLabelRatio; 49 private final float mKeyHintLetterRatio; 50 private final float mKeyShiftedLetterHintRatio; 51 private final float mKeyHintLabelRatio; 52 53 public final Rect mPadding = new Rect(); 54 public Typeface mKeyTypeface; 55 public int mKeyLetterSize; 56 public int mKeyLargeLetterSize; 57 public int mKeyLabelSize; 58 public int mKeyLargeLabelSize; 59 public int mKeyHintLetterSize; 60 public int mKeyShiftedLetterHintSize; 61 public int mKeyHintLabelSize; 62 public int mAnimAlpha; 63 64 public KeyDrawParams(final TypedArray keyboardViewAttr, final TypedArray keyAttr) { 65 mKeyBackground = keyboardViewAttr.getDrawable(R.styleable.KeyboardView_keyBackground); 66 mKeyBackground.getPadding(mPadding); 67 68 mKeyLetterRatio = ResourceUtils.getFraction(keyAttr, 69 R.styleable.Keyboard_Key_keyLetterSize); 70 mKeyLetterSizeFromKeyboardView = ResourceUtils.getDimensionPixelSize(keyAttr, 71 R.styleable.Keyboard_Key_keyLetterSize); 72 mKeyLabelRatio = ResourceUtils.getFraction(keyAttr, 73 R.styleable.Keyboard_Key_keyLabelSize); 74 mKeyLabelSize = ResourceUtils.getDimensionPixelSize(keyAttr, 75 R.styleable.Keyboard_Key_keyLabelSize); 76 mKeyLargeLabelRatio = ResourceUtils.getFraction(keyAttr, 77 R.styleable.Keyboard_Key_keyLargeLabelRatio); 78 mKeyLargeLetterRatio = ResourceUtils.getFraction(keyAttr, 79 R.styleable.Keyboard_Key_keyLargeLetterRatio); 80 mKeyHintLetterRatio = ResourceUtils.getFraction(keyAttr, 81 R.styleable.Keyboard_Key_keyHintLetterRatio); 82 mKeyShiftedLetterHintRatio = ResourceUtils.getFraction(keyAttr, 83 R.styleable.Keyboard_Key_keyShiftedLetterHintRatio); 84 mKeyHintLabelRatio = ResourceUtils.getFraction(keyAttr, 85 R.styleable.Keyboard_Key_keyHintLabelRatio); 86 mKeyTextColor = keyAttr.getColor( 87 R.styleable.Keyboard_Key_keyTextColor, Color.WHITE); 88 mKeyTextInactivatedColor = keyAttr.getColor( 89 R.styleable.Keyboard_Key_keyTextInactivatedColor, Color.WHITE); 90 mKeyHintLetterColor = keyAttr.getColor( 91 R.styleable.Keyboard_Key_keyHintLetterColor, Color.TRANSPARENT); 92 mKeyHintLabelColor = keyAttr.getColor( 93 R.styleable.Keyboard_Key_keyHintLabelColor, Color.TRANSPARENT); 94 mKeyShiftedLetterHintInactivatedColor = keyAttr.getColor( 95 R.styleable.Keyboard_Key_keyShiftedLetterHintInactivatedColor, Color.TRANSPARENT); 96 mKeyShiftedLetterHintActivatedColor = keyAttr.getColor( 97 R.styleable.Keyboard_Key_keyShiftedLetterHintActivatedColor, Color.TRANSPARENT); 98 mKeyTypefaceFromKeyboardView = Typeface.defaultFromStyle( 99 keyAttr.getInt(R.styleable.Keyboard_Key_keyTypeface, Typeface.NORMAL)); 100 mKeyTextShadowColor = keyAttr.getColor( 101 R.styleable.Keyboard_Key_keyTextShadowColor, Color.TRANSPARENT); 102 mKeyTextShadowRadius = keyAttr.getFloat( 103 R.styleable.Keyboard_Key_keyTextShadowRadius, 0f); 104 } 105 106 public void updateParams(final Keyboard keyboard) { 107 mKeyTypeface = (keyboard.mKeyTypeface != null) 108 ? keyboard.mKeyTypeface : mKeyTypefaceFromKeyboardView; 109 final int keyHeight = keyboard.mMostCommonKeyHeight - keyboard.mVerticalGap; 110 mKeyLetterSize = selectTextSizeFromDimensionOrRatio(keyHeight, 111 mKeyLetterSizeFromKeyboardView, mKeyLetterRatio, 112 mKeyLetterSizeFromKeyboardView); 113 // Override if size/ratio is specified in Keyboard. 114 mKeyLetterSize = selectTextSizeFromDimensionOrRatio(keyHeight, keyboard.mKeyLetterSize, 115 keyboard.mKeyLetterRatio, mKeyLetterSize); 116 if (ResourceUtils.isValidFraction(mKeyLabelRatio)) { 117 mKeyLabelSize = (int)(keyHeight * mKeyLabelRatio); 118 } 119 mKeyLargeLabelSize = (int)(keyHeight * mKeyLargeLabelRatio); 120 mKeyLargeLetterSize = (int)(keyHeight * mKeyLargeLetterRatio); 121 mKeyHintLetterSize = selectTextSizeFromKeyboardOrView(keyHeight, 122 keyboard.mKeyHintLetterRatio, mKeyHintLetterRatio); 123 mKeyShiftedLetterHintSize = selectTextSizeFromKeyboardOrView(keyHeight, 124 keyboard.mKeyShiftedLetterHintRatio, mKeyShiftedLetterHintRatio); 125 mKeyHintLabelSize = (int)(keyHeight * mKeyHintLabelRatio); 126 } 127 128 private static final int selectTextSizeFromDimensionOrRatio(final int keyHeight, 129 final int dimens, final float ratio, final int defaultDimens) { 130 if (ResourceUtils.isValidDimensionPixelSize(dimens)) { 131 return dimens; 132 } 133 if (ResourceUtils.isValidFraction(ratio)) { 134 return (int)(keyHeight * ratio); 135 } 136 return defaultDimens; 137 } 138 139 private static final int selectTextSizeFromKeyboardOrView(final int keyHeight, 140 final float ratioFromKeyboard, final float ratioFromView) { 141 final float ratio = ResourceUtils.isValidFraction(ratioFromKeyboard) 142 ? ratioFromKeyboard : ratioFromView; 143 return (int)(keyHeight * ratio); 144 } 145 146 public void blendAlpha(final Paint paint) { 147 final int color = paint.getColor(); 148 paint.setARGB((paint.getAlpha() * mAnimAlpha) / Constants.Color.ALPHA_OPAQUE, 149 Color.red(color), Color.green(color), Color.blue(color)); 150 } 151} 152