GLES20Canvas.java revision 9d5316e3f56d138504565ff311145ac01621dff4
1e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy/* 2e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * Copyright (C) 2010 The Android Open Source Project 3e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * 4e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 5e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * you may not use this file except in compliance with the License. 6e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * You may obtain a copy of the License at 7e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * 8e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * http://www.apache.org/licenses/LICENSE-2.0 9e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * 10e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * Unless required by applicable law or agreed to in writing, software 11e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * distributed under the License is distributed on an "AS IS" BASIS, 12e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * See the License for the specific language governing permissions and 14e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * limitations under the License. 15e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy */ 16e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 17e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guypackage android.view; 18e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 19e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guyimport android.graphics.Bitmap; 20e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guyimport android.graphics.Canvas; 21e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guyimport android.graphics.DrawFilter; 22e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guyimport android.graphics.Matrix; 23e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guyimport android.graphics.Paint; 24e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guyimport android.graphics.Path; 25e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guyimport android.graphics.Picture; 26e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guyimport android.graphics.PorterDuff; 27e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guyimport android.graphics.Rect; 28e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guyimport android.graphics.RectF; 29e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guyimport android.graphics.Region; 30e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 31e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guyimport javax.microedition.khronos.opengles.GL; 32e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 33e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy/** 34e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * An implementation of Canvas on top of OpenGL ES 2.0. 35e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy */ 36e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy@SuppressWarnings({"deprecation"}) 37e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guyclass GLES20Canvas extends Canvas { 38e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"}) 39e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy private final GL mGl; 40e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy private final boolean mOpaque; 41e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy private final int mRenderer; 42e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 43e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy private int mWidth; 44e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy private int mHeight; 45e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 46e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy /////////////////////////////////////////////////////////////////////////// 47e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // Constructors 48e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy /////////////////////////////////////////////////////////////////////////// 49e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 50e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy GLES20Canvas(GL gl, boolean translucent) { 51e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy mGl = gl; 52e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy mOpaque = !translucent; 53e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 54e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy mRenderer = nCreateRenderer(); 55e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 56e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 57e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy private native int nCreateRenderer(); 58e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 59e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 60e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy protected void finalize() throws Throwable { 61e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy try { 62e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy super.finalize(); 63e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } finally { 64e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy nDestroyRenderer(mRenderer); 65e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 66e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 67e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 68e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy private native void nDestroyRenderer(int renderer); 69e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 70e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy /////////////////////////////////////////////////////////////////////////// 71e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // Canvas management 72e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy /////////////////////////////////////////////////////////////////////////// 73e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 74e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 75e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public boolean isHardwareAccelerated() { 76e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy return true; 77e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 78e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 79e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 80e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public GL getGL() { 81e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy throw new UnsupportedOperationException(); 82e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 83e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 84e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 85e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void setBitmap(Bitmap bitmap) { 86e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy throw new UnsupportedOperationException(); 87e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 88e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 89e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 90e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public boolean isOpaque() { 91e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy return mOpaque; 92e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 93e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 94e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 95e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public int getWidth() { 96e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy return mWidth; 97e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 98e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 99e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 100e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public int getHeight() { 101e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy return mHeight; 102e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 103e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 104e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy /////////////////////////////////////////////////////////////////////////// 105e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // Setup 106e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy /////////////////////////////////////////////////////////////////////////// 107e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 108e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 109e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void setViewport(int width, int height) { 110e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy mWidth = width; 111e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy mHeight = height; 112e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 113e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy nSetViewport(mRenderer, width, height); 114e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 115e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 116e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy private native void nSetViewport(int renderer, int width, int height); 117e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 118e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy void onPreDraw() { 119e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy nPrepare(mRenderer); 120e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 121e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 122e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy private native void nPrepare(int renderer); 123e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 124e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy /////////////////////////////////////////////////////////////////////////// 125e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // Clipping 126e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy /////////////////////////////////////////////////////////////////////////// 127e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 128e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 129e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public boolean clipPath(Path path) { 130e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy throw new UnsupportedOperationException(); 131e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 132e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 133e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 134e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public boolean clipPath(Path path, Region.Op op) { 135e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy throw new UnsupportedOperationException(); 136e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 137e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 138e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 139e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public boolean clipRect(float left, float top, float right, float bottom) { 140bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy return nClipRect(mRenderer, left, top, right, bottom); 141e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 142bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy 143bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy private native boolean nClipRect(int renderer, float left, float top, float right, float bottom); 144e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 145e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 146e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public boolean clipRect(float left, float top, float right, float bottom, Region.Op op) { 147e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy throw new UnsupportedOperationException(); 148e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 149e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 150e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 151e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public boolean clipRect(int left, int top, int right, int bottom) { 152bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy return nClipRect(mRenderer, left, top, right, bottom); 153e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 154bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy 155bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy private native boolean nClipRect(int renderer, int left, int top, int right, int bottom); 156e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 157e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 158e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public boolean clipRect(Rect rect) { 159bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy return clipRect(rect.left, rect.top, rect.right, rect.bottom); 160e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 161e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 162e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 163e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public boolean clipRect(Rect rect, Region.Op op) { 164e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy throw new UnsupportedOperationException(); 165e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 166e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 167e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 168e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public boolean clipRect(RectF rect) { 169bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy return clipRect(rect.left, rect.top, rect.right, rect.bottom); 170e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 171e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 172e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 173e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public boolean clipRect(RectF rect, Region.Op op) { 174e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy throw new UnsupportedOperationException(); 175e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 176e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 177e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 178e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public boolean clipRegion(Region region) { 179e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy throw new UnsupportedOperationException(); 180e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 181e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 182e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 183e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public boolean clipRegion(Region region, Region.Op op) { 184e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy throw new UnsupportedOperationException(); 185e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 186e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 187e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 188e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public boolean getClipBounds(Rect bounds) { 1899d5316e3f56d138504565ff311145ac01621dff4Romain Guy return nGetClipBounds(mRenderer, bounds); 190e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 191e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 1929d5316e3f56d138504565ff311145ac01621dff4Romain Guy private native boolean nGetClipBounds(int renderer, Rect bounds); 1939d5316e3f56d138504565ff311145ac01621dff4Romain Guy 194e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 195e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public boolean quickReject(float left, float top, float right, float bottom, EdgeType type) { 196e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // TODO: Implement 197e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy return false; 198e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 199e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 200e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 201e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public boolean quickReject(Path path, EdgeType type) { 202bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy throw new UnsupportedOperationException(); 203e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 204e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 205e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 206e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public boolean quickReject(RectF rect, EdgeType type) { 207bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy return quickReject(rect.left, rect.top, rect.right, rect.bottom, type); 208e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 209e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 210e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy /////////////////////////////////////////////////////////////////////////// 211e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // Transformations 212e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy /////////////////////////////////////////////////////////////////////////// 213e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 214e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 215e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void translate(float dx, float dy) { 216f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy nTranslate(mRenderer, dx, dy); 217e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 218f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy 219f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy private native void nTranslate(int renderer, float dx, float dy); 220e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 221e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 222e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void skew(float sx, float sy) { 223e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy throw new UnsupportedOperationException(); 224e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 225e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 226e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 227e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void rotate(float degrees) { 228f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy nRotate(mRenderer, degrees); 229e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 230f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy 231f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy private native void nRotate(int renderer, float degrees); 232e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 233e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 234e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void scale(float sx, float sy) { 235f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy nScale(mRenderer, sx, sy); 236e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 237e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 238f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy private native void nScale(int renderer, float sx, float sy); 239f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy 240e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 241e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void setMatrix(Matrix matrix) { 242f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy nSetMatrix(mRenderer, matrix.native_instance); 243e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 244f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy 245f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy private native void nSetMatrix(int renderer, int matrix); 246e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 247e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 248f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy public void getMatrix(Matrix matrix) { 249f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy nGetMatrix(mRenderer, matrix.native_instance); 250e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 251f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy 252f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy private native void nGetMatrix(int renderer, int matrix); 253e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 254e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 255e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void concat(Matrix matrix) { 256f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy nConcatMatrix(mRenderer, matrix.native_instance); 257e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 258e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 259f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy private native void nConcatMatrix(int renderer, int matrix); 260f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy 261e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy /////////////////////////////////////////////////////////////////////////// 262e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // State management 263e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy /////////////////////////////////////////////////////////////////////////// 264e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 265e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 266e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public int save() { 267bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy return nSave(mRenderer, 0); 268e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 269bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy 270e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 271e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public int save(int saveFlags) { 272bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy return nSave(mRenderer, saveFlags); 273e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 274e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 275bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy private native int nSave(int renderer, int flags); 276bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy 277e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 278e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public int saveLayer(RectF bounds, Paint paint, int saveFlags) { 279e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // TODO: Implement 280e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy return 0; 281e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 282e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 283e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 284e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public int saveLayer(float left, float top, float right, float bottom, Paint paint, 285e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy int saveFlags) { 286e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // TODO: Implement 287e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy return 0; 288e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 289e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 290e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 291e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public int saveLayerAlpha(RectF bounds, int alpha, int saveFlags) { 292e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // TODO: Implement 293e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy return 0; 294e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 295e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 296e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 297e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public int saveLayerAlpha(float left, float top, float right, float bottom, int alpha, 298e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy int saveFlags) { 299e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // TODO: Implement 300e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy return 0; 301e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 302e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 303e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 304e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void restore() { 305bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy nRestore(mRenderer); 306e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 307bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy 308bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy private native void nRestore(int renderer); 309e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 310e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 311e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void restoreToCount(int saveCount) { 312bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy nRestoreToCount(mRenderer, saveCount); 313e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 314e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 315bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy private native void nRestoreToCount(int renderer, int saveCount); 316bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy 317e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 318e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public int getSaveCount() { 319bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy return nGetSaveCount(mRenderer); 320e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 321bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy 322bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy private native int nGetSaveCount(int renderer); 323e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 324e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy /////////////////////////////////////////////////////////////////////////// 325e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // Filtering 326e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy /////////////////////////////////////////////////////////////////////////// 327e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 328e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 329e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void setDrawFilter(DrawFilter filter) { 330e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy throw new UnsupportedOperationException(); 331e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 332e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 333e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 334e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public DrawFilter getDrawFilter() { 335e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy throw new UnsupportedOperationException(); 336e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 337e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 338e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy /////////////////////////////////////////////////////////////////////////// 339e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // Drawing 340e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy /////////////////////////////////////////////////////////////////////////// 341e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 342e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 343e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, 344e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy Paint paint) { 345e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy throw new UnsupportedOperationException(); 346e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 347e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 348e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 349e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawARGB(int a, int r, int g, int b) { 35085bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy drawColor((a & 0xFF) << 24 | (r & 0xFF) << 16 | (g & 0xFF) << 8 | (b & 0xFF)); 351e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 352e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 353e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 354e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawBitmap(Bitmap bitmap, float left, float top, Paint paint) { 355e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // TODO: Implement 356e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 357e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 358e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 359e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint) { 360e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // TODO: Implement 361e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 362e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 363e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 364e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint) { 365e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // TODO: Implement 366e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 367e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 368e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 369e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint) { 370e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // TODO: Implement 371e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 372e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 373e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 374e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawBitmap(int[] colors, int offset, int stride, float x, float y, 375e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy int width, int height, boolean hasAlpha, Paint paint) { 376e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 377e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // TODO: Implement 378e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 379e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 380e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 381e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawBitmap(int[] colors, int offset, int stride, int x, int y, 382e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy int width, int height, boolean hasAlpha, Paint paint) { 383e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 384e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // TODO: Implement 385e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 386e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 387e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 388e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawBitmapMesh(Bitmap bitmap, int meshWidth, int meshHeight, float[] verts, 389e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy int vertOffset, int[] colors, int colorOffset, Paint paint) { 390e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 391e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy throw new UnsupportedOperationException(); 392e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 393e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 394e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 395e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawCircle(float cx, float cy, float radius, Paint paint) { 396e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy throw new UnsupportedOperationException(); 397e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 398e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 399e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 400e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawColor(int color) { 40185bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy drawColor(color, PorterDuff.Mode.SRC_OVER); 402e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 403e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 404e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 405e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawColor(int color, PorterDuff.Mode mode) { 40685bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy nDrawColor(mRenderer, color, mode.nativeInt); 407e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 40885bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy 40985bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy private native void nDrawColor(int renderer, int color, int mode); 410e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 411e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 412e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawLine(float startX, float startY, float stopX, float stopY, Paint paint) { 413e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // TODO: Implement 414e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 415e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 416e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 417e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawLines(float[] pts, int offset, int count, Paint paint) { 418e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // TODO: Implement 419e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 420e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 421e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 422e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawLines(float[] pts, Paint paint) { 423e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // TODO: Implement 424e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 425e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 426e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 427e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawOval(RectF oval, Paint paint) { 428e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy throw new UnsupportedOperationException(); 429e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 430e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 431e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 432e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawPaint(Paint paint) { 433e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // TODO: Implement 434e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 435e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 436e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 437e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawPath(Path path, Paint paint) { 438e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy throw new UnsupportedOperationException(); 439e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 440e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 441e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 442e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawPicture(Picture picture) { 443e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy throw new UnsupportedOperationException(); 444e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 445e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 446e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 447e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawPicture(Picture picture, Rect dst) { 448e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy throw new UnsupportedOperationException(); 449e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 450e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 451e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 452e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawPicture(Picture picture, RectF dst) { 453e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy throw new UnsupportedOperationException(); 454e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 455e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 456e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 457e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawPoint(float x, float y, Paint paint) { 458e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // TODO: Implement 459e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 460e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 461e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 462e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawPoints(float[] pts, int offset, int count, Paint paint) { 463e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // TODO: Implement 464e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 465e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 466e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 467e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawPoints(float[] pts, Paint paint) { 468e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // TODO: Implement 469e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 470e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 471e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 472e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawPosText(char[] text, int index, int count, float[] pos, Paint paint) { 473e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy throw new UnsupportedOperationException(); 474e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 475e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 476e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 477e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawPosText(String text, float[] pos, Paint paint) { 478e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy throw new UnsupportedOperationException(); 479e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 480e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 481e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 482e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawRect(float left, float top, float right, float bottom, Paint paint) { 483e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // TODO: Implement 484e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 485e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 486e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 487e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawRect(Rect r, Paint paint) { 488e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // TODO: Implement 489e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 490e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 491e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 492e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawRect(RectF rect, Paint paint) { 493e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // TODO: Implement 494e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 495e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 496e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 497e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawRGB(int r, int g, int b) { 49885bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy drawColor(0xFF000000 | (r & 0xFF) << 16 | (g & 0xFF) << 8 | (b & 0xFF)); 499e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 500e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 501e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 502e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawRoundRect(RectF rect, float rx, float ry, Paint paint) { 503e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy throw new UnsupportedOperationException(); 504e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 505e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 506e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 507e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawText(char[] text, int index, int count, float x, float y, Paint paint) { 508e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // TODO: Implement 509e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 510e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 511e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 512e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawText(CharSequence text, int start, int end, float x, float y, Paint paint) { 513e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // TODO: Implement 514e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 515e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 516e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 517e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawText(String text, int start, int end, float x, float y, Paint paint) { 518e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // TODO: Implement 519e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 520e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 521e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 522e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawText(String text, float x, float y, Paint paint) { 523e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // TODO: Implement 524e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 525e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 526e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 527e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawTextOnPath(char[] text, int index, int count, Path path, float hOffset, 528e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy float vOffset, Paint paint) { 529e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 530e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy throw new UnsupportedOperationException(); 531e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 532e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 533e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 534e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint) { 535e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy throw new UnsupportedOperationException(); 536e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 537e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 538e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 539e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawTextRun(char[] text, int index, int count, int contextIndex, int contextCount, 540e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy float x, float y, int dir, Paint paint) { 541e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 542e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy throw new UnsupportedOperationException(); 543e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 544e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 545e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 546e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawTextRun(CharSequence text, int start, int end, int contextStart, int contextEnd, 547e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy float x, float y, int dir, Paint paint) { 548e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 549e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy throw new UnsupportedOperationException(); 550e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 551e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 552e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 553e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public void drawVertices(VertexMode mode, int vertexCount, float[] verts, int vertOffset, 554e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy float[] texs, int texOffset, int[] colors, int colorOffset, short[] indices, 555e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy int indexOffset, int indexCount, Paint paint) { 556e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 557e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy throw new UnsupportedOperationException(); 558e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 559e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy} 560