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 17 package com.android.inputmethod.keyboard.internal; 18 19 import android.graphics.Typeface; 20 21 import com.android.inputmethod.latin.utils.ResourceUtils; 22 23 public final class KeyDrawParams { 24 public Typeface mTypeface; 25 26 public int mLetterSize; 27 public int mLabelSize; 28 public int mLargeLetterSize; 29 public int mHintLetterSize; 30 public int mShiftedLetterHintSize; 31 public int mHintLabelSize; 32 public int mPreviewTextSize; 33 34 public int mTextColor; 35 public int mTextInactivatedColor; 36 public int mTextShadowColor; 37 public int mFunctionalTextColor; 38 public int mHintLetterColor; 39 public int mHintLabelColor; 40 public int mShiftedLetterHintInactivatedColor; 41 public int mShiftedLetterHintActivatedColor; 42 public int mPreviewTextColor; 43 44 public float mHintLabelVerticalAdjustment; 45 public float mLabelOffCenterRatio; 46 public float mHintLabelOffCenterRatio; 47 48 public int mAnimAlpha; 49 50 public KeyDrawParams() {} 51 52 private KeyDrawParams(final KeyDrawParams copyFrom) { 53 mTypeface = copyFrom.mTypeface; 54 55 mLetterSize = copyFrom.mLetterSize; 56 mLabelSize = copyFrom.mLabelSize; 57 mLargeLetterSize = copyFrom.mLargeLetterSize; 58 mHintLetterSize = copyFrom.mHintLetterSize; 59 mShiftedLetterHintSize = copyFrom.mShiftedLetterHintSize; 60 mHintLabelSize = copyFrom.mHintLabelSize; 61 mPreviewTextSize = copyFrom.mPreviewTextSize; 62 63 mTextColor = copyFrom.mTextColor; 64 mTextInactivatedColor = copyFrom.mTextInactivatedColor; 65 mTextShadowColor = copyFrom.mTextShadowColor; 66 mFunctionalTextColor = copyFrom.mFunctionalTextColor; 67 mHintLetterColor = copyFrom.mHintLetterColor; 68 mHintLabelColor = copyFrom.mHintLabelColor; 69 mShiftedLetterHintInactivatedColor = copyFrom.mShiftedLetterHintInactivatedColor; 70 mShiftedLetterHintActivatedColor = copyFrom.mShiftedLetterHintActivatedColor; 71 mPreviewTextColor = copyFrom.mPreviewTextColor; 72 73 mHintLabelVerticalAdjustment = copyFrom.mHintLabelVerticalAdjustment; 74 mLabelOffCenterRatio = copyFrom.mLabelOffCenterRatio; 75 mHintLabelOffCenterRatio = copyFrom.mHintLabelOffCenterRatio; 76 77 mAnimAlpha = copyFrom.mAnimAlpha; 78 } 79 80 public void updateParams(final int keyHeight, final KeyVisualAttributes attr) { 81 if (attr == null) { 82 return; 83 } 84 85 if (attr.mTypeface != null) { 86 mTypeface = attr.mTypeface; 87 } 88 89 mLetterSize = selectTextSizeFromDimensionOrRatio(keyHeight, 90 attr.mLetterSize, attr.mLetterRatio, mLetterSize); 91 mLabelSize = selectTextSizeFromDimensionOrRatio(keyHeight, 92 attr.mLabelSize, attr.mLabelRatio, mLabelSize); 93 mLargeLetterSize = selectTextSize(keyHeight, attr.mLargeLetterRatio, mLargeLetterSize); 94 mHintLetterSize = selectTextSize(keyHeight, attr.mHintLetterRatio, mHintLetterSize); 95 mShiftedLetterHintSize = selectTextSize(keyHeight, 96 attr.mShiftedLetterHintRatio, mShiftedLetterHintSize); 97 mHintLabelSize = selectTextSize(keyHeight, attr.mHintLabelRatio, mHintLabelSize); 98 mPreviewTextSize = selectTextSize(keyHeight, attr.mPreviewTextRatio, mPreviewTextSize); 99 100 mTextColor = selectColor(attr.mTextColor, mTextColor); 101 mTextInactivatedColor = selectColor(attr.mTextInactivatedColor, mTextInactivatedColor); 102 mTextShadowColor = selectColor(attr.mTextShadowColor, mTextShadowColor); 103 mFunctionalTextColor = selectColor(attr.mFunctionalTextColor, mFunctionalTextColor); 104 mHintLetterColor = selectColor(attr.mHintLetterColor, mHintLetterColor); 105 mHintLabelColor = selectColor(attr.mHintLabelColor, mHintLabelColor); 106 mShiftedLetterHintInactivatedColor = selectColor( 107 attr.mShiftedLetterHintInactivatedColor, mShiftedLetterHintInactivatedColor); 108 mShiftedLetterHintActivatedColor = selectColor( 109 attr.mShiftedLetterHintActivatedColor, mShiftedLetterHintActivatedColor); 110 mPreviewTextColor = selectColor(attr.mPreviewTextColor, mPreviewTextColor); 111 112 mHintLabelVerticalAdjustment = selectFloatIfNonZero( 113 attr.mHintLabelVerticalAdjustment, mHintLabelVerticalAdjustment); 114 mLabelOffCenterRatio = selectFloatIfNonZero( 115 attr.mLabelOffCenterRatio, mLabelOffCenterRatio); 116 mHintLabelOffCenterRatio = selectFloatIfNonZero( 117 attr.mHintLabelOffCenterRatio, mHintLabelOffCenterRatio); 118 } 119 120 public KeyDrawParams mayCloneAndUpdateParams(final int keyHeight, 121 final KeyVisualAttributes attr) { 122 if (attr == null) { 123 return this; 124 } 125 final KeyDrawParams newParams = new KeyDrawParams(this); 126 newParams.updateParams(keyHeight, attr); 127 return newParams; 128 } 129 130 private static int selectTextSizeFromDimensionOrRatio(final int keyHeight, 131 final int dimens, final float ratio, final int defaultDimens) { 132 if (ResourceUtils.isValidDimensionPixelSize(dimens)) { 133 return dimens; 134 } 135 if (ResourceUtils.isValidFraction(ratio)) { 136 return (int)(keyHeight * ratio); 137 } 138 return defaultDimens; 139 } 140 141 private static int selectTextSize(final int keyHeight, final float ratio, 142 final int defaultSize) { 143 if (ResourceUtils.isValidFraction(ratio)) { 144 return (int)(keyHeight * ratio); 145 } 146 return defaultSize; 147 } 148 149 private static int selectColor(final int attrColor, final int defaultColor) { 150 if (attrColor != 0) { 151 return attrColor; 152 } 153 return defaultColor; 154 } 155 156 private static float selectFloatIfNonZero(final float attrFloat, final float defaultFloat) { 157 if (attrFloat != 0) { 158 return attrFloat; 159 } 160 return defaultFloat; 161 } 162 } 163