KeyDrawParams.java revision 49d8af8a4e900f3c68c333aba7fde0a11fd368b1
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 float mKeyLabelHorizontalPadding; 36 public final float mKeyHintLetterPadding; 37 public final float mKeyPopupHintLetterPadding; 38 public final float mKeyShiftedLetterHintPadding; 39 public final int mKeyTextShadowColor; 40 public final float mKeyTextShadowRadius; 41 public final Drawable mKeyBackground; 42 public final int mKeyHintLetterColor; 43 public final int mKeyHintLabelColor; 44 public final int mKeyShiftedLetterHintInactivatedColor; 45 public final int mKeyShiftedLetterHintActivatedColor; 46 47 private final Typeface mKeyTypefaceFromKeyboardView; 48 private final float mKeyLetterRatio; 49 private final int mKeyLetterSizeFromKeyboardView; 50 private final float mKeyLargeLetterRatio; 51 private final float mKeyLabelRatio; 52 private final float mKeyLargeLabelRatio; 53 private final float mKeyHintLetterRatio; 54 private final float mKeyShiftedLetterHintRatio; 55 private final float mKeyHintLabelRatio; 56 57 public final Rect mPadding = new Rect(); 58 public Typeface mKeyTypeface; 59 public int mKeyLetterSize; 60 public int mKeyLargeLetterSize; 61 public int mKeyLabelSize; 62 public int mKeyLargeLabelSize; 63 public int mKeyHintLetterSize; 64 public int mKeyShiftedLetterHintSize; 65 public int mKeyHintLabelSize; 66 public int mAnimAlpha; 67 68 public KeyDrawParams(final TypedArray keyboardViewAttr, final TypedArray keyAttr) { 69 mKeyBackground = keyboardViewAttr.getDrawable(R.styleable.KeyboardView_keyBackground); 70 mKeyBackground.getPadding(mPadding); 71 72 mKeyLetterRatio = ResourceUtils.getFraction(keyAttr, 73 R.styleable.Keyboard_Key_keyLetterSize); 74 mKeyLetterSizeFromKeyboardView = ResourceUtils.getDimensionPixelSize(keyAttr, 75 R.styleable.Keyboard_Key_keyLetterSize); 76 mKeyLabelRatio = ResourceUtils.getFraction(keyAttr, 77 R.styleable.Keyboard_Key_keyLabelSize); 78 mKeyLabelSize = ResourceUtils.getDimensionPixelSize(keyAttr, 79 R.styleable.Keyboard_Key_keyLabelSize); 80 mKeyLargeLabelRatio = ResourceUtils.getFraction(keyAttr, 81 R.styleable.Keyboard_Key_keyLargeLabelRatio); 82 mKeyLargeLetterRatio = ResourceUtils.getFraction(keyAttr, 83 R.styleable.Keyboard_Key_keyLargeLetterRatio); 84 mKeyHintLetterRatio = ResourceUtils.getFraction(keyAttr, 85 R.styleable.Keyboard_Key_keyHintLetterRatio); 86 mKeyShiftedLetterHintRatio = ResourceUtils.getFraction(keyAttr, 87 R.styleable.Keyboard_Key_keyShiftedLetterHintRatio); 88 mKeyHintLabelRatio = ResourceUtils.getFraction(keyAttr, 89 R.styleable.Keyboard_Key_keyHintLabelRatio); 90 mKeyLabelHorizontalPadding = keyAttr.getDimension( 91 R.styleable.Keyboard_Key_keyLabelHorizontalPadding, 0); 92 mKeyHintLetterPadding = keyAttr.getDimension( 93 R.styleable.Keyboard_Key_keyHintLetterPadding, 0); 94 mKeyPopupHintLetterPadding = keyAttr.getDimension( 95 R.styleable.Keyboard_Key_keyPopupHintLetterPadding, 0); 96 mKeyShiftedLetterHintPadding = keyAttr.getDimension( 97 R.styleable.Keyboard_Key_keyShiftedLetterHintPadding, 0); 98 mKeyTextColor = keyAttr.getColor( 99 R.styleable.Keyboard_Key_keyTextColor, Color.WHITE); 100 mKeyTextInactivatedColor = keyAttr.getColor( 101 R.styleable.Keyboard_Key_keyTextInactivatedColor, Color.WHITE); 102 mKeyHintLetterColor = keyAttr.getColor( 103 R.styleable.Keyboard_Key_keyHintLetterColor, Color.TRANSPARENT); 104 mKeyHintLabelColor = keyAttr.getColor( 105 R.styleable.Keyboard_Key_keyHintLabelColor, Color.TRANSPARENT); 106 mKeyShiftedLetterHintInactivatedColor = keyAttr.getColor( 107 R.styleable.Keyboard_Key_keyShiftedLetterHintInactivatedColor, Color.TRANSPARENT); 108 mKeyShiftedLetterHintActivatedColor = keyAttr.getColor( 109 R.styleable.Keyboard_Key_keyShiftedLetterHintActivatedColor, Color.TRANSPARENT); 110 mKeyTypefaceFromKeyboardView = Typeface.defaultFromStyle( 111 keyAttr.getInt(R.styleable.Keyboard_Key_keyTypeface, Typeface.NORMAL)); 112 mKeyTextShadowColor = keyAttr.getColor( 113 R.styleable.Keyboard_Key_keyTextShadowColor, Color.TRANSPARENT); 114 mKeyTextShadowRadius = keyAttr.getFloat( 115 R.styleable.Keyboard_Key_keyTextShadowRadius, 0f); 116 } 117 118 public void updateParams(final Keyboard keyboard) { 119 mKeyTypeface = (keyboard.mKeyTypeface != null) 120 ? keyboard.mKeyTypeface : mKeyTypefaceFromKeyboardView; 121 final int keyHeight = keyboard.mMostCommonKeyHeight - keyboard.mVerticalGap; 122 mKeyLetterSize = selectTextSizeFromDimensionOrRatio(keyHeight, 123 mKeyLetterSizeFromKeyboardView, mKeyLetterRatio, 124 mKeyLetterSizeFromKeyboardView); 125 // Override if size/ratio is specified in Keyboard. 126 mKeyLetterSize = selectTextSizeFromDimensionOrRatio(keyHeight, keyboard.mKeyLetterSize, 127 keyboard.mKeyLetterRatio, mKeyLetterSize); 128 if (ResourceUtils.isValidFraction(mKeyLabelRatio)) { 129 mKeyLabelSize = (int)(keyHeight * mKeyLabelRatio); 130 } 131 mKeyLargeLabelSize = (int)(keyHeight * mKeyLargeLabelRatio); 132 mKeyLargeLetterSize = (int)(keyHeight * mKeyLargeLetterRatio); 133 mKeyHintLetterSize = selectTextSizeFromKeyboardOrView(keyHeight, 134 keyboard.mKeyHintLetterRatio, mKeyHintLetterRatio); 135 mKeyShiftedLetterHintSize = selectTextSizeFromKeyboardOrView(keyHeight, 136 keyboard.mKeyShiftedLetterHintRatio, mKeyShiftedLetterHintRatio); 137 mKeyHintLabelSize = (int)(keyHeight * mKeyHintLabelRatio); 138 } 139 140 private static final int selectTextSizeFromDimensionOrRatio(final int keyHeight, 141 final int dimens, final float ratio, final int defaultDimens) { 142 if (ResourceUtils.isValidDimensionPixelSize(dimens)) { 143 return dimens; 144 } 145 if (ResourceUtils.isValidFraction(ratio)) { 146 return (int)(keyHeight * ratio); 147 } 148 return defaultDimens; 149 } 150 151 private static final int selectTextSizeFromKeyboardOrView(final int keyHeight, 152 final float ratioFromKeyboard, final float ratioFromView) { 153 final float ratio = ResourceUtils.isValidFraction(ratioFromKeyboard) 154 ? ratioFromKeyboard : ratioFromView; 155 return (int)(keyHeight * ratio); 156 } 157 158 public void blendAlpha(final Paint paint) { 159 final int color = paint.getColor(); 160 paint.setARGB((paint.getAlpha() * mAnimAlpha) / Constants.Color.ALPHA_OPAQUE, 161 Color.red(color), Color.green(color), Color.blue(color)); 162 } 163} 164