• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2010 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.camera.ui;
18 
19 import static com.android.camera.ui.GLRootView.dpToPixel;
20 import android.content.Context;
21 import android.graphics.Color;
22 import android.graphics.Rect;
23 import android.view.animation.Transformation;
24 
25 import com.android.camera.R;
26 
27 import javax.microedition.khronos.opengles.GL11;
28 
29 class GLOptionItem extends GLView {
30     private static final int FONT_COLOR = Color.WHITE;
31     private static final float FONT_SIZE = 18;
32 
33     private static final int MINIMAL_WIDTH = 120;
34     private static final int MINIMAL_HEIGHT = 32;
35 
36     private static final int NO_ICON_LEADING_SPACE = 10;
37     private static final int TEXT_LEFT_PADDING = 6;
38     private static final int TEXT_RIGHT_PADDING = 10;
39 
40     private static final float ENABLED_ALPHA = 1f;
41     private static final float DISABLED_ALPHA = 0.3f;
42 
43     private static final int HORIZONTAL_PADDINGS = 4;
44     private static final int VERTICAL_PADDINGS = 2;
45 
46     private static ResourceTexture sCheckOn;
47     private static ResourceTexture sCheckOff;
48 
49     private static int sNoIconLeadingSpace;
50     private static int sTextLeftPadding;
51     private static int sTextRightPadding;
52     private static int sMinimalWidth;
53     private static int sMinimalHeight;
54     private static float sFontSize;
55     private static int sHorizontalPaddings = -1;
56     private static int sVerticalPaddings;
57 
58     private final ResourceTexture mIcon;
59     private final StringTexture mText;
60     private boolean mEnabled = true;
61 
62     private ResourceTexture mCheckBox;
63 
64 
initializeStaticVariables(Context context)65     private static void initializeStaticVariables(Context context) {
66         if (sCheckOn != null) return;
67 
68         sCheckOn = new ResourceTexture(context, R.drawable.ic_menuselect_on);
69         sCheckOff = new ResourceTexture(context, R.drawable.ic_menuselect_off);
70 
71         sNoIconLeadingSpace = dpToPixel(context, NO_ICON_LEADING_SPACE);
72         sTextLeftPadding = dpToPixel(context, TEXT_LEFT_PADDING);
73         sTextRightPadding = dpToPixel(context, TEXT_RIGHT_PADDING);
74         sMinimalWidth = dpToPixel(context, MINIMAL_WIDTH);
75         sMinimalHeight = dpToPixel(context, MINIMAL_HEIGHT);
76         sHorizontalPaddings = dpToPixel(context, HORIZONTAL_PADDINGS);
77         sVerticalPaddings = dpToPixel(context, VERTICAL_PADDINGS);
78 
79         sFontSize = dpToPixel(context, FONT_SIZE);
80     }
81 
GLOptionItem(Context context, int iconId, String title)82     public GLOptionItem(Context context, int iconId, String title) {
83         initializeStaticVariables(context);
84         mIcon = iconId == 0 ? null : new ResourceTexture(context, iconId);
85         mText = StringTexture.newInstance(title, sFontSize, FONT_COLOR);
86         mCheckBox = sCheckOff;
87         setPaddings(sHorizontalPaddings,
88                 sVerticalPaddings, sHorizontalPaddings, sVerticalPaddings);
89     }
90 
91     @Override
onMeasure(int widthSpec, int heightSpec)92     protected void onMeasure(int widthSpec, int heightSpec) {
93         int width = mIcon == null ? sNoIconLeadingSpace : mIcon.getWidth();
94         width += mText.getWidth() + mCheckBox.getWidth();
95         width += sTextRightPadding + sTextLeftPadding;
96 
97         int height = Math.max(Math.max(mIcon == null ? 0 : mIcon.getHeight(),
98                 mText.getHeight()), mCheckBox.getHeight());
99 
100         width = Math.max(sMinimalWidth, width);
101         height = Math.max(sMinimalHeight, height);
102 
103         new MeasureHelper(this)
104                 .setPreferredContentSize(width, height)
105                 .measure(widthSpec, heightSpec);
106     }
107 
108     @Override
render(GLRootView root, GL11 gl)109     protected void render(GLRootView root, GL11 gl) {
110         Rect p = mPaddings;
111 
112         int width = getWidth() - p.left - p.right;
113         int height = getHeight() - p.top - p.bottom;
114 
115         int xoffset = p.left;
116 
117         Transformation trans = root.getTransformation();
118         float oldAlpha = trans.getAlpha();
119         trans.setAlpha(oldAlpha * (mEnabled ? ENABLED_ALPHA : DISABLED_ALPHA));
120 
121         ResourceTexture icon = mIcon;
122         if (icon != null) {
123             icon.draw(root, xoffset,
124                     p.top + (height - icon.getHeight()) / 2);
125             xoffset += icon.getWidth();
126         } else {
127             xoffset += sNoIconLeadingSpace;
128         }
129 
130         StringTexture title = mText;
131         xoffset += sTextLeftPadding;
132         int yoffset = p.top + (height - title.getHeight()) / 2;
133         //TODO: cut the text if it is too long
134         title.draw(root, xoffset, yoffset);
135 
136         ResourceTexture checkbox = mCheckBox;
137         yoffset = p.top + (height - checkbox.getHeight()) / 2;
138         checkbox.draw(root, width - checkbox.getWidth(), yoffset);
139         trans.setAlpha(oldAlpha);
140     }
141 
setChecked(boolean checked)142     public void setChecked(boolean checked) {
143         mCheckBox = checked ? sCheckOn : sCheckOff;
144         invalidate();
145     }
146 
setEnabled(boolean enabled)147     public void setEnabled(boolean enabled) {
148         if (mEnabled == enabled) return;
149         mEnabled = enabled;
150         invalidate();
151     }
152 }
153