1b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/* 2b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * Copyright (C) 2010 The Android Open Source Project 3b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * 4b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 5b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * you may not use this file except in compliance with the License. 6b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * You may obtain a copy of the License at 7b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * 8b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * http://www.apache.org/licenses/LICENSE-2.0 9b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * 10b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * Unless required by applicable law or agreed to in writing, software 11b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * distributed under the License is distributed on an "AS IS" BASIS, 12b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * See the License for the specific language governing permissions and 14b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * limitations under the License. 15b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy */ 16b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 17b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guypackage android.view; 18b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 19b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyimport android.graphics.Bitmap; 20b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyimport android.graphics.Canvas; 2152244fff29042926e21fa897ef5ab11148e35299John Reckimport android.graphics.CanvasProperty; 226c319ca1275c8db892c39b48fc54864c949f9171Romain Guyimport android.graphics.Paint; 237d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guyimport android.graphics.Rect; 24b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 25b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/** 26daf98e941e140e8739458126640183b9f296a2abChet Haase * Hardware accelerated canvas. 27750ca6dbdb259aea0ca5b77380a9303e586ef3eaJohn Reck * 2852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy * @hide 29b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy */ 30daf98e941e140e8739458126640183b9f296a2abChet Haasepublic abstract class HardwareCanvas extends Canvas { 31ef35927abcd089652f87a985dd6dde7afde58b92Romain Guy 32b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy @Override 33b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy public boolean isHardwareAccelerated() { 34b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return true; 35b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 36b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 37b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy @Override 38b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy public void setBitmap(Bitmap bitmap) { 39b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy throw new UnsupportedOperationException(); 40b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 41ef35927abcd089652f87a985dd6dde7afde58b92Romain Guy 42ef35927abcd089652f87a985dd6dde7afde58b92Romain Guy /** 43b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * Invoked before any drawing operation is performed in this canvas. 44750ca6dbdb259aea0ca5b77380a9303e586ef3eaJohn Reck * 457d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy * @param dirty The dirty rectangle to update, can be null. 46f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @return {@link RenderNode#STATUS_DREW} if anything was drawn (such as a call to clear 4752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy * the canvas). 4852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy * 4952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy * @hide 50b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy */ 5144b2fe3fc114ee5f7273c6b0fee2cc999bf244a2Chet Haase public abstract int onPreDraw(Rect dirty); 52b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 53b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy /** 54b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * Invoked after all drawing operation have been performed. 5552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy * 5652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy * @hide 57b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy */ 58b35ab7b72967adcfd01cec483a705dafe8b951d1Gilles Debunne public abstract void onPostDraw(); 591271e2cc80b01d577e9db339459ef0222bb9320dChet Haase 60b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy /** 6152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy * Draws the specified display list onto this canvas. The display list can only 62f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * be drawn if {@link android.view.RenderNode#isValid()} returns true. 6352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy * 64a7090e0cfd7c719a6d4c03aae34f5db98754cbddChris Craik * @param renderNode The RenderNode to replay. 6552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy */ 66a7090e0cfd7c719a6d4c03aae34f5db98754cbddChris Craik public void drawRenderNode(RenderNode renderNode) { 67a7090e0cfd7c719a6d4c03aae34f5db98754cbddChris Craik drawRenderNode(renderNode, null, RenderNode.FLAG_CLIP_CHILDREN); 6852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 6952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 7052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy /** 71b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * Draws the specified display list onto this canvas. 721271e2cc80b01d577e9db339459ef0222bb9320dChet Haase * 73a7090e0cfd7c719a6d4c03aae34f5db98754cbddChris Craik * @param renderNode The RenderNode to replay. 74750ca6dbdb259aea0ca5b77380a9303e586ef3eaJohn Reck * @param dirty Ignored, can be null. 75f666ad7046c0b1b255835f75aeb7d1391067df93John Reck * @param flags Optional flags about drawing, see {@link RenderNode} for 7633f6beb10f98e8ba96250e284876d607055d278dRomain Guy * the possible flags. 776554943a1dd6854c0f4976900956e556767b49e1Romain Guy * 78750ca6dbdb259aea0ca5b77380a9303e586ef3eaJohn Reck * @return One of {@link RenderNode#STATUS_DONE} or {@link RenderNode#STATUS_DREW} 7944b2fe3fc114ee5f7273c6b0fee2cc999bf244a2Chet Haase * if anything was drawn. 8052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy * 8152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy * @hide 82b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy */ 83a7090e0cfd7c719a6d4c03aae34f5db98754cbddChris Craik public abstract int drawRenderNode(RenderNode renderNode, Rect dirty, int flags); 846c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 856c319ca1275c8db892c39b48fc54864c949f9171Romain Guy /** 866c319ca1275c8db892c39b48fc54864c949f9171Romain Guy * Draws the specified layer onto this canvas. 876c319ca1275c8db892c39b48fc54864c949f9171Romain Guy * 886c319ca1275c8db892c39b48fc54864c949f9171Romain Guy * @param layer The layer to composite on this canvas 89ada830f639591b99c3e40de22b07296c7932a33fRomain Guy * @param x The left coordinate of the layer 90ada830f639591b99c3e40de22b07296c7932a33fRomain Guy * @param y The top coordinate of the layer 916c319ca1275c8db892c39b48fc54864c949f9171Romain Guy * @param paint The paint used to draw the layer 9252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy * 9352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy * @hide 946c319ca1275c8db892c39b48fc54864c949f9171Romain Guy */ 95daf98e941e140e8739458126640183b9f296a2abChet Haase abstract void drawHardwareLayer(HardwareLayer layer, float x, float y, Paint paint); 96daf98e941e140e8739458126640183b9f296a2abChet Haase 97daf98e941e140e8739458126640183b9f296a2abChet Haase /** 98daf98e941e140e8739458126640183b9f296a2abChet Haase * Calls the function specified with the drawGLFunction function pointer. This is 99daf98e941e140e8739458126640183b9f296a2abChet Haase * functionality used by webkit for calling into their renderer from our display lists. 100daf98e941e140e8739458126640183b9f296a2abChet Haase * This function may return true if an invalidation is needed after the call. 101daf98e941e140e8739458126640183b9f296a2abChet Haase * 102daf98e941e140e8739458126640183b9f296a2abChet Haase * @param drawGLFunction A native function pointer 103750ca6dbdb259aea0ca5b77380a9303e586ef3eaJohn Reck * 104750ca6dbdb259aea0ca5b77380a9303e586ef3eaJohn Reck * @return {@link RenderNode#STATUS_DONE} 10552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy * 10652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy * @hide 107daf98e941e140e8739458126640183b9f296a2abChet Haase */ 108680df8d60e3445bd14df902796079d730c283c46John Reck public abstract int callDrawGLFunction2(long drawGLFunction); 1098f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy 11052244fff29042926e21fa897ef5ab11148e35299John Reck public abstract void drawCircle(CanvasProperty<Float> cx, CanvasProperty<Float> cy, 11152244fff29042926e21fa897ef5ab11148e35299John Reck CanvasProperty<Float> radius, CanvasProperty<Paint> paint); 112362dd6d632f0eb63de4edf4a6eec281342391d9fJorim Jaggi 113072707dfad1da6f49f4d3ce58ca104f6c46a7266Jorim Jaggi public abstract void drawRoundRect(CanvasProperty<Float> left, CanvasProperty<Float> top, 114072707dfad1da6f49f4d3ce58ca104f6c46a7266Jorim Jaggi CanvasProperty<Float> right, CanvasProperty<Float> bottom, 115072707dfad1da6f49f4d3ce58ca104f6c46a7266Jorim Jaggi CanvasProperty<Float> rx, CanvasProperty<Float> ry, 116072707dfad1da6f49f4d3ce58ca104f6c46a7266Jorim Jaggi CanvasProperty<Paint> paint); 117072707dfad1da6f49f4d3ce58ca104f6c46a7266Jorim Jaggi 118362dd6d632f0eb63de4edf4a6eec281342391d9fJorim Jaggi public static void setProperty(String name, String value) { 119362dd6d632f0eb63de4edf4a6eec281342391d9fJorim Jaggi GLES20Canvas.setProperty(name, value); 120362dd6d632f0eb63de4edf4a6eec281342391d9fJorim Jaggi } 121b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 122