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 RadialGradient extends Shader {
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project	/**	Create a shader that draws a radial gradient given the center and radius.
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        @param x        The x-coordinate of the center of the radius
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        @param y        The y-coordinate of the center of the radius
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project		@param radius   Must be positive. The radius of the circle for this gradient
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        @param colors   The colors to be distributed between the center and edge of the circle
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        @param positions May be NULL. The relative position of
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        each corresponding color in the colors array. If this is NULL,
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        the the colors are distributed evenly between the center and edge of the circle.
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        @param  tile    The Shader tiling mode
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project	*/
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project	public RadialGradient(float x, float y, float radius,
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                          int colors[], float positions[], TileMode tile) {
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (radius <= 0) {
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throw new IllegalArgumentException("radius must be > 0");
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (colors.length < 2) {
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throw new IllegalArgumentException("needs >= 2 number of colors");
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (positions != null && colors.length != positions.length) {
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throw new IllegalArgumentException("color and position arrays must be of equal length");
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        native_instance = nativeCreate1(x, y, radius, colors, positions, tile.nativeInt);
43ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy        native_shader = nativePostCreate1(native_instance, x, y, radius, colors, positions,
44ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy                tile.nativeInt);
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project	/**	Create a shader that draws a radial gradient given the center and radius.
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        @param x        The x-coordinate of the center of the radius
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        @param y        The y-coordinate of the center of the radius
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project		@param radius   Must be positive. The radius of the circle for this gradient
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        @param color0   The color at the center of the circle.
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        @param color1   The color at the edge of the circle.
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        @param tile     The Shader tiling mode
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project	*/
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project	public RadialGradient(float x, float y, float radius,
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                          int color0, int color1, TileMode tile) {
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (radius <= 0) {
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throw new IllegalArgumentException("radius must be > 0");
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        native_instance = nativeCreate2(x, y, radius, color0, color1, tile.nativeInt);
61ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy        native_shader = nativePostCreate2(native_instance, x, y, radius, color0, color1,
62ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy                tile.nativeInt);
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project	private static native int nativeCreate1(float x, float y, float radius,
66ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy            int colors[], float positions[], int tileMode);
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project	private static native int nativeCreate2(float x, float y, float radius,
68ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy            int color0, int color1, int tileMode);
69ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy
70ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy    private static native int nativePostCreate1(int native_shader, float x, float y, float radius,
71ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy            int colors[], float positions[], int tileMode);
72ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy    private static native int nativePostCreate2(int native_shader, float x, float y, float radius,
73ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy            int color0, int color1, int tileMode);
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
76