Home | History | Annotate | Download | only in internal
      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