1c3683b552f592d8039a466c663f7de8c8286e975Chris Craik/*
2c3683b552f592d8039a466c663f7de8c8286e975Chris Craik * Copyright (C) 2012 The Android Open Source Project
3c3683b552f592d8039a466c663f7de8c8286e975Chris Craik *
4c3683b552f592d8039a466c663f7de8c8286e975Chris Craik * Licensed under the Apache License, Version 2.0 (the "License");
5c3683b552f592d8039a466c663f7de8c8286e975Chris Craik * you may not use this file except in compliance with the License.
6c3683b552f592d8039a466c663f7de8c8286e975Chris Craik * You may obtain a copy of the License at
7c3683b552f592d8039a466c663f7de8c8286e975Chris Craik *
8c3683b552f592d8039a466c663f7de8c8286e975Chris Craik *      http://www.apache.org/licenses/LICENSE-2.0
9c3683b552f592d8039a466c663f7de8c8286e975Chris Craik *
10c3683b552f592d8039a466c663f7de8c8286e975Chris Craik * Unless required by applicable law or agreed to in writing, software
11c3683b552f592d8039a466c663f7de8c8286e975Chris Craik * distributed under the License is distributed on an "AS IS" BASIS,
12c3683b552f592d8039a466c663f7de8c8286e975Chris Craik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c3683b552f592d8039a466c663f7de8c8286e975Chris Craik * See the License for the specific language governing permissions and
14c3683b552f592d8039a466c663f7de8c8286e975Chris Craik * limitations under the License.
15c3683b552f592d8039a466c663f7de8c8286e975Chris Craik */
16c3683b552f592d8039a466c663f7de8c8286e975Chris Craik
17c3683b552f592d8039a466c663f7de8c8286e975Chris Craikpackage com.android.test.hwuicompare;
18c3683b552f592d8039a466c663f7de8c8286e975Chris Craik
19c3683b552f592d8039a466c663f7de8c8286e975Chris Craikimport com.android.test.hwuicompare.R;
20c3683b552f592d8039a466c663f7de8c8286e975Chris Craik
21c3683b552f592d8039a466c663f7de8c8286e975Chris Craikimport android.content.res.Resources;
22c3683b552f592d8039a466c663f7de8c8286e975Chris Craikimport android.graphics.Bitmap;
23c3683b552f592d8039a466c663f7de8c8286e975Chris Craikimport android.graphics.BitmapFactory;
24c3683b552f592d8039a466c663f7de8c8286e975Chris Craikimport android.graphics.BitmapShader;
25c3683b552f592d8039a466c663f7de8c8286e975Chris Craikimport android.graphics.Color;
26c3683b552f592d8039a466c663f7de8c8286e975Chris Craikimport android.graphics.LinearGradient;
27c3683b552f592d8039a466c663f7de8c8286e975Chris Craikimport android.graphics.Matrix;
28c3683b552f592d8039a466c663f7de8c8286e975Chris Craikimport android.graphics.Shader;
29c3683b552f592d8039a466c663f7de8c8286e975Chris Craik
30c3683b552f592d8039a466c663f7de8c8286e975Chris Craikpublic class ResourceModifiers {
31c3683b552f592d8039a466c663f7de8c8286e975Chris Craik        public final BitmapShader mRepeatShader;
32c3683b552f592d8039a466c663f7de8c8286e975Chris Craik        public final BitmapShader mTranslatedShader;
33c3683b552f592d8039a466c663f7de8c8286e975Chris Craik        public final BitmapShader mScaledShader;
34c3683b552f592d8039a466c663f7de8c8286e975Chris Craik        private final int mTexWidth;
35c3683b552f592d8039a466c663f7de8c8286e975Chris Craik        private final int mTexHeight;
36c3683b552f592d8039a466c663f7de8c8286e975Chris Craik        private final float mDrawWidth;
37c3683b552f592d8039a466c663f7de8c8286e975Chris Craik        private final float mDrawHeight;
38c3683b552f592d8039a466c663f7de8c8286e975Chris Craik        public final LinearGradient mHorGradient;
39c3683b552f592d8039a466c663f7de8c8286e975Chris Craik        public final LinearGradient mDiagGradient;
40c3683b552f592d8039a466c663f7de8c8286e975Chris Craik        public final LinearGradient mVertGradient;
41c3683b552f592d8039a466c663f7de8c8286e975Chris Craik        public final Bitmap mBitmap;
42c3683b552f592d8039a466c663f7de8c8286e975Chris Craik        private final Matrix mMtx1;
43c3683b552f592d8039a466c663f7de8c8286e975Chris Craik        private final Matrix mMtx2;
44c3683b552f592d8039a466c663f7de8c8286e975Chris Craik        private final Matrix mMtx3;
45c3683b552f592d8039a466c663f7de8c8286e975Chris Craik
46c3683b552f592d8039a466c663f7de8c8286e975Chris Craik        public final float[] mBitmapVertices;
47c3683b552f592d8039a466c663f7de8c8286e975Chris Craik        public final int[] mBitmapColors;
48c3683b552f592d8039a466c663f7de8c8286e975Chris Craik
49c3683b552f592d8039a466c663f7de8c8286e975Chris Craik        private static ResourceModifiers sInstance = null;
50c3683b552f592d8039a466c663f7de8c8286e975Chris Craik        public static ResourceModifiers instance() { return sInstance; }
51c3683b552f592d8039a466c663f7de8c8286e975Chris Craik        public static void init(Resources resources) {
52c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            sInstance = new ResourceModifiers(resources);
53c3683b552f592d8039a466c663f7de8c8286e975Chris Craik        }
54c3683b552f592d8039a466c663f7de8c8286e975Chris Craik
55c3683b552f592d8039a466c663f7de8c8286e975Chris Craik        public ResourceModifiers(Resources resources) {
56c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            mBitmap = BitmapFactory.decodeResource(resources, R.drawable.sunset1);
57c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            mTexWidth = mBitmap.getWidth();
58c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            mTexHeight = mBitmap.getHeight();
59c3683b552f592d8039a466c663f7de8c8286e975Chris Craik
60c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            mDrawWidth = resources.getDimensionPixelSize(R.dimen.layer_width);
61c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            mDrawHeight = resources.getDimensionPixelSize(R.dimen.layer_height);
62c3683b552f592d8039a466c663f7de8c8286e975Chris Craik
63c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            mRepeatShader = new BitmapShader(mBitmap, Shader.TileMode.REPEAT,
64c3683b552f592d8039a466c663f7de8c8286e975Chris Craik                    Shader.TileMode.REPEAT);
65c3683b552f592d8039a466c663f7de8c8286e975Chris Craik
66c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            mTranslatedShader = new BitmapShader(mBitmap, Shader.TileMode.REPEAT,
67c3683b552f592d8039a466c663f7de8c8286e975Chris Craik                    Shader.TileMode.REPEAT);
68c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            mMtx1 = new Matrix();
69c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            mMtx1.setTranslate(mTexWidth / 2.0f, mTexHeight / 2.0f);
70c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            mMtx1.postRotate(45, 0, 0);
71c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            mTranslatedShader.setLocalMatrix(mMtx1);
72c3683b552f592d8039a466c663f7de8c8286e975Chris Craik
73c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            mScaledShader = new BitmapShader(mBitmap, Shader.TileMode.MIRROR,
74c3683b552f592d8039a466c663f7de8c8286e975Chris Craik                    Shader.TileMode.MIRROR);
75c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            mMtx2 = new Matrix();
76c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            mMtx2.setScale(0.5f, 0.5f);
77c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            mScaledShader.setLocalMatrix(mMtx2);
78c3683b552f592d8039a466c663f7de8c8286e975Chris Craik
79c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            mHorGradient = new LinearGradient(0.0f, 0.0f, 1.0f, 0.0f,
80c3683b552f592d8039a466c663f7de8c8286e975Chris Craik                    Color.RED, Color.GREEN, Shader.TileMode.CLAMP);
81c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            mMtx3 = new Matrix();
82c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            mMtx3.setScale(mDrawHeight, 1.0f);
83c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            mMtx3.postRotate(-90.0f);
84c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            mMtx3.postTranslate(0.0f, mDrawHeight);
85c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            mHorGradient.setLocalMatrix(mMtx3);
86c3683b552f592d8039a466c663f7de8c8286e975Chris Craik
87c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            mDiagGradient = new LinearGradient(0.0f, 0.0f, mDrawWidth / 2.0f, mDrawHeight / 2.0f,
88c3683b552f592d8039a466c663f7de8c8286e975Chris Craik                    Color.BLUE, Color.RED, Shader.TileMode.CLAMP);
89c3683b552f592d8039a466c663f7de8c8286e975Chris Craik
90c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            mVertGradient = new LinearGradient(0.0f, 0.0f, 0.0f, mDrawHeight / 2.0f,
91c3683b552f592d8039a466c663f7de8c8286e975Chris Craik                    Color.YELLOW, Color.MAGENTA, Shader.TileMode.MIRROR);
92c3683b552f592d8039a466c663f7de8c8286e975Chris Craik
93c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            final float width = mBitmap.getWidth() / 8.0f;
94c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            final float height = mBitmap.getHeight() / 8.0f;
95c3683b552f592d8039a466c663f7de8c8286e975Chris Craik
96c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            mBitmapVertices = new float[] {
97c3683b552f592d8039a466c663f7de8c8286e975Chris Craik                0.0f, 0.0f, width, 0.0f, width * 2, 0.0f, width * 3, 0.0f,
98c3683b552f592d8039a466c663f7de8c8286e975Chris Craik                0.0f, height, width, height, width * 2, height, width * 4, height,
99c3683b552f592d8039a466c663f7de8c8286e975Chris Craik                0.0f, height * 2, width, height * 2, width * 2, height * 2, width * 3, height * 2,
100c3683b552f592d8039a466c663f7de8c8286e975Chris Craik                0.0f, height * 4, width, height * 4, width * 2, height * 4, width * 4, height * 4,
101c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            };
102c3683b552f592d8039a466c663f7de8c8286e975Chris Craik
103c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            mBitmapColors = new int[] {
104c3683b552f592d8039a466c663f7de8c8286e975Chris Craik                0xffff0000, 0xff00ff00, 0xff0000ff, 0xffff0000,
105c3683b552f592d8039a466c663f7de8c8286e975Chris Craik                0xff0000ff, 0xffff0000, 0xff00ff00, 0xff00ff00,
106c3683b552f592d8039a466c663f7de8c8286e975Chris Craik                0xff00ff00, 0xff0000ff, 0xffff0000, 0xff00ff00,
107c3683b552f592d8039a466c663f7de8c8286e975Chris Craik                0x00ff0000, 0x0000ff00, 0x000000ff, 0x00ff0000,
108c3683b552f592d8039a466c663f7de8c8286e975Chris Craik            };
109c3683b552f592d8039a466c663f7de8c8286e975Chris Craik        }
110c3683b552f592d8039a466c663f7de8c8286e975Chris Craik
111c3683b552f592d8039a466c663f7de8c8286e975Chris Craik}
112