19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.graphics;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy/**
20c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy * <p>This class contains the list of alpha compositing and blending modes
21c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy * that can be passed to {@link PorterDuffXfermode}, a specialized implementation
22c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy * of {@link Paint}'s {@link Paint#setXfermode(Xfermode) transfer mode}.
23c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy * All the available modes can be found in the {@link Mode} enum.</p>
24c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy */
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class PorterDuff {
26c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy    /**
27c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * {@usesMathJax}
28c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *
29c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * <h3>Porter-Duff</h3>
30c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *
31c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * <p>The name of the parent class is an homage to the work of Thomas Porter and
32c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * Tom Duff, presented in their seminal 1984 paper titled "Compositing Digital Images".
33c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * In this paper, the authors describe 12 compositing operators that govern how to
34c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * compute the color resulting of the composition of a source (the graphics object
35c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * to render) with a destination (the content of the render target).</p>
36c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *
37c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * <p>"Compositing Digital Images" was published in <em>Computer Graphics</em>
38c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * Volume 18, Number 3 dated July 1984.</p>
39c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *
40c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * <p>Because the work of Porter and Duff focuses solely on the effects of the alpha
41c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * channel of the source and destination, the 12 operators described in the original
42c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * paper are called alpha compositing modes here.</p>
43c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *
44c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * <p>For convenience, this class also provides several blending modes, which similarly
45c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * define the result of compositing a source and a destination but without being
46c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * constrained to the alpha channel. These blending modes are not defined by Porter
47c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * and Duff but have been included in this class for convenience purposes.</p>
48c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *
49c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * <h3>Diagrams</h3>
50c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *
51c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * <p>All the example diagrams presented below use the same source and destination
52c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * images:</p>
53c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *
54c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * <table summary="Source and Destination" style="background-color: transparent;">
55c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *     <tr>
56c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         <td style="border: none; text-align: center;">
57c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <img src="{@docRoot}reference/android/images/graphics/composite_SRC.png" />
58c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <figcaption>Source image</figcaption>
59c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         </td>
60c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         <td style="border: none; text-align: center;">
61c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <img src="{@docRoot}reference/android/images/graphics/composite_DST.png" />
62c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <figcaption>Destination image</figcaption>
63c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         </td>
64c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *     </tr>
65c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * </table>
66c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *
67c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * <p>The order of drawing operations used to generate each diagram is shown in the
68c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * following code snippet:</p>
69c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *
70c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * <pre class="prettyprint">
71c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * Paint paint = new Paint();
72c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * canvas.drawBitmap(destinationImage, 0, 0, paint);
73c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *
74c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * PorterDuff.Mode mode = // choose a mode
75c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * paint.setXfermode(new PorterDuffXfermode(mode));
76c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *
77c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * canvas.drawBitmap(sourceImage, 0, 0, paint);
78c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * </pre>
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
80c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *
81c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * <h3>Alpha compositing modes</h3>
82c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *
83c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * <table summary="Alpha compositing modes" style="background-color: transparent;">
84c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *     <tr>
85c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         <td style="border: none; text-align: center;">
86c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <img src="{@docRoot}reference/android/images/graphics/composite_SRC.png" />
87c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <figcaption>{@link #SRC Source}</figcaption>
88c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         </td>
89c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         <td style="border: none; text-align: center;">
90c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <img src="{@docRoot}reference/android/images/graphics/composite_SRC_OVER.png" />
91c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <figcaption>{@link #SRC_OVER Source Over}</figcaption>
92c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         </td>
93c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         <td style="border: none; text-align: center;">
94c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <img src="{@docRoot}reference/android/images/graphics/composite_SRC_IN.png" />
95c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <figcaption>{@link #SRC_IN Source In}</figcaption>
96c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         </td>
97c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         <td style="border: none; text-align: center;">
98c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <img src="{@docRoot}reference/android/images/graphics/composite_SRC_ATOP.png" />
99c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <figcaption>{@link #SRC_ATOP Source Atop}</figcaption>
100c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         </td>
101c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *     </tr>
102c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *     <tr>
103c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         <td style="border: none; text-align: center;">
104c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <img src="{@docRoot}reference/android/images/graphics/composite_DST.png" />
105c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <figcaption>{@link #DST Destination}</figcaption>
106c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         </td>
107c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         <td style="border: none; text-align: center;">
108c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <img src="{@docRoot}reference/android/images/graphics/composite_DST_OVER.png" />
109c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <figcaption>{@link #DST_OVER Destination Over}</figcaption>
110c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         </td>
111c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         <td style="border: none; text-align: center;">
112c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <img src="{@docRoot}reference/android/images/graphics/composite_DST_IN.png" />
113c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <figcaption>{@link #DST_IN Destination In}</figcaption>
114c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         </td>
115c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         <td style="border: none; text-align: center;">
116c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <img src="{@docRoot}reference/android/images/graphics/composite_DST_ATOP.png" />
117c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <figcaption>{@link #DST_ATOP Destination Atop}</figcaption>
118c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         </td>
119c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *     </tr>
120c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *     <tr>
121c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         <td style="border: none; text-align: center;">
122c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <img src="{@docRoot}reference/android/images/graphics/composite_CLEAR.png" />
123c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <figcaption>{@link #CLEAR Clear}</figcaption>
124c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         </td>
125c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         <td style="border: none; text-align: center;">
126c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <img src="{@docRoot}reference/android/images/graphics/composite_SRC_OUT.png" />
127c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <figcaption>{@link #SRC_OUT Source Out}</figcaption>
128c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         </td>
129c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         <td style="border: none; text-align: center;">
130c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <img src="{@docRoot}reference/android/images/graphics/composite_DST_OUT.png" />
131c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <figcaption>{@link #DST_OUT Destination Out}</figcaption>
132c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         </td>
133c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         <td style="border: none; text-align: center;">
134c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <img src="{@docRoot}reference/android/images/graphics/composite_XOR.png" />
135c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <figcaption>{@link #XOR Exclusive Or}</figcaption>
136c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         </td>
137c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *     </tr>
138c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * </table>
139c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *
140c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * <h3>Blending modes</h3>
141c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *
142c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * <table summary="Blending modes" style="background-color: transparent;">
143c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *     <tr>
144c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         <td style="border: none; text-align: center;">
145c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <img src="{@docRoot}reference/android/images/graphics/composite_DARKEN.png" />
146c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <figcaption>{@link #DARKEN Darken}</figcaption>
147c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         </td>
148c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         <td style="border: none; text-align: center;">
149c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <img src="{@docRoot}reference/android/images/graphics/composite_LIGHTEN.png" />
150c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <figcaption>{@link #LIGHTEN Lighten}</figcaption>
151c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         </td>
152c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         <td style="border: none; text-align: center;">
153c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <img src="{@docRoot}reference/android/images/graphics/composite_MULTIPLY.png" />
154c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <figcaption>{@link #MULTIPLY Multiply}</figcaption>
155c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         </td>
156c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *     </tr>
157c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *     <tr>
158c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         <td style="border: none; text-align: center;">
159c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <img src="{@docRoot}reference/android/images/graphics/composite_SCREEN.png" />
160c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <figcaption>{@link #SCREEN Screen}</figcaption>
161c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         </td>
162c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         <td style="border: none; text-align: center;">
163c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <img src="{@docRoot}reference/android/images/graphics/composite_OVERLAY.png" />
164c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *             <figcaption>{@link #OVERLAY Overlay}</figcaption>
165c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *         </td>
166c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *     </tr>
167c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * </table>
168c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *
169c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * <h3>Compositing equations</h3>
170c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *
171c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * <p>The documentation of each individual alpha compositing or blending mode below
172c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * provides the exact equation used to compute alpha and color value of the result
173c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * of the composition of a source and destination.</p>
174c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     *
175c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * <p>The result (or output) alpha value is noted \(\alpha_{out}\). The result (or output)
176c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     * color value is noted \(C_{out}\).</p>
177c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy     */
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public enum Mode {
179c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy        // these value must match their native equivalents. See SkXfermode.h
180c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy        /**
181c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>
182c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <img src="{@docRoot}reference/android/images/graphics/composite_CLEAR.png" />
183c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <figcaption>Destination pixels covered by the source are cleared to 0.</figcaption>
184c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * </p>
185c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(\alpha_{out} = 0\)</p>
186c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(C_{out} = 0\)</p>
187c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         */
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        CLEAR       (0),
189c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy        /**
190c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>
191c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <img src="{@docRoot}reference/android/images/graphics/composite_SRC.png" />
192c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <figcaption>The source pixels replace the destination pixels.</figcaption>
193c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * </p>
194c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(\alpha_{out} = \alpha_{src}\)</p>
195c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(C_{out} = C_{src}\)</p>
196c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         */
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        SRC         (1),
198c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy        /**
199c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>
200c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <img src="{@docRoot}reference/android/images/graphics/composite_DST.png" />
201c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <figcaption>The source pixels are discarded, leaving the destination intact.</figcaption>
202c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * </p>
203c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(\alpha_{out} = \alpha_{dst}\)</p>
204c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(C_{out} = C_{dst}\)</p>
205c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         */
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        DST         (2),
207c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy        /**
208c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>
209c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <img src="{@docRoot}reference/android/images/graphics/composite_SRC_OVER.png" />
210c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <figcaption>The source pixels are drawn over the destination pixels.</figcaption>
211c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * </p>
212c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(\alpha_{out} = \alpha_{src} + (1 - \alpha_{src}) * \alpha_{dst}\)</p>
213c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(C_{out} = C_{src} + (1 - \alpha_{src}) * C_{dst}\)</p>
214c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         */
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        SRC_OVER    (3),
216c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy        /**
217c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>
218c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <img src="{@docRoot}reference/android/images/graphics/composite_DST_OVER.png" />
219c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <figcaption>The source pixels are drawn behind the destination pixels.</figcaption>
220c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * </p>
221c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(\alpha_{out} = \alpha_{dst} + (1 - \alpha_{dst}) * \alpha_{src}\)</p>
222c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(C_{out} = C_{dst} + (1 - \alpha_{dst}) * C_{src}\)</p>
223c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         */
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        DST_OVER    (4),
225c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy        /**
226c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>
227c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <img src="{@docRoot}reference/android/images/graphics/composite_SRC_IN.png" />
228c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <figcaption>Keeps the source pixels that cover the destination pixels,
229c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     discards the remaining source and destination pixels.</figcaption>
230c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * </p>
231c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(\alpha_{out} = \alpha_{src} * \alpha_{dst}\)</p>
232c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(C_{out} = C_{src} * \alpha_{dst}\)</p>
233c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         */
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        SRC_IN      (5),
235c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy        /**
236c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>
237c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <img src="{@docRoot}reference/android/images/graphics/composite_DST_IN.png" />
238c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <figcaption>Keeps the destination pixels that cover source pixels,
239c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     discards the remaining source and destination pixels.</figcaption>
240c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * </p>
241c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(\alpha_{out} = \alpha_{src} * \alpha_{dst}\)</p>
242c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(C_{out} = C_{dst} * \alpha_{src}\)</p>
243c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         */
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        DST_IN      (6),
245c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy        /**
246c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>
247c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <img src="{@docRoot}reference/android/images/graphics/composite_SRC_OUT.png" />
248c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <figcaption>Keeps the source pixels that do not cover destination pixels.
249c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     Discards source pixels that cover destination pixels. Discards all
250c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     destination pixels.</figcaption>
251c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * </p>
252c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(\alpha_{out} = (1 - \alpha_{dst}) * \alpha_{src}\)</p>
253c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(C_{out} = (1 - \alpha_{dst}) * C_{src}\)</p>
254c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         */
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        SRC_OUT     (7),
256c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy        /**
257c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>
258c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <img src="{@docRoot}reference/android/images/graphics/composite_DST_OUT.png" />
259c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <figcaption>Keeps the destination pixels that are not covered by source pixels.
260c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     Discards destination pixels that are covered by source pixels. Discards all
261c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     source pixels.</figcaption>
262c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * </p>
263c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(\alpha_{out} = (1 - \alpha_{src}) * \alpha_{dst}\)</p>
264c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(C_{out} = (1 - \alpha_{src}) * C_{dst}\)</p>
265c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         */
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        DST_OUT     (8),
267c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy        /**
268c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>
269c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <img src="{@docRoot}reference/android/images/graphics/composite_SRC_ATOP.png" />
270c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <figcaption>Discards the source pixels that do not cover destination pixels.
271c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     Draws remaining source pixels over destination pixels.</figcaption>
272c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * </p>
273c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(\alpha_{out} = \alpha_{dst}\)</p>
274c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(C_{out} = \alpha_{dst} * C_{src} + (1 - \alpha_{src}) * C_{dst}\)</p>
275c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         */
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        SRC_ATOP    (9),
277c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy        /**
278c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>
279c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <img src="{@docRoot}reference/android/images/graphics/composite_DST_ATOP.png" />
280c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <figcaption>Discards the destination pixels that are not covered by source pixels.
281c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     Draws remaining destination pixels over source pixels.</figcaption>
282c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * </p>
283c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(\alpha_{out} = \alpha_{src}\)</p>
284c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(C_{out} = \alpha_{src} * C_{dst} + (1 - \alpha_{dst}) * C_{src}\)</p>
285c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         */
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        DST_ATOP    (10),
287c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy        /**
288c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>
289c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <img src="{@docRoot}reference/android/images/graphics/composite_XOR.png" />
290c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <figcaption>Discards the source and destination pixels where source pixels
291c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     cover destination pixels. Draws remaining source pixels.</figcaption>
292c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * </p>
293c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(\alpha_{out} = (1 - \alpha_{dst}) * \alpha_{src} + (1 - \alpha_{src}) * \alpha_{dst}\)</p>
294c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(C_{out} = (1 - \alpha_{dst}) * C_{src} + (1 - \alpha_{src}) * C_{dst}\)</p>
295c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         */
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        XOR         (11),
297c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy        /**
298c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>
299c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <img src="{@docRoot}reference/android/images/graphics/composite_DARKEN.png" />
300c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <figcaption>Retains the smallest component of the source and
301c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     destination pixels.</figcaption>
302c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * </p>
303c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(\alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst}\)</p>
304c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(C_{out} = (1 - \alpha_{dst}) * C_{src} + (1 - \alpha_{src}) * C_{dst} + min(C_{src}, C_{dst})\)</p>
305c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         */
3061526a458a30184609f19b05e7334da3cbde81dd1Chris Craik        DARKEN      (16),
307c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy        /**
308c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>
309c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <img src="{@docRoot}reference/android/images/graphics/composite_LIGHTEN.png" />
310c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <figcaption>Retains the largest component of the source and
311c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     destination pixel.</figcaption>
312c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * </p>
313c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(\alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst}\)</p>
314c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(C_{out} = (1 - \alpha_{dst}) * C_{src} + (1 - \alpha_{src}) * C_{dst} + max(C_{src}, C_{dst})\)</p>
315c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         */
3161526a458a30184609f19b05e7334da3cbde81dd1Chris Craik        LIGHTEN     (17),
317c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy        /**
318c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>
319c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <img src="{@docRoot}reference/android/images/graphics/composite_MULTIPLY.png" />
320c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <figcaption>Multiplies the source and destination pixels.</figcaption>
321c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * </p>
322c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(\alpha_{out} = \alpha_{src} * \alpha_{dst}\)</p>
323c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(C_{out} = C_{src} * C_{dst}\)</p>
324c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         */
325c0bf700441e1b53f1693d7445dc6f9876f5c9b4fDerek Sollenberger        MULTIPLY    (13),
326c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy        /**
327c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>
328c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <img src="{@docRoot}reference/android/images/graphics/composite_SCREEN.png" />
329c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <figcaption>Adds the source and destination pixels, then subtracts the
330c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     source pixels multiplied by the destination.</figcaption>
331c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * </p>
332c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(\alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst}\)</p>
333c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(C_{out} = C_{src} + C_{dst} - C_{src} * C_{dst}\)</p>
334c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         */
3351526a458a30184609f19b05e7334da3cbde81dd1Chris Craik        SCREEN      (14),
336c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy        /**
337c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>
338c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <img src="{@docRoot}reference/android/images/graphics/composite_ADD.png" />
339c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <figcaption>Adds the source pixels to the destination pixels and saturates
340c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     the result.</figcaption>
341c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * </p>
342c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(\alpha_{out} = max(0, min(\alpha_{src} + \alpha_{dst}, 1))\)</p>
343c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(C_{out} = max(0, min(C_{src} + C_{dst}, 1))\)</p>
344c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         */
3451526a458a30184609f19b05e7334da3cbde81dd1Chris Craik        ADD         (12),
346c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy        /**
347c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>
348c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <img src="{@docRoot}reference/android/images/graphics/composite_OVERLAY.png" />
349c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     <figcaption>Multiplies or screens the source and destination depending on the
350c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         *     destination color.</figcaption>
351c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * </p>
352c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(\alpha_{out} = \alpha_{src} + \alpha_{dst} - \alpha_{src} * \alpha_{dst}\)</p>
353c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * <p>\(\begin{equation}
354c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * C_{out} = \begin{cases} 2 * C_{src} * C_{dst} & 2 * C_{dst} \lt \alpha_{dst} \\
355c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * \alpha_{src} * \alpha_{dst} - 2 (\alpha_{dst} - C_{src}) (\alpha_{src} - C_{dst}) & otherwise \end{cases}
356c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         * \end{equation}\)</p>
357c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy         */
3581526a458a30184609f19b05e7334da3cbde81dd1Chris Craik        OVERLAY     (15);
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Mode(int nativeInt) {
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            this.nativeInt = nativeInt;
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
36385bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy
36485bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy        /**
36585bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy         * @hide
36685bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy         */
36785bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy        public final int nativeInt;
3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
36924f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler
37024f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler    /**
37124f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler     * @hide
37224f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler     */
373c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy    public static int modeToInt(Mode mode) {
37424f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler        return mode.nativeInt;
37524f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler    }
37624f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler
37724f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler    /**
37824f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler     * @hide
37924f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler     */
380c7dacca00828e586ce4496d83a25a4d60a6fb60fRomain Guy    public static Mode intToMode(int val) {
38124f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler        switch (val) {
38224f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler            default:
38324f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler            case  0: return Mode.CLEAR;
38424f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler            case  1: return Mode.SRC;
38524f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler            case  2: return Mode.DST;
38624f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler            case  3: return Mode.SRC_OVER;
38724f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler            case  4: return Mode.DST_OVER;
38824f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler            case  5: return Mode.SRC_IN;
38924f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler            case  6: return Mode.DST_IN;
39024f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler            case  7: return Mode.SRC_OUT;
39124f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler            case  8: return Mode.DST_OUT;
39224f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler            case  9: return Mode.SRC_ATOP;
39324f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler            case 10: return Mode.DST_ATOP;
39424f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler            case 11: return Mode.XOR;
39524f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler            case 16: return Mode.DARKEN;
39624f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler            case 17: return Mode.LIGHTEN;
39724f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler            case 13: return Mode.MULTIPLY;
39824f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler            case 14: return Mode.SCREEN;
39924f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler            case 12: return Mode.ADD;
40024f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler            case 15: return Mode.OVERLAY;
40124f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler        }
40224f11b1871f9def5d802d107897658c4b2b66ab5Dan Sandler    }
4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
404