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.BasicStroke; 23d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohetimport java.awt.Stroke; 24d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet 254b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet/** 264b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * Delegate implementing the native methods of android.graphics.DashPathEffect 274b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * 284b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * Through the layoutlib_create tool, the original native methods of DashPathEffect have been 294b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * replaced by calls to methods of the same name in this delegate class. 304b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * 314b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * This class behaves like the original native implementation, but in Java, keeping previously 324b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * native data into its own objects and mapping them to int that are sent back and forth between 334b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * it and the original DashPathEffect class. 344b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * 354b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * Because this extends {@link PathEffect_Delegate}, there's no need to use a 364b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * {@link DelegateManager}, as all the PathEffect classes will be added to the manager owned by 374b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * {@link PathEffect_Delegate}. 384b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet * 39d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet * @see PathEffect_Delegate 40d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet * 414b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet */ 42d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohetpublic final class DashPathEffect_Delegate extends PathEffect_Delegate { 434b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet 444b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet // ---- delegate data ---- 454b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet 464b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet private final float[] mIntervals; 474b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet private final float mPhase; 484b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet 494b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet // ---- Public Helper methods ---- 504b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet 51d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet @Override 52d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet public Stroke getStroke(Paint_Delegate paint) { 53d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet return new BasicStroke( 54d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet paint.getStrokeWidth(), 55d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet paint.getJavaCap(), 56d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet paint.getJavaJoin(), 5763fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet paint.getJavaStrokeMiter(), 58d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet mIntervals, 59d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet mPhase); 60d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet } 61d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet 62d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet @Override 63d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet public boolean isSupported() { 64d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet return true; 654b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet } 664b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet 67d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet @Override 68d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet public String getSupportMessage() { 69d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet // no message since isSupported returns true; 70d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet return null; 714b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet } 724b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet 734b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet // ---- native methods ---- 744b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet 759a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 764b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet /*package*/ static int nativeCreate(float intervals[], float phase) { 774b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet DashPathEffect_Delegate newDelegate = new DashPathEffect_Delegate(intervals, phase); 78cc4977d0fdaf657907912fd6cc2f9426dc8d2e36Xavier Ducrohet return sManager.addNewDelegate(newDelegate); 794b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet } 804b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet 814b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet // ---- Private delegate/helper methods ---- 824b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet 834b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet private DashPathEffect_Delegate(float intervals[], float phase) { 844b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet mIntervals = new float[intervals.length]; 854b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet System.arraycopy(intervals, 0, mIntervals, 0, intervals.length); 864b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet mPhase = phase; 874b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet } 884b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet} 894b606da91d2d76dd90a427cb3e37ea7df655e8e0Xavier Ducrohet 90