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