• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2010 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.view;
18 
19 import android.graphics.Bitmap;
20 import android.graphics.Canvas;
21 import android.graphics.Paint;
22 import android.graphics.Rect;
23 
24 /**
25  * Hardware accelerated canvas.
26  *
27  * @hide
28  */
29 public abstract class HardwareCanvas extends Canvas {
30     @Override
isHardwareAccelerated()31     public boolean isHardwareAccelerated() {
32         return true;
33     }
34 
35     @Override
setBitmap(Bitmap bitmap)36     public void setBitmap(Bitmap bitmap) {
37         throw new UnsupportedOperationException();
38     }
39 
40     /**
41      * Invoked before any drawing operation is performed in this canvas.
42      *
43      * @param dirty The dirty rectangle to update, can be null.
44      * @return {@link DisplayList#STATUS_DREW} if anything was drawn (such as a call to clear
45      * the canvas).
46      */
onPreDraw(Rect dirty)47     public abstract int onPreDraw(Rect dirty);
48 
49     /**
50      * Invoked after all drawing operation have been performed.
51      */
onPostDraw()52     public abstract void onPostDraw();
53 
54     /**
55      * Draws the specified display list onto this canvas.
56      *
57      * @param displayList The display list to replay.
58      * @param dirty The dirty region to redraw in the next pass, matters only
59      *        if this method returns true, can be null.
60      * @param flags Optional flags about drawing, see {@link DisplayList} for
61      *              the possible flags.
62      *
63      * @return One of {@link DisplayList#STATUS_DONE}, {@link DisplayList#STATUS_DRAW}, or
64      *         {@link DisplayList#STATUS_INVOKE}, or'd with {@link DisplayList#STATUS_DREW}
65      *         if anything was drawn.
66      */
drawDisplayList(DisplayList displayList, Rect dirty, int flags)67     public abstract int drawDisplayList(DisplayList displayList, Rect dirty, int flags);
68 
69     /**
70      * Outputs the specified display list to the log. This method exists for use by
71      * tools to output display lists for selected nodes to the log.
72      *
73      * @param displayList The display list to be logged.
74      */
outputDisplayList(DisplayList displayList)75     abstract void outputDisplayList(DisplayList displayList);
76 
77     /**
78      * Draws the specified layer onto this canvas.
79      *
80      * @param layer The layer to composite on this canvas
81      * @param x The left coordinate of the layer
82      * @param y The top coordinate of the layer
83      * @param paint The paint used to draw the layer
84      */
drawHardwareLayer(HardwareLayer layer, float x, float y, Paint paint)85     abstract void drawHardwareLayer(HardwareLayer layer, float x, float y, Paint paint);
86 
87     /**
88      * Calls the function specified with the drawGLFunction function pointer. This is
89      * functionality used by webkit for calling into their renderer from our display lists.
90      * This function may return true if an invalidation is needed after the call.
91      *
92      * @param drawGLFunction A native function pointer
93      *
94      * @return One of {@link DisplayList#STATUS_DONE}, {@link DisplayList#STATUS_DRAW} or
95      *         {@link DisplayList#STATUS_INVOKE}
96      */
callDrawGLFunction(int drawGLFunction)97     public int callDrawGLFunction(int drawGLFunction) {
98         // Noop - this is done in the display list recorder subclass
99         return DisplayList.STATUS_DONE;
100     }
101 
102     /**
103      * Invoke all the functors who requested to be invoked during the previous frame.
104      *
105      * @param dirty The region to redraw when the functors return {@link DisplayList#STATUS_DRAW}
106      *
107      * @return One of {@link DisplayList#STATUS_DONE}, {@link DisplayList#STATUS_DRAW} or
108      *         {@link DisplayList#STATUS_INVOKE}
109      */
invokeFunctors(Rect dirty)110     public int invokeFunctors(Rect dirty) {
111         return DisplayList.STATUS_DONE;
112     }
113 
114     /**
115      * Detaches the specified functor from the current functor execution queue.
116      *
117      * @param functor The native functor to remove from the execution queue.
118      *
119      * @see #invokeFunctors(android.graphics.Rect)
120      * @see #callDrawGLFunction(int)
121      * @see #detachFunctor(int)
122      */
detachFunctor(int functor)123     abstract void detachFunctor(int functor);
124 
125     /**
126      * Attaches the specified functor to the current functor execution queue.
127      *
128      * @param functor The native functor to add to the execution queue.
129      *
130      * @see #invokeFunctors(android.graphics.Rect)
131      * @see #callDrawGLFunction(int)
132      * @see #detachFunctor(int)
133      */
attachFunctor(int functor)134     abstract void attachFunctor(int functor);
135 
136     /**
137      * Indicates that the specified layer must be updated as soon as possible.
138      *
139      * @param layer The layer to update
140      *
141      * @see #clearLayerUpdates()
142      */
pushLayerUpdate(HardwareLayer layer)143     abstract void pushLayerUpdate(HardwareLayer layer);
144 
145     /**
146      * Removes all enqueued layer updates.
147      *
148      * @see #pushLayerUpdate(HardwareLayer)
149      */
clearLayerUpdates()150     abstract void clearLayerUpdates();
151 }
152