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