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