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 
KeyDrawParams()54     public KeyDrawParams() {}
55 
KeyDrawParams(@onnull final KeyDrawParams copyFrom)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 
updateParams(final int keyHeight, @Nullable final KeyVisualAttributes attr)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
mayCloneAndUpdateParams(final int keyHeight, @Nullable final KeyVisualAttributes attr)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 
selectTextSizeFromDimensionOrRatio(final int keyHeight, final int dimens, final float ratio, final int defaultDimens)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 
selectTextSize(final int keyHeight, final float ratio, final int defaultSize)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 
selectColor(final int attrColor, final int defaultColor)154     private static int selectColor(final int attrColor, final int defaultColor) {
155         if (attrColor != 0) {
156             return attrColor;
157         }
158         return defaultColor;
159     }
160 
selectFloatIfNonZero(final float attrFloat, final float defaultFloat)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