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