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; 216c319ca1275c8db892c39b48fc54864c949f9171Romain Guyimport android.graphics.Paint; 227d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guyimport android.graphics.Rect; 23b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 24b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/** 25daf98e941e140e8739458126640183b9f296a2abChet Haase * Hardware accelerated canvas. 26daf98e941e140e8739458126640183b9f296a2abChet Haase * 27daf98e941e140e8739458126640183b9f296a2abChet Haase * @hide 28b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy */ 29daf98e941e140e8739458126640183b9f296a2abChet Haasepublic abstract class HardwareCanvas extends Canvas { 30b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy @Override 31b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy public boolean isHardwareAccelerated() { 32b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return true; 33b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 34b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 35b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy @Override 36b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy public void setBitmap(Bitmap bitmap) { 37b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy throw new UnsupportedOperationException(); 38b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 39b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 40b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy /** 41b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * Invoked before any drawing operation is performed in this canvas. 427d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy * 437d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy * @param dirty The dirty rectangle to update, can be null. 4444b2fe3fc114ee5f7273c6b0fee2cc999bf244a2Chet Haase * @return {@link DisplayList#STATUS_DREW} if anything was drawn (such as a call to clear 4544b2fe3fc114ee5f7273c6b0fee2cc999bf244a2Chet Haase * the canvas). 46b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy */ 4744b2fe3fc114ee5f7273c6b0fee2cc999bf244a2Chet Haase public abstract int onPreDraw(Rect dirty); 48b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 49b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy /** 50b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * Invoked after all drawing operation have been performed. 51b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy */ 52b35ab7b72967adcfd01cec483a705dafe8b951d1Gilles Debunne public abstract void onPostDraw(); 531271e2cc80b01d577e9db339459ef0222bb9320dChet Haase 54b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy /** 55b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * Draws the specified display list onto this canvas. 561271e2cc80b01d577e9db339459ef0222bb9320dChet Haase * 57b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * @param displayList The display list to replay. 58cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy * @param dirty The dirty region to redraw in the next pass, matters only 59cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy * if this method returns true, can be null. 6033f6beb10f98e8ba96250e284876d607055d278dRomain Guy * @param flags Optional flags about drawing, see {@link DisplayList} for 6133f6beb10f98e8ba96250e284876d607055d278dRomain Guy * the possible flags. 626554943a1dd6854c0f4976900956e556767b49e1Romain Guy * 6344b2fe3fc114ee5f7273c6b0fee2cc999bf244a2Chet Haase * @return One of {@link DisplayList#STATUS_DONE}, {@link DisplayList#STATUS_DRAW}, or 6444b2fe3fc114ee5f7273c6b0fee2cc999bf244a2Chet Haase * {@link DisplayList#STATUS_INVOKE}, or'd with {@link DisplayList#STATUS_DREW} 6544b2fe3fc114ee5f7273c6b0fee2cc999bf244a2Chet Haase * if anything was drawn. 66b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy */ 671271e2cc80b01d577e9db339459ef0222bb9320dChet Haase public abstract int drawDisplayList(DisplayList displayList, Rect dirty, int flags); 686c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 696c319ca1275c8db892c39b48fc54864c949f9171Romain Guy /** 70ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * Outputs the specified display list to the log. This method exists for use by 71ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * tools to output display lists for selected nodes to the log. 72ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * 73ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * @param displayList The display list to be logged. 74ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase */ 75ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase abstract void outputDisplayList(DisplayList displayList); 76ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 77ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase /** 786c319ca1275c8db892c39b48fc54864c949f9171Romain Guy * Draws the specified layer onto this canvas. 796c319ca1275c8db892c39b48fc54864c949f9171Romain Guy * 806c319ca1275c8db892c39b48fc54864c949f9171Romain Guy * @param layer The layer to composite on this canvas 81ada830f639591b99c3e40de22b07296c7932a33fRomain Guy * @param x The left coordinate of the layer 82ada830f639591b99c3e40de22b07296c7932a33fRomain Guy * @param y The top coordinate of the layer 836c319ca1275c8db892c39b48fc54864c949f9171Romain Guy * @param paint The paint used to draw the layer 846c319ca1275c8db892c39b48fc54864c949f9171Romain Guy */ 85daf98e941e140e8739458126640183b9f296a2abChet Haase abstract void drawHardwareLayer(HardwareLayer layer, float x, float y, Paint paint); 86daf98e941e140e8739458126640183b9f296a2abChet Haase 87daf98e941e140e8739458126640183b9f296a2abChet Haase /** 88daf98e941e140e8739458126640183b9f296a2abChet Haase * Calls the function specified with the drawGLFunction function pointer. This is 89daf98e941e140e8739458126640183b9f296a2abChet Haase * functionality used by webkit for calling into their renderer from our display lists. 90daf98e941e140e8739458126640183b9f296a2abChet Haase * This function may return true if an invalidation is needed after the call. 91daf98e941e140e8739458126640183b9f296a2abChet Haase * 92daf98e941e140e8739458126640183b9f296a2abChet Haase * @param drawGLFunction A native function pointer 936554943a1dd6854c0f4976900956e556767b49e1Romain Guy * 946554943a1dd6854c0f4976900956e556767b49e1Romain Guy * @return One of {@link DisplayList#STATUS_DONE}, {@link DisplayList#STATUS_DRAW} or 956554943a1dd6854c0f4976900956e556767b49e1Romain Guy * {@link DisplayList#STATUS_INVOKE} 96daf98e941e140e8739458126640183b9f296a2abChet Haase */ 976554943a1dd6854c0f4976900956e556767b49e1Romain Guy public int callDrawGLFunction(int drawGLFunction) { 98daf98e941e140e8739458126640183b9f296a2abChet Haase // Noop - this is done in the display list recorder subclass 996554943a1dd6854c0f4976900956e556767b49e1Romain Guy return DisplayList.STATUS_DONE; 100daf98e941e140e8739458126640183b9f296a2abChet Haase } 1018f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy 1028f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy /** 1038f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy * Invoke all the functors who requested to be invoked during the previous frame. 1048f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy * 1058f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy * @param dirty The region to redraw when the functors return {@link DisplayList#STATUS_DRAW} 1068f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy * 1078f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy * @return One of {@link DisplayList#STATUS_DONE}, {@link DisplayList#STATUS_DRAW} or 1088f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy * {@link DisplayList#STATUS_INVOKE} 1098f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy */ 1108f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy public int invokeFunctors(Rect dirty) { 1118f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy return DisplayList.STATUS_DONE; 1128f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy } 113ba6be8a62dcdb3ffd210cd36b9af4e3a658eac47Romain Guy 114ba6be8a62dcdb3ffd210cd36b9af4e3a658eac47Romain Guy /** 115ba6be8a62dcdb3ffd210cd36b9af4e3a658eac47Romain Guy * Detaches the specified functor from the current functor execution queue. 116ba6be8a62dcdb3ffd210cd36b9af4e3a658eac47Romain Guy * 117ba6be8a62dcdb3ffd210cd36b9af4e3a658eac47Romain Guy * @param functor The native functor to remove from the execution queue. 118ba6be8a62dcdb3ffd210cd36b9af4e3a658eac47Romain Guy * 119ba6be8a62dcdb3ffd210cd36b9af4e3a658eac47Romain Guy * @see #invokeFunctors(android.graphics.Rect) 120ba6be8a62dcdb3ffd210cd36b9af4e3a658eac47Romain Guy * @see #callDrawGLFunction(int) 121ba6be8a62dcdb3ffd210cd36b9af4e3a658eac47Romain Guy * @see #detachFunctor(int) 122ba6be8a62dcdb3ffd210cd36b9af4e3a658eac47Romain Guy */ 123ba6be8a62dcdb3ffd210cd36b9af4e3a658eac47Romain Guy abstract void detachFunctor(int functor); 124ba6be8a62dcdb3ffd210cd36b9af4e3a658eac47Romain Guy 125ba6be8a62dcdb3ffd210cd36b9af4e3a658eac47Romain Guy /** 126ba6be8a62dcdb3ffd210cd36b9af4e3a658eac47Romain Guy * Attaches the specified functor to the current functor execution queue. 127ba6be8a62dcdb3ffd210cd36b9af4e3a658eac47Romain Guy * 128ba6be8a62dcdb3ffd210cd36b9af4e3a658eac47Romain Guy * @param functor The native functor to add to the execution queue. 129ba6be8a62dcdb3ffd210cd36b9af4e3a658eac47Romain Guy * 130ba6be8a62dcdb3ffd210cd36b9af4e3a658eac47Romain Guy * @see #invokeFunctors(android.graphics.Rect) 131ba6be8a62dcdb3ffd210cd36b9af4e3a658eac47Romain Guy * @see #callDrawGLFunction(int) 132ba6be8a62dcdb3ffd210cd36b9af4e3a658eac47Romain Guy * @see #detachFunctor(int) 133ba6be8a62dcdb3ffd210cd36b9af4e3a658eac47Romain Guy */ 134ba6be8a62dcdb3ffd210cd36b9af4e3a658eac47Romain Guy abstract void attachFunctor(int functor); 13511cb642756093a4af901b1525375b1eb2b5c3e2bRomain Guy 13611cb642756093a4af901b1525375b1eb2b5c3e2bRomain Guy /** 13711cb642756093a4af901b1525375b1eb2b5c3e2bRomain Guy * Indicates that the specified layer must be updated as soon as possible. 13811cb642756093a4af901b1525375b1eb2b5c3e2bRomain Guy * 13911cb642756093a4af901b1525375b1eb2b5c3e2bRomain Guy * @param layer The layer to update 14011cb642756093a4af901b1525375b1eb2b5c3e2bRomain Guy * 14111cb642756093a4af901b1525375b1eb2b5c3e2bRomain Guy * @see #clearLayerUpdates() 14211cb642756093a4af901b1525375b1eb2b5c3e2bRomain Guy */ 14311cb642756093a4af901b1525375b1eb2b5c3e2bRomain Guy abstract void pushLayerUpdate(HardwareLayer layer); 14411cb642756093a4af901b1525375b1eb2b5c3e2bRomain Guy 14511cb642756093a4af901b1525375b1eb2b5c3e2bRomain Guy /** 14611cb642756093a4af901b1525375b1eb2b5c3e2bRomain Guy * Removes all enqueued layer updates. 14711cb642756093a4af901b1525375b1eb2b5c3e2bRomain Guy * 14811cb642756093a4af901b1525375b1eb2b5c3e2bRomain Guy * @see #pushLayerUpdate(HardwareLayer) 14911cb642756093a4af901b1525375b1eb2b5c3e2bRomain Guy */ 15011cb642756093a4af901b1525375b1eb2b5c3e2bRomain Guy abstract void clearLayerUpdates(); 151b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 152