1ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski/* 2ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * Copyright (C) 2010 The Android Open Source Project 3ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * 4ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 5ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * you may not use this file except in compliance with the License. 6ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * You may obtain a copy of the License at 7ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * 8ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 9ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * 10ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * Unless required by applicable law or agreed to in writing, software 11ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 12ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * See the License for the specific language governing permissions and 14ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * limitations under the License. 15ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski */ 16ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski 17ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinskipackage android.graphics; 18ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski 19ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinskiimport com.android.layoutlib.bridge.impl.DelegateManager; 20ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinskiimport com.android.tools.layoutlib.annotations.LayoutlibDelegate; 21ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski 22ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinskiimport java.awt.BasicStroke; 23ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinskiimport java.awt.Stroke; 24ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski 25ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski/** 26ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * Delegate implementing the native methods of android.graphics.DashPathEffect 27ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * 28ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * Through the layoutlib_create tool, the original native methods of DashPathEffect have been 29ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * replaced by calls to methods of the same name in this delegate class. 30ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * 31ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * This class behaves like the original native implementation, but in Java, keeping previously 32ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * native data into its own objects and mapping them to int that are sent back and forth between 33ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * it and the original DashPathEffect class. 34ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * 35ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * Because this extends {@link PathEffect_Delegate}, there's no need to use a 36ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * {@link DelegateManager}, as all the PathEffect classes will be added to the manager owned by 37ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * {@link PathEffect_Delegate}. 38ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * 39ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * @see PathEffect_Delegate 40ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski * 41ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski */ 42ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinskipublic final class DashPathEffect_Delegate extends PathEffect_Delegate { 43ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski 44ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski // ---- delegate data ---- 45ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski 46ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski private final float[] mIntervals; 47ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski private final float mPhase; 48ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski 49ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski // ---- Public Helper methods ---- 50ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski 51ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski @Override 52ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski public Stroke getStroke(Paint_Delegate paint) { 53ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski return new BasicStroke( 54ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski paint.getStrokeWidth(), 55ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski paint.getJavaCap(), 56ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski paint.getJavaJoin(), 57ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski paint.getJavaStrokeMiter(), 58ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski mIntervals, 59ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski mPhase); 60ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski } 61ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski 62ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski @Override 63ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski public boolean isSupported() { 64ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski return true; 65ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski } 66ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski 67ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski @Override 68ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski public String getSupportMessage() { 69ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski // no message since isSupported returns true; 70ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski return null; 71ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski } 72ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski 73ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski // ---- native methods ---- 74ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski 75ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski @LayoutlibDelegate 76ec4118922fa844ef31b73d16adc76f4da4c6c8e6Narayan Kamath /*package*/ static long nativeCreate(float intervals[], float phase) { 77ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski DashPathEffect_Delegate newDelegate = new DashPathEffect_Delegate(intervals, phase); 78ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski return sManager.addNewDelegate(newDelegate); 79ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski } 80ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski 81ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski // ---- Private delegate/helper methods ---- 82ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski 83ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski private DashPathEffect_Delegate(float intervals[], float phase) { 84ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski mIntervals = new float[intervals.length]; 85ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski System.arraycopy(intervals, 0, mIntervals, 0, intervals.length); 86ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski mPhase = phase; 87ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski } 88ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski} 89ab775ecdd189b32e35b0d3f4a821502f88b03a4bAdam Lesinski 90