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