19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.graphics; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 191d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackbornimport java.io.PrintWriter; 201d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Matrix class holds a 3x3 matrix for transforming coordinates. 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Matrix does not have a constructor, so it must be explicitly initialized 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * using either reset() - to construct an identity matrix, or one of the set..() 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * functions (e.g. setTranslate, setRotate, etc.). 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class Matrix { 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MSCALE_X = 0; //!< use with getValues/setValues 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MSKEW_X = 1; //!< use with getValues/setValues 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MTRANS_X = 2; //!< use with getValues/setValues 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MSKEW_Y = 3; //!< use with getValues/setValues 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MSCALE_Y = 4; //!< use with getValues/setValues 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MTRANS_Y = 5; //!< use with getValues/setValues 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MPERSP_0 = 6; //!< use with getValues/setValues 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MPERSP_1 = 7; //!< use with getValues/setValues 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int MPERSP_2 = 8; //!< use with getValues/setValues 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 40ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn /** @hide */ 41ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public static Matrix IDENTITY_MATRIX = new Matrix() { 42ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn void oops() { 43ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn throw new IllegalStateException("Matrix can not be modified"); 44ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 45ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 46ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 47ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public void set(Matrix src) { 48ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 49ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 50ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 51ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 52ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public void reset() { 53ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 54ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 55ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 56ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 57ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public void setTranslate(float dx, float dy) { 58ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 59ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 60ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 61ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 62ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public void setScale(float sx, float sy, float px, float py) { 63ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 64ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 65ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 66ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 67ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public void setScale(float sx, float sy) { 68ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 69ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 70ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 71ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 72ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public void setRotate(float degrees, float px, float py) { 73ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 74ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 75ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 76ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 77ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public void setRotate(float degrees) { 78ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 79ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 80ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 81ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 82ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public void setSinCos(float sinValue, float cosValue, float px, float py) { 83ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 84ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 85ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 86ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 87ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public void setSinCos(float sinValue, float cosValue) { 88ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 89ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 90ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 91ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 92ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public void setSkew(float kx, float ky, float px, float py) { 93ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 94ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 95ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 96ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 97ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public void setSkew(float kx, float ky) { 98ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 99ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 100ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 101ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 102ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public boolean setConcat(Matrix a, Matrix b) { 103ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 104ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn return false; 105ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 106ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 107ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 108ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public boolean preTranslate(float dx, float dy) { 109ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 110ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn return false; 111ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 112ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 113ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 114ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public boolean preScale(float sx, float sy, float px, float py) { 115ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 116ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn return false; 117ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 118ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 119ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 120ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public boolean preScale(float sx, float sy) { 121ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 122ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn return false; 123ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 124ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 125ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 126ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public boolean preRotate(float degrees, float px, float py) { 127ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 128ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn return false; 129ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 130ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 131ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 132ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public boolean preRotate(float degrees) { 133ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 134ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn return false; 135ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 136ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 137ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 138ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public boolean preSkew(float kx, float ky, float px, float py) { 139ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 140ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn return false; 141ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 142ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 143ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 144ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public boolean preSkew(float kx, float ky) { 145ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 146ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn return false; 147ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 148ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 149ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 150ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public boolean preConcat(Matrix other) { 151ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 152ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn return false; 153ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 154ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 155ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 156ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public boolean postTranslate(float dx, float dy) { 157ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 158ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn return false; 159ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 160ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 161ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 162ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public boolean postScale(float sx, float sy, float px, float py) { 163ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 164ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn return false; 165ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 166ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 167ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 168ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public boolean postScale(float sx, float sy) { 169ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 170ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn return false; 171ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 172ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 173ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 174ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public boolean postRotate(float degrees, float px, float py) { 175ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 176ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn return false; 177ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 178ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 179ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 180ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public boolean postRotate(float degrees) { 181ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 182ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn return false; 183ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 184ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 185ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 186ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public boolean postSkew(float kx, float ky, float px, float py) { 187ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 188ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn return false; 189ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 190ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 191ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 192ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public boolean postSkew(float kx, float ky) { 193ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 194ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn return false; 195ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 196ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 197ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 198ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public boolean postConcat(Matrix other) { 199ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 200ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn return false; 201ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 202ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 203ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 204ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public boolean setRectToRect(RectF src, RectF dst, ScaleToFit stf) { 205ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 206ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn return false; 207ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 208ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 209ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 210ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public boolean setPolyToPoly(float[] src, int srcIndex, float[] dst, int dstIndex, 211ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn int pointCount) { 212ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 213ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn return false; 214ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 215ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 216ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn @Override 217ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn public void setValues(float[] values) { 218ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn oops(); 219ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn } 220ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn }; 221ddb715b238c098d8b561a44b9687f0bc67a4c141Dianne Hackborn 222f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy /** 223f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy * @hide 224f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy */ 225f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy public int native_instance; 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create an identity matrix 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Matrix() { 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_instance = native_create(0); 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a matrix that is a (deep) copy of src 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param src The matrix to copy into this matrix 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Matrix(Matrix src) { 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_instance = native_create(src != null ? src.native_instance : 0); 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns true if the matrix is identity. 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This maybe faster than testing if (getType() == 0) 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isIdentity() { 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return native_isIdentity(native_instance); 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns true if will map a rectangle to another rectangle. This can be 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * true if the matrix is identity, scale-only, or rotates a multiple of 90 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * degrees. 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean rectStaysRect() { 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return native_rectStaysRect(native_instance); 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (deep) copy the src matrix into this matrix. If src is null, reset this 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * matrix to the identity matrix. 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void set(Matrix src) { 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (src == null) { 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project reset(); 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_set(native_instance, src.native_instance); 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Returns true iff obj is a Matrix and its values equal our values. 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean equals(Object obj) { 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return obj != null && 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj instanceof Matrix && 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_equals(native_instance, ((Matrix)obj).native_instance); 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Set the matrix to identity */ 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void reset() { 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_reset(native_instance); 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Set the matrix to translate by (dx, dy). */ 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setTranslate(float dx, float dy) { 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_setTranslate(native_instance, dx, dy); 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the matrix to scale by sx and sy, with a pivot point at (px, py). 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The pivot point is the coordinate that should remain unchanged by the 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specified transformation. 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setScale(float sx, float sy, float px, float py) { 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_setScale(native_instance, sx, sy, px, py); 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Set the matrix to scale by sx and sy. */ 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setScale(float sx, float sy) { 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_setScale(native_instance, sx, sy); 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the matrix to rotate by the specified number of degrees, with a pivot 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * point at (px, py). The pivot point is the coordinate that should remain 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * unchanged by the specified transformation. 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setRotate(float degrees, float px, float py) { 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_setRotate(native_instance, degrees, px, py); 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the matrix to rotate about (0,0) by the specified number of degrees. 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setRotate(float degrees) { 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_setRotate(native_instance, degrees); 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the matrix to rotate by the specified sine and cosine values, with a 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * pivot point at (px, py). The pivot point is the coordinate that should 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * remain unchanged by the specified transformation. 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setSinCos(float sinValue, float cosValue, float px, float py) { 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_setSinCos(native_instance, sinValue, cosValue, px, py); 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Set the matrix to rotate by the specified sine and cosine values. */ 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setSinCos(float sinValue, float cosValue) { 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_setSinCos(native_instance, sinValue, cosValue); 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the matrix to skew by sx and sy, with a pivot point at (px, py). 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The pivot point is the coordinate that should remain unchanged by the 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specified transformation. 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setSkew(float kx, float ky, float px, float py) { 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_setSkew(native_instance, kx, ky, px, py); 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Set the matrix to skew by sx and sy. */ 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setSkew(float kx, float ky) { 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_setSkew(native_instance, kx, ky); 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the matrix to the concatenation of the two specified matrices, 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * returning true if the the result can be represented. Either of the two 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * matrices may also be the target matrix. this = a * b 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean setConcat(Matrix a, Matrix b) { 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return native_setConcat(native_instance, a.native_instance, 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.native_instance); 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Preconcats the matrix with the specified translation. 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * M' = M * T(dx, dy) 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean preTranslate(float dx, float dy) { 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return native_preTranslate(native_instance, dx, dy); 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Preconcats the matrix with the specified scale. 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * M' = M * S(sx, sy, px, py) 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean preScale(float sx, float sy, float px, float py) { 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return native_preScale(native_instance, sx, sy, px, py); 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Preconcats the matrix with the specified scale. 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * M' = M * S(sx, sy) 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean preScale(float sx, float sy) { 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return native_preScale(native_instance, sx, sy); 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Preconcats the matrix with the specified rotation. 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * M' = M * R(degrees, px, py) 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean preRotate(float degrees, float px, float py) { 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return native_preRotate(native_instance, degrees, px, py); 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Preconcats the matrix with the specified rotation. 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * M' = M * R(degrees) 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean preRotate(float degrees) { 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return native_preRotate(native_instance, degrees); 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Preconcats the matrix with the specified skew. 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * M' = M * K(kx, ky, px, py) 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean preSkew(float kx, float ky, float px, float py) { 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return native_preSkew(native_instance, kx, ky, px, py); 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Preconcats the matrix with the specified skew. 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * M' = M * K(kx, ky) 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean preSkew(float kx, float ky) { 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return native_preSkew(native_instance, kx, ky); 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Preconcats the matrix with the specified matrix. 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * M' = M * other 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean preConcat(Matrix other) { 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return native_preConcat(native_instance, other.native_instance); 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Postconcats the matrix with the specified translation. 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * M' = T(dx, dy) * M 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean postTranslate(float dx, float dy) { 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return native_postTranslate(native_instance, dx, dy); 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Postconcats the matrix with the specified scale. 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * M' = S(sx, sy, px, py) * M 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean postScale(float sx, float sy, float px, float py) { 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return native_postScale(native_instance, sx, sy, px, py); 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Postconcats the matrix with the specified scale. 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * M' = S(sx, sy) * M 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean postScale(float sx, float sy) { 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return native_postScale(native_instance, sx, sy); 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Postconcats the matrix with the specified rotation. 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * M' = R(degrees, px, py) * M 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean postRotate(float degrees, float px, float py) { 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return native_postRotate(native_instance, degrees, px, py); 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Postconcats the matrix with the specified rotation. 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * M' = R(degrees) * M 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean postRotate(float degrees) { 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return native_postRotate(native_instance, degrees); 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Postconcats the matrix with the specified skew. 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * M' = K(kx, ky, px, py) * M 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean postSkew(float kx, float ky, float px, float py) { 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return native_postSkew(native_instance, kx, ky, px, py); 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Postconcats the matrix with the specified skew. 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * M' = K(kx, ky) * M 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean postSkew(float kx, float ky) { 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return native_postSkew(native_instance, kx, ky); 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Postconcats the matrix with the specified matrix. 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * M' = other * M 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean postConcat(Matrix other) { 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return native_postConcat(native_instance, other.native_instance); 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Controlls how the src rect should align into the dst rect for 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setRectToRect(). 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public enum ScaleToFit { 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Scale in X and Y independently, so that src matches dst exactly. 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This may change the aspect ratio of the src. 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FILL (0), 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Compute a scale that will maintain the original src aspect ratio, 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * but will also ensure that src fits entirely inside dst. At least one 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * axis (X or Y) will fit exactly. START aligns the result to the 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * left and top edges of dst. 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project START (1), 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Compute a scale that will maintain the original src aspect ratio, 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * but will also ensure that src fits entirely inside dst. At least one 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * axis (X or Y) will fit exactly. The result is centered inside dst. 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CENTER (2), 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Compute a scale that will maintain the original src aspect ratio, 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * but will also ensure that src fits entirely inside dst. At least one 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * axis (X or Y) will fit exactly. END aligns the result to the 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * right and bottom edges of dst. 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project END (3); 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // the native values must match those in SkMatrix.h 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ScaleToFit(int nativeInt) { 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.nativeInt = nativeInt; 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int nativeInt; 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the matrix to the scale and translate values that map the source 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rectangle to the destination rectangle, returning true if the the result 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can be represented. 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param src the source rectangle to map from. 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dst the destination rectangle to map to. 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param stf the ScaleToFit option 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the matrix can be represented by the rectangle mapping. 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean setRectToRect(RectF src, RectF dst, ScaleToFit stf) { 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (dst == null || src == null) { 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException(); 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return native_setRectToRect(native_instance, src, dst, stf.nativeInt); 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // private helper to perform range checks on arrays of "points" 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static void checkPointArrays(float[] src, int srcIndex, 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float[] dst, int dstIndex, 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int pointCount) { 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // check for too-small and too-big indices 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int srcStop = srcIndex + (pointCount << 1); 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int dstStop = dstIndex + (pointCount << 1); 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((pointCount | srcIndex | dstIndex | srcStop | dstStop) < 0 || 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project srcStop > src.length || dstStop > dst.length) { 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new ArrayIndexOutOfBoundsException(); 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the matrix such that the specified src points would map to the 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specified dst points. The "points" are represented as an array of floats, 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * order [x0, y0, x1, y1, ...], where each "point" is 2 float values. 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param src The array of src [x,y] pairs (points) 5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param srcIndex Index of the first pair of src values 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dst The array of dst [x,y] pairs (points) 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dstIndex Index of the first pair of dst values 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pointCount The number of pairs/points to be used. Must be [0..4] 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the matrix was set to the specified transformation 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean setPolyToPoly(float[] src, int srcIndex, 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float[] dst, int dstIndex, 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int pointCount) { 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (pointCount > 4) { 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException(); 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project checkPointArrays(src, srcIndex, dst, dstIndex, pointCount); 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return native_setPolyToPoly(native_instance, src, srcIndex, 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dst, dstIndex, pointCount); 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If this matrix can be inverted, return true and if inverse is not null, 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * set inverse to be the inverse of this matrix. If this matrix cannot be 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * inverted, ignore inverse and return false. 5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean invert(Matrix inverse) { 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return native_invert(native_instance, inverse.native_instance); 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Apply this matrix to the array of 2D points specified by src, and write 5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the transformed points into the array of points specified by dst. The 5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * two arrays represent their "points" as pairs of floats [x, y]. 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dst The array of dst points (x,y pairs) 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dstIndex The index of the first [x,y] pair of dst floats 5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param src The array of src points (x,y pairs) 5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param srcIndex The index of the first [x,y] pair of src floats 5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pointCount The number of points (x,y pairs) to transform 5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void mapPoints(float[] dst, int dstIndex, float[] src, int srcIndex, 5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int pointCount) { 5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project checkPointArrays(src, srcIndex, dst, dstIndex, pointCount); 5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_mapPoints(native_instance, dst, dstIndex, src, srcIndex, 5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pointCount, true); 6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Apply this matrix to the array of 2D vectors specified by src, and write 6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the transformed vectors into the array of vectors specified by dst. The 6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * two arrays represent their "vectors" as pairs of floats [x, y]. 6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6073a58ec108bb430b81a328adb2062035f860159b4Adam Cohen * Note: this method does not apply the translation associated with the matrix. Use 6083a58ec108bb430b81a328adb2062035f860159b4Adam Cohen * {@link Matrix#mapPoints(float[], int, float[], int, int)} if you want the translation 6093a58ec108bb430b81a328adb2062035f860159b4Adam Cohen * to be applied. 6103a58ec108bb430b81a328adb2062035f860159b4Adam Cohen * 6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dst The array of dst vectors (x,y pairs) 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dstIndex The index of the first [x,y] pair of dst floats 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param src The array of src vectors (x,y pairs) 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param srcIndex The index of the first [x,y] pair of src floats 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param vectorCount The number of vectors (x,y pairs) to transform 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void mapVectors(float[] dst, int dstIndex, float[] src, int srcIndex, 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int vectorCount) { 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project checkPointArrays(src, srcIndex, dst, dstIndex, vectorCount); 6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_mapPoints(native_instance, dst, dstIndex, src, srcIndex, 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vectorCount, false); 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Apply this matrix to the array of 2D points specified by src, and write 6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the transformed points into the array of points specified by dst. The 6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * two arrays represent their "points" as pairs of floats [x, y]. 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dst The array of dst points (x,y pairs) 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param src The array of src points (x,y pairs) 6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void mapPoints(float[] dst, float[] src) { 6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (dst.length != src.length) { 6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new ArrayIndexOutOfBoundsException(); 6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mapPoints(dst, 0, src, 0, dst.length >> 1); 6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Apply this matrix to the array of 2D vectors specified by src, and write 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the transformed vectors into the array of vectors specified by dst. The 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * two arrays represent their "vectors" as pairs of floats [x, y]. 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6443a58ec108bb430b81a328adb2062035f860159b4Adam Cohen * Note: this method does not apply the translation associated with the matrix. Use 6453a58ec108bb430b81a328adb2062035f860159b4Adam Cohen * {@link Matrix#mapPoints(float[], float[])} if you want the translation to be applied. 6463a58ec108bb430b81a328adb2062035f860159b4Adam Cohen * 6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dst The array of dst vectors (x,y pairs) 6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param src The array of src vectors (x,y pairs) 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void mapVectors(float[] dst, float[] src) { 6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (dst.length != src.length) { 6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new ArrayIndexOutOfBoundsException(); 6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mapVectors(dst, 0, src, 0, dst.length >> 1); 6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Apply this matrix to the array of 2D points, and write the transformed 6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * points back into the array 6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pts The array [x0, y0, x1, y1, ...] of points to transform. 6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void mapPoints(float[] pts) { 6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mapPoints(pts, 0, pts, 0, pts.length >> 1); 6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Apply this matrix to the array of 2D vectors, and write the transformed 6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * vectors back into the array. 6703a58ec108bb430b81a328adb2062035f860159b4Adam Cohen * 6713a58ec108bb430b81a328adb2062035f860159b4Adam Cohen * Note: this method does not apply the translation associated with the matrix. Use 6723a58ec108bb430b81a328adb2062035f860159b4Adam Cohen * {@link Matrix#mapPoints(float[])} if you want the translation to be applied. 6733a58ec108bb430b81a328adb2062035f860159b4Adam Cohen * 6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param vecs The array [x0, y0, x1, y1, ...] of vectors to transform. 6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void mapVectors(float[] vecs) { 6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mapVectors(vecs, 0, vecs, 0, vecs.length >> 1); 6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Apply this matrix to the src rectangle, and write the transformed 6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rectangle into dst. This is accomplished by transforming the 4 corners of 6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * src, and then setting dst to the bounds of those points. 6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dst Where the transformed rectangle is written. 6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param src The original rectangle to be transformed. 6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the result of calling rectStaysRect() 6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean mapRect(RectF dst, RectF src) { 6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (dst == null || src == null) { 6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException(); 6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return native_mapRect(native_instance, dst, src); 6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Apply this matrix to the rectangle, and write the transformed rectangle 6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * back into it. This is accomplished by transforming the 4 corners of rect, 6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and then setting it to the bounds of those points 7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param rect The rectangle to transform. 7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the result of calling rectStaysRect() 7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean mapRect(RectF rect) { 7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mapRect(rect, rect); 7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the mean radius of a circle after it has been mapped by 7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this matrix. NOTE: in perspective this value assumes the circle 7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * has its center at the origin. 7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float mapRadius(float radius) { 7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return native_mapRadius(native_instance, radius); 7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Copy 9 values from the matrix into the array. 7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void getValues(float[] values) { 7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (values.length < 9) { 7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new ArrayIndexOutOfBoundsException(); 7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_getValues(native_instance, values); 7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Copy 9 values from the array into the matrix. 7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Depending on the implementation of Matrix, these may be 7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project transformed into 16.16 integers in the Matrix, such that 7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a subsequent call to getValues() will not yield exactly 7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project the same values. 7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setValues(float[] values) { 7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (values.length < 9) { 7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new ArrayIndexOutOfBoundsException(); 7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_setValues(native_instance, values); 7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 7401d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn StringBuilder sb = new StringBuilder(64); 7411d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("Matrix{"); 7421d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn toShortString(sb); 7431d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append('}'); 7441d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn return sb.toString(); 7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toShortString() { 7491d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn StringBuilder sb = new StringBuilder(64); 7501d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn toShortString(sb); 7511d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn return sb.toString(); 7521d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn } 7531d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn 7541d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn /** 7551d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn * @hide 7561d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn */ 7571d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn public void toShortString(StringBuilder sb) { 7581d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn float[] values = new float[9]; 7591d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn getValues(values); 7601d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append('['); 7611d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(values[0]); sb.append(", "); sb.append(values[1]); sb.append(", "); 7621d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(values[2]); sb.append("]["); 7631d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(values[3]); sb.append(", "); sb.append(values[4]); sb.append(", "); 7641d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(values[5]); sb.append("]["); 7651d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(values[6]); sb.append(", "); sb.append(values[7]); sb.append(", "); 7661d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(values[8]); sb.append(']'); 7671d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn } 7681d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn 7691d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn /** 7701d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn * Print short string, to optimize dumping. 7711d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn * @hide 7721d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn */ 7731d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn public void printShortString(PrintWriter pw) { 7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float[] values = new float[9]; 7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getValues(values); 7761d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print('['); 7771d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(values[0]); pw.print(", "); pw.print(values[1]); pw.print(", "); 7781d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(values[2]); pw.print("]["); 7791d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(values[3]); pw.print(", "); pw.print(values[4]); pw.print(", "); 7801d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(values[5]); pw.print("]["); 7811d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(values[6]); pw.print(", "); pw.print(values[7]); pw.print(", "); 7821d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(values[8]); pw.print(']'); 7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void finalize() throws Throwable { 7879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project finalizer(native_instance); 7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ final int ni() { 7919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return native_instance; 7929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int native_create(int native_src_or_zero); 7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean native_isIdentity(int native_object); 7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean native_rectStaysRect(int native_object); 7979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void native_reset(int native_object); 7989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void native_set(int native_object, int other); 7999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void native_setTranslate(int native_object, 8009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float dx, float dy); 8019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void native_setScale(int native_object, 8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float sx, float sy, float px, float py); 8039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void native_setScale(int native_object, 8049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float sx, float sy); 8059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void native_setRotate(int native_object, 8069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float degrees, float px, float py); 8079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void native_setRotate(int native_object, 8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float degrees); 8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void native_setSinCos(int native_object, 8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float sinValue, float cosValue, float px, float py); 8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void native_setSinCos(int native_object, 8129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float sinValue, float cosValue); 8139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void native_setSkew(int native_object, 8149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float kx, float ky, float px, float py); 8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void native_setSkew(int native_object, 8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float kx, float ky); 8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean native_setConcat(int native_object, 8189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int a, int b); 8199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean native_preTranslate(int native_object, 8209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float dx, float dy); 8219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean native_preScale(int native_object, 8229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float sx, float sy, float px, float py); 8239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean native_preScale(int native_object, 8249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float sx, float sy); 8259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean native_preRotate(int native_object, 8269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float degrees, float px, float py); 8279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean native_preRotate(int native_object, 8289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float degrees); 8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean native_preSkew(int native_object, 8309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float kx, float ky, float px, float py); 8319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean native_preSkew(int native_object, 8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float kx, float ky); 8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean native_preConcat(int native_object, 8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int other_matrix); 8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean native_postTranslate(int native_object, 8369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float dx, float dy); 8379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean native_postScale(int native_object, 8389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float sx, float sy, float px, float py); 8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean native_postScale(int native_object, 8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float sx, float sy); 8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean native_postRotate(int native_object, 8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float degrees, float px, float py); 8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean native_postRotate(int native_object, 8449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float degrees); 8459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean native_postSkew(int native_object, 8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float kx, float ky, float px, float py); 8479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean native_postSkew(int native_object, 8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float kx, float ky); 8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean native_postConcat(int native_object, 8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int other_matrix); 8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean native_setRectToRect(int native_object, 8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project RectF src, RectF dst, int stf); 8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean native_setPolyToPoly(int native_object, 8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float[] src, int srcIndex, float[] dst, int dstIndex, int pointCount); 8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean native_invert(int native_object, int inverse); 8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void native_mapPoints(int native_object, 8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float[] dst, int dstIndex, float[] src, int srcIndex, 8589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int ptCount, boolean isPts); 8599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean native_mapRect(int native_object, 8609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project RectF dst, RectF src); 8619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native float native_mapRadius(int native_object, 8629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float radius); 8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void native_getValues(int native_object, 8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float[] values); 8659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void native_setValues(int native_object, 8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float[] values); 8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean native_equals(int native_a, int native_b); 8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void finalizer(int native_instance); 8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 870