AvoidXfermode.java revision 36bef0bf30d6bae48cf3837df351075ca4fce654
10825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/*
20825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Copyright (C) 2008 The Android Open Source Project
30825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
40825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Licensed under the Apache License, Version 2.0 (the "License");
50825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * you may not use this file except in compliance with the License.
60825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * You may obtain a copy of the License at
70825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
80825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *      http://www.apache.org/licenses/LICENSE-2.0
90825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Unless required by applicable law or agreed to in writing, software
110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * distributed under the License is distributed on an "AS IS" BASIS,
120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * See the License for the specific language governing permissions and
140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * limitations under the License.
150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
170825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepackage android.graphics;
180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19a63f55cf17629426d976830429a7612387532195Rika Brooks/**
200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * AvoidXfermode xfermode will draw the src everywhere except on top of the
21d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenka * opColor or, depending on the Mode, draw only on top of the opColor.
220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville@Deprecated
240825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic class AvoidXfermode extends Xfermode {
25ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville
260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // these need to match the enum in SkAvoidXfermode.h on the native side
270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public enum Mode {
280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        AVOID   (0),    //!< draw everywhere except on the opColor
290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        TARGET  (1);    //!< draw only on top of the opColor
300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Mode(int nativeInt) {
320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            this.nativeInt = nativeInt;
330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        final int nativeInt;
350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /** This xfermode draws, or doesn't draw, based on the destination's
380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * distance from an op-color.
390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * There are two modes, and each mode interprets a tolerance value.
410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Avoid: In this mode, drawing is allowed only on destination pixels that
430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * are different from the op-color.
440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Tolerance near 0: avoid any colors even remotely similar to the op-color
450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Tolerance near 255: avoid only colors nearly identical to the op-color
460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Target: In this mode, drawing only occurs on destination pixels that
480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * are similar to the op-color
490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Tolerance near 0: draw only on colors that are nearly identical to the op-color
500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Tolerance near 255: draw on any colors even remotely similar to the op-color
510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public AvoidXfermode(int opColor, int tolerance, Mode mode) {
530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (tolerance < 0 || tolerance > 255) {
540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            throw new IllegalArgumentException("tolerance must be 0..255");
550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        native_instance = nativeCreate(opColor, tolerance, mode.nativeInt);
570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static native long nativeCreate(int opColor, int tolerance,
600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                            int nativeMode);
610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville}
620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville