1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
|
/*
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.view;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
/**
* Hardware accelerated canvas.
*
* @hide
*/
public abstract class HardwareCanvas extends Canvas {
private String mName;
@Override
public boolean isHardwareAccelerated() {
return true;
}
@Override
public void setBitmap(Bitmap bitmap) {
throw new UnsupportedOperationException();
}
/**
* Specifies the name of this canvas. Naming the canvas is entirely
* optional but can be useful for debugging purposes.
*
* @param name The name of the canvas, can be null
*
* @see #getName()
*
* @hide
*/
public void setName(String name) {
mName = name;
}
/**
* Returns the name of this canvas.
*
* @return The name of the canvas or null
*
* @see #setName(String)
*
* @hide
*/
public String getName() {
return mName;
}
/**
* Invoked before any drawing operation is performed in this canvas.
*
* @param dirty The dirty rectangle to update, can be null.
* @return {@link DisplayList#STATUS_DREW} if anything was drawn (such as a call to clear
* the canvas).
*
* @hide
*/
public abstract int onPreDraw(Rect dirty);
/**
* Invoked after all drawing operation have been performed.
*
* @hide
*/
public abstract void onPostDraw();
/**
* Draws the specified display list onto this canvas. The display list can only
* be drawn if {@link android.view.DisplayList#isValid()} returns true.
*
* @param displayList The display list to replay.
*/
public void drawDisplayList(DisplayList displayList) {
drawDisplayList(displayList, null, DisplayList.FLAG_CLIP_CHILDREN);
}
/**
* Draws the specified display list onto this canvas.
*
* @param displayList The display list to replay.
* @param dirty The dirty region to redraw in the next pass, matters only
* if this method returns {@link DisplayList#STATUS_DRAW}, can be null.
* @param flags Optional flags about drawing, see {@link DisplayList} for
* the possible flags.
*
* @return One of {@link DisplayList#STATUS_DONE}, {@link DisplayList#STATUS_DRAW}, or
* {@link DisplayList#STATUS_INVOKE}, or'd with {@link DisplayList#STATUS_DREW}
* if anything was drawn.
*
* @hide
*/
public abstract int drawDisplayList(DisplayList displayList, Rect dirty, int flags);
/**
* Draws the specified layer onto this canvas.
*
* @param layer The layer to composite on this canvas
* @param x The left coordinate of the layer
* @param y The top coordinate of the layer
* @param paint The paint used to draw the layer
*
* @hide
*/
abstract void drawHardwareLayer(HardwareLayer layer, float x, float y, Paint paint);
/**
* Calls the function specified with the drawGLFunction function pointer. This is
* functionality used by webkit for calling into their renderer from our display lists.
* This function may return true if an invalidation is needed after the call.
*
* @param drawGLFunction A native function pointer
*
* @return One of {@link DisplayList#STATUS_DONE}, {@link DisplayList#STATUS_DRAW} or
* {@link DisplayList#STATUS_INVOKE}
*
* @hide
*/
public int callDrawGLFunction(int drawGLFunction) {
// Noop - this is done in the display list recorder subclass
return DisplayList.STATUS_DONE;
}
/**
* Invoke all the functors who requested to be invoked during the previous frame.
*
* @param dirty The region to redraw when the functors return {@link DisplayList#STATUS_DRAW}
*
* @return One of {@link DisplayList#STATUS_DONE}, {@link DisplayList#STATUS_DRAW} or
* {@link DisplayList#STATUS_INVOKE}
*
* @hide
*/
public int invokeFunctors(Rect dirty) {
return DisplayList.STATUS_DONE;
}
/**
* Detaches the specified functor from the current functor execution queue.
*
* @param functor The native functor to remove from the execution queue.
*
* @see #invokeFunctors(android.graphics.Rect)
* @see #callDrawGLFunction(int)
* @see #detachFunctor(int)
*
* @hide
*/
abstract void detachFunctor(int functor);
/**
* Attaches the specified functor to the current functor execution queue.
*
* @param functor The native functor to add to the execution queue.
*
* @see #invokeFunctors(android.graphics.Rect)
* @see #callDrawGLFunction(int)
* @see #detachFunctor(int)
*
* @hide
*/
abstract void attachFunctor(int functor);
/**
* Indicates that the specified layer must be updated as soon as possible.
*
* @param layer The layer to update
*
* @see #clearLayerUpdates()
*
* @hide
*/
abstract void pushLayerUpdate(HardwareLayer layer);
/**
* Cancels a queued layer update. If the specified layer was not
* queued for update, this method has no effect.
*
* @param layer The layer whose update to cancel
*
* @see #pushLayerUpdate(HardwareLayer)
* @see #clearLayerUpdates()
*
* @hide
*/
abstract void cancelLayerUpdate(HardwareLayer layer);
/**
* Immediately executes all enqueued layer updates.
*
* @see #pushLayerUpdate(HardwareLayer)
*
* @hide
*/
abstract void flushLayerUpdates();
/**
* Removes all enqueued layer updates.
*
* @see #pushLayerUpdate(HardwareLayer)
*
* @hide
*/
abstract void clearLayerUpdates();
}
|