shared/java/Shader.java (191 lines of code) (raw):
package org.jetbrains.skija;
import java.lang.ref.*;
import org.jetbrains.annotations.*;
import org.jetbrains.skija.impl.*;
public class Shader extends RefCnt {
static { Library.staticLoad(); }
public Shader makeWithColorFilter(ColorFilter f) {
try {
return new Shader(_nMakeWithColorFilter(_ptr, Native.getPtr(f)));
} finally {
Reference.reachabilityFence(this);
Reference.reachabilityFence(f);
}
}
// Linear
public static Shader makeLinearGradient(Point p0, Point p1, int[] colors) {
return makeLinearGradient(p0._x, p0._y, p1._x, p1._y, colors);
}
public static Shader makeLinearGradient(float x0, float y0, float x1, float y1, int[] colors) {
return makeLinearGradient(x0, y0, x1, y1, colors, null, GradientStyle.DEFAULT);
}
public static Shader makeLinearGradient(Point p0, Point p1, int[] colors, float[] positions) {
return makeLinearGradient(p0._x, p0._y, p1._x, p1._y, colors, positions);
}
public static Shader makeLinearGradient(float x0, float y0, float x1, float y1, int[] colors, float[] positions) {
return makeLinearGradient(x0, y0, x1, y1, colors, positions, GradientStyle.DEFAULT);
}
public static Shader makeLinearGradient(Point p0, Point p1, int[] colors, float[] positions, GradientStyle style) {
return makeLinearGradient(p0._x, p0._y, p1._x, p1._y, colors, positions, style);
}
public static Shader makeLinearGradient(float x0, float y0, float x1, float y1, int[] colors, float[] positions, GradientStyle style) {
assert positions == null || colors.length == positions.length : "colors.length " + colors.length + "!= positions.length " + positions.length;
Stats.onNativeCall();
return new Shader(_nMakeLinearGradient(x0, y0, x1, y1, colors, positions, style.getTileMode().ordinal(), style._getFlags(), style._getMatrixArray()));
}
public static Shader makeLinearGradient(Point p0, Point p1, Color4f[] colors, ColorSpace cs, float[] positions, GradientStyle style) {
return makeLinearGradient(p0._x, p0._y, p1._x, p1._y, colors, cs, positions, style);
}
public static Shader makeLinearGradient(float x0, float y0, float x1, float y1, Color4f[] colors, ColorSpace cs, float[] positions, GradientStyle style) {
try {
assert positions == null || colors.length == positions.length : "colors.length " + colors.length + "!= positions.length " + positions.length;
Stats.onNativeCall();
return new Shader(_nMakeLinearGradientCS(x0, y0, x1, y1, Color4f.flattenArray(colors), Native.getPtr(cs), positions, style.getTileMode().ordinal(), style._getFlags(), style._getMatrixArray()));
} finally {
Reference.reachabilityFence(cs);
}
}
// Radial
public static Shader makeRadialGradient(Point center, float r, int[] colors) {
return makeRadialGradient(center._x, center._y, r, colors);
}
public static Shader makeRadialGradient(float x, float y, float r, int[] colors) {
return makeRadialGradient(x, y, r, colors, null, GradientStyle.DEFAULT);
}
public static Shader makeRadialGradient(Point center, float r, int[] colors, float[] positions) {
return makeRadialGradient(center._x, center._y, r, colors, positions);
}
public static Shader makeRadialGradient(float x, float y, float r, int[] colors, float[] positions) {
return makeRadialGradient(x, y, r, colors, positions, GradientStyle.DEFAULT);
}
public static Shader makeRadialGradient(Point center, float r, int[] colors, float[] positions, GradientStyle style) {
return makeRadialGradient(center._x, center._y, r, colors, positions, style);
}
public static Shader makeRadialGradient(float x, float y, float r, int[] colors, float[] positions, GradientStyle style) {
assert positions == null || colors.length == positions.length : "colors.length " + colors.length + "!= positions.length " + positions.length;
Stats.onNativeCall();
return new Shader(_nMakeRadialGradient(x, y, r, colors, positions, style.getTileMode().ordinal(), style._getFlags(), style._getMatrixArray()));
}
public static Shader makeRadialGradient(Point center, float r, Color4f[] colors, ColorSpace cs, float[] positions, GradientStyle style) {
return makeRadialGradient(center._x, center._y, r, colors, cs, positions, style);
}
public static Shader makeRadialGradient(float x, float y, float r, Color4f[] colors, ColorSpace cs, float[] positions, GradientStyle style) {
try {
assert positions == null || colors.length == positions.length : "colors.length " + colors.length + "!= positions.length " + positions.length;
Stats.onNativeCall();
return new Shader(_nMakeRadialGradientCS(x, y, r, Color4f.flattenArray(colors), Native.getPtr(cs), positions, style.getTileMode().ordinal(), style._getFlags(), style._getMatrixArray()));
} finally {
Reference.reachabilityFence(cs);
}
}
// Two-point Conical
public static Shader makeTwoPointConicalGradient(Point p0, float r0, Point p1, float r1, int[] colors) {
return makeTwoPointConicalGradient(p0._x, p0._y, r0, p1._x, p1._y, r1, colors);
}
public static Shader makeTwoPointConicalGradient(float x0, float y0, float r0, float x1, float y1, float r1, int[] colors) {
return makeTwoPointConicalGradient(x0, y0, r0, x1, y1, r1, colors, null, GradientStyle.DEFAULT);
}
public static Shader makeTwoPointConicalGradient(Point p0, float r0, Point p1, float r1, int[] colors, float[] positions) {
return makeTwoPointConicalGradient(p0._x, p0._y, r0, p1._x, p1._y, r1, colors, positions);
}
public static Shader makeTwoPointConicalGradient(float x0, float y0, float r0, float x1, float y1, float r1, int[] colors, float[] positions) {
return makeTwoPointConicalGradient(x0, y0, r0, x1, y1, r1, colors, positions, GradientStyle.DEFAULT);
}
public static Shader makeTwoPointConicalGradient(Point p0, float r0, Point p1, float r1, int[] colors, float[] positions, GradientStyle style) {
return makeTwoPointConicalGradient(p0._x, p0._y, r0, p1._x, p1._y, r1, colors, positions, style);
}
public static Shader makeTwoPointConicalGradient(float x0, float y0, float r0, float x1, float y1, float r1, int[] colors, float[] positions, GradientStyle style) {
assert positions == null || colors.length == positions.length : "colors.length " + colors.length + "!= positions.length " + positions.length;
Stats.onNativeCall();
return new Shader(_nMakeTwoPointConicalGradient(x0, y0, r0, x1, y1, r1, colors, positions, style.getTileMode().ordinal(), style._getFlags(), style._getMatrixArray()));
}
public static Shader makeTwoPointConicalGradient(Point p0, float r0, Point p1, float r1, Color4f[] colors, ColorSpace cs, float[] positions, GradientStyle style) {
return makeTwoPointConicalGradient(p0._x, p0._y, r0, p1._x, p1._y, r1, colors, cs, positions, style);
}
public static Shader makeTwoPointConicalGradient(float x0, float y0, float r0, float x1, float y1, float r1, Color4f[] colors, ColorSpace cs, float[] positions, GradientStyle style) {
try {
assert positions == null || colors.length == positions.length : "colors.length " + colors.length + "!= positions.length " + positions.length;
Stats.onNativeCall();
return new Shader(_nMakeTwoPointConicalGradientCS(x0, y0, r0, x1, y1, r1, Color4f.flattenArray(colors), Native.getPtr(cs), positions, style.getTileMode().ordinal(), style._getFlags(), style._getMatrixArray()));
} finally {
Reference.reachabilityFence(cs);
}
}
// Sweep
public static Shader makeSweepGradient(Point center, int[] colors) {
return makeSweepGradient(center._x, center._y, colors);
}
public static Shader makeSweepGradient(float x, float y, int[] colors) {
return makeSweepGradient(x, y, 0, 360, colors, null, GradientStyle.DEFAULT);
}
public static Shader makeSweepGradient(Point center, int[] colors, float[] positions) {
return makeSweepGradient(center._x, center._y, colors, positions);
}
public static Shader makeSweepGradient(float x, float y, int[] colors, float[] positions) {
return makeSweepGradient(x, y, 0, 360, colors, positions, GradientStyle.DEFAULT);
}
public static Shader makeSweepGradient(Point center, int[] colors, float[] positions, GradientStyle style) {
return makeSweepGradient(center._x, center._y, colors, positions, style);
}
public static Shader makeSweepGradient(float x, float y, int[] colors, float[] positions, GradientStyle style) {
return makeSweepGradient(x, y, 0, 360, colors, positions, style);
}
public static Shader makeSweepGradient(Point center, float startAngle, float endAngle, int[] colors, float[] positions, GradientStyle style) {
return makeSweepGradient(center._x, center._y, startAngle, endAngle, colors, positions, style);
}
public static Shader makeSweepGradient(float x, float y, float startAngle, float endAngle, int[] colors, float[] positions, GradientStyle style) {
assert positions == null || colors.length == positions.length : "colors.length " + colors.length + "!= positions.length " + positions.length;
Stats.onNativeCall();
return new Shader(_nMakeSweepGradient(x, y, startAngle, endAngle, colors, positions, style.getTileMode().ordinal(), style._getFlags(), style._getMatrixArray()));
}
public static Shader makeSweepGradient(Point center, float startAngle, float endAngle, Color4f[] colors, ColorSpace cs, float[] positions, GradientStyle style) {
return makeSweepGradient(center._x, center._y, startAngle, endAngle, colors, cs, positions, style);
}
public static Shader makeSweepGradient(float x, float y, float startAngle, float endAngle, Color4f[] colors, ColorSpace cs, float[] positions, GradientStyle style) {
try {
assert positions == null || colors.length == positions.length : "colors.length " + colors.length + "!= positions.length " + positions.length;
Stats.onNativeCall();
return new Shader(_nMakeSweepGradientCS(x, y, startAngle, endAngle, Color4f.flattenArray(colors), Native.getPtr(cs), positions, style.getTileMode().ordinal(), style._getFlags(), style._getMatrixArray()));
} finally {
Reference.reachabilityFence(cs);
}
}
//
public static Shader makeEmpty() {
Stats.onNativeCall();
return new Shader(_nMakeEmpty());
}
public static Shader makeColor(int color) {
Stats.onNativeCall();
return new Shader(_nMakeColor(color));
}
public static Shader makeColor(Color4f color, ColorSpace space) {
try {
Stats.onNativeCall();
return new Shader(_nMakeColorCS(color.getR(), color.getG(), color.getB(), color.getA(), Native.getPtr(space)));
} finally {
Reference.reachabilityFence(space);
}
}
public static Shader makeBlend(BlendMode mode, Shader dst, Shader src) {
try {
Stats.onNativeCall();
return new Shader(_nMakeBlend(mode.ordinal(), Native.getPtr(dst), Native.getPtr(src)));
} finally {
Reference.reachabilityFence(dst);
Reference.reachabilityFence(src);
}
}
@ApiStatus.Internal
public Shader(long ptr) {
super(ptr);
}
public static native long _nMakeWithColorFilter(long ptr, long colorFilterPtr);
public static native long _nMakeLinearGradient(float x0, float y0, float x1, float y1, int[] colors, float[] positions, int tileType, int flags, float[] matrix);
public static native long _nMakeLinearGradientCS(float x0, float y0, float x1, float y1, float[] colors, long colorSpacePtr, float[] positions, int tileType, int flags, float[] matrix);
public static native long _nMakeRadialGradient(float x, float y, float r, int[] colors, float[] positions, int tileType, int flags, float[] matrix);
public static native long _nMakeRadialGradientCS(float x, float y, float r, float[] colors, long colorSpacePtr, float[] positions, int tileType, int flags, float[] matrix);
public static native long _nMakeTwoPointConicalGradient(float x0, float y0, float r0, float x1, float y1, float r1, int[] colors, float[] positions, int tileType, int flags, float[] matrix);
public static native long _nMakeTwoPointConicalGradientCS(float x0, float y0, float r0, float x1, float y1, float r1, float[] colors, long colorSpacePtr, float[] positions, int tileType, int flags, float[] matrix);
public static native long _nMakeSweepGradient(float x, float y, float startAngle, float endAngle, int[] colors, float[] positions, int tileType, int flags, float[] matrix);
public static native long _nMakeSweepGradientCS(float x, float y, float startAngle, float endAngle, float[] colors, long colorSpacePtr, float[] positions, int tileType, int flags, float[] matrix);
public static native long _nMakeEmpty();
public static native long _nMakeColor(int color);
public static native long _nMakeColorCS(float r, float g, float b, float a, long colorSpacePtr);
public static native long _nMakeBlend(int blendMode, long dst, long src);
}