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