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