LinearGradient.java revision 7fac2e18339f765320d759e8d4c090f92431959e
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.graphics; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class LinearGradient extends Shader { 207fac2e18339f765320d759e8d4c090f92431959eRomain Guy /** 217fac2e18339f765320d759e8d4c090f92431959eRomain Guy * These fields are manipulated by the JNI layer, don't touch! 227fac2e18339f765320d759e8d4c090f92431959eRomain Guy * @hide 237fac2e18339f765320d759e8d4c090f92431959eRomain Guy */ 247fac2e18339f765320d759e8d4c090f92431959eRomain Guy public int bounds; 257fac2e18339f765320d759e8d4c090f92431959eRomain Guy /** 267fac2e18339f765320d759e8d4c090f92431959eRomain Guy * @hide 277fac2e18339f765320d759e8d4c090f92431959eRomain Guy */ 287fac2e18339f765320d759e8d4c090f92431959eRomain Guy public int colors; 297fac2e18339f765320d759e8d4c090f92431959eRomain Guy /** 307fac2e18339f765320d759e8d4c090f92431959eRomain Guy * @hide 317fac2e18339f765320d759e8d4c090f92431959eRomain Guy */ 327fac2e18339f765320d759e8d4c090f92431959eRomain Guy public int positions; 337fac2e18339f765320d759e8d4c090f92431959eRomain Guy /** 347fac2e18339f765320d759e8d4c090f92431959eRomain Guy * @hide 357fac2e18339f765320d759e8d4c090f92431959eRomain Guy */ 367fac2e18339f765320d759e8d4c090f92431959eRomain Guy public int count; 377fac2e18339f765320d759e8d4c090f92431959eRomain Guy /** 387fac2e18339f765320d759e8d4c090f92431959eRomain Guy * @hide 397fac2e18339f765320d759e8d4c090f92431959eRomain Guy */ 407fac2e18339f765320d759e8d4c090f92431959eRomain Guy public int tileMode; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Create a shader that draws a linear gradient along a line. 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @param x0 The x-coordinate for the start of the gradient line 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @param y0 The y-coordinate for the start of the gradient line 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @param x1 The x-coordinate for the end of the gradient line 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @param y1 The y-coordinate for the end of the gradient line 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @param colors The colors to be distributed along the gradient line 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @param positions May be null. The relative positions [0..1] of 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project each corresponding color in the colors array. If this is null, 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project the the colors are distributed evenly along the gradient line. 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @param tile The Shader tiling mode 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public LinearGradient(float x0, float y0, float x1, float y1, 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int colors[], float positions[], TileMode tile) { 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (colors.length < 2) { 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException("needs >= 2 number of colors"); 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (positions != null && colors.length != positions.length) { 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException("color and position arrays must be of equal length"); 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_instance = nativeCreate1(x0, y0, x1, y1, colors, positions, tile.nativeInt); 627fac2e18339f765320d759e8d4c090f92431959eRomain Guy count = colors.length; 637fac2e18339f765320d759e8d4c090f92431959eRomain Guy tileMode = tile.nativeInt; 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Create a shader that draws a linear gradient along a line. 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @param x0 The x-coordinate for the start of the gradient line 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @param y0 The y-coordinate for the start of the gradient line 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @param x1 The x-coordinate for the end of the gradient line 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @param y1 The y-coordinate for the end of the gradient line 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @param color0 The color at the start of the gradient line. 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @param color1 The color at the end of the gradient line. 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @param tile The Shader tiling mode 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public LinearGradient(float x0, float y0, float x1, float y1, 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int color0, int color1, TileMode tile) { 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_instance = nativeCreate2(x0, y0, x1, y1, color0, color1, tile.nativeInt); 787fac2e18339f765320d759e8d4c090f92431959eRomain Guy count = 2; 797fac2e18339f765320d759e8d4c090f92431959eRomain Guy tileMode = tile.nativeInt; 807fac2e18339f765320d759e8d4c090f92431959eRomain Guy } 817fac2e18339f765320d759e8d4c090f92431959eRomain Guy 827fac2e18339f765320d759e8d4c090f92431959eRomain Guy protected void finalize() throws Throwable { 837fac2e18339f765320d759e8d4c090f92431959eRomain Guy super.finalize(); 847fac2e18339f765320d759e8d4c090f92431959eRomain Guy nativeDestructor(native_instance); 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 877fac2e18339f765320d759e8d4c090f92431959eRomain Guy private native void nativeDestructor(int native_shader); 887fac2e18339f765320d759e8d4c090f92431959eRomain Guy private native int nativeCreate1(float x0, float y0, float x1, float y1, 897fac2e18339f765320d759e8d4c090f92431959eRomain Guy int colors[], float positions[], int tileMode); 907fac2e18339f765320d759e8d4c090f92431959eRomain Guy private native int nativeCreate2(float x0, float y0, float x1, float y1, 917fac2e18339f765320d759e8d4c090f92431959eRomain Guy int color0, int color1, int tileMode); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 93