14b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet/* 24b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * Copyright (C) 2010 The Android Open Source Project 34b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * 44b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * Licensed under the Apache License, Version 2.0 (the "License"); 54b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * you may not use this file except in compliance with the License. 64b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * You may obtain a copy of the License at 74b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * 84b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * http://www.apache.org/licenses/LICENSE-2.0 94b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * 104b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * Unless required by applicable law or agreed to in writing, software 114b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * distributed under the License is distributed on an "AS IS" BASIS, 124b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * See the License for the specific language governing permissions and 144b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * limitations under the License. 154b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet */ 164b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet 174b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohetpackage android.graphics; 184b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet 19c2e9651bf386a1f7bf7fc706cf5424950570470cXavier Ducrohetimport com.android.layoutlib.bridge.impl.DelegateManager; 209a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohetimport com.android.tools.layoutlib.annotations.LayoutlibDelegate; 214b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet 22d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohetimport java.awt.Composite; 23d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet 244b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet/** 254b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * Delegate implementing the native methods of android.graphics.Xfermode 264b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * 274b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * Through the layoutlib_create tool, the original native methods of Xfermode have been replaced 284b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * by calls to methods of the same name in this delegate class. 294b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * 304b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * This class behaves like the original native implementation, but in Java, keeping previously 314b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * native data into its own objects and mapping them to int that are sent back and forth between 324b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * it and the original Xfermode class. 334b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * 344b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * This also serve as a base class for all Xfermode delegate classes. 354b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * 364b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * @see DelegateManager 374b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * 384b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet */ 39d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohetpublic abstract class Xfermode_Delegate { 404b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet 414b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet // ---- delegate manager ---- 424b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet protected static final DelegateManager<Xfermode_Delegate> sManager = 43f0a53435f14d23d9555fc46014352ee6a7baa647Xavier Ducrohet new DelegateManager<Xfermode_Delegate>(Xfermode_Delegate.class); 444b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet 454b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet // ---- delegate helper data ---- 464b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet 474b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet // ---- delegate data ---- 484b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet 494b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet // ---- Public Helper methods ---- 504b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet 514b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet public static Xfermode_Delegate getDelegate(int native_instance) { 524b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet return sManager.getDelegate(native_instance); 534b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet } 544b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet 5563fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet public abstract Composite getComposite(int alpha); 56d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet public abstract boolean isSupported(); 57d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet public abstract String getSupportMessage(); 58d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet 59d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet 604b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet // ---- native methods ---- 614b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet 629a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 634b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet /*package*/ static void finalizer(int native_instance) { 64cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet sManager.removeJavaReferenceFor(native_instance); 654b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet } 664b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet 674b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet // ---- Private delegate/helper methods ---- 684b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet 694b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet} 70