Path: blob/master/SLICK_HOME/src/org/newdawn/slick/svg/LinearGradientFill.java
1463 views
package org.newdawn.slick.svg;12import org.newdawn.slick.geom.Line;3import org.newdawn.slick.geom.Shape;4import org.newdawn.slick.geom.TexCoordGenerator;5import org.newdawn.slick.geom.Transform;6import org.newdawn.slick.geom.Vector2f;78/**9* A filler for shapes that applys SVG linear gradients10*11* @author kevin12*/13public class LinearGradientFill implements TexCoordGenerator {14/** The start position of the gradient line */15private Vector2f start;16/** The ends position of the gradient line */17private Vector2f end;18/** The gradient being applied */19private Gradient gradient;20/** The line of the gradient */21private Line line;22/** The shape being filled with gradient */23private Shape shape;2425/**26* Create a new fill for gradients27*28* @param shape The shape being filled29* @param trans The transform given for the shape30* @param gradient The gradient to apply31*/32public LinearGradientFill(Shape shape, Transform trans, Gradient gradient) {33this.gradient = gradient;3435float x = gradient.getX1();36float y = gradient.getY1();37float mx = gradient.getX2();38float my = gradient.getY2();3940float h = my - y;41float w = mx - x;4243float[] s = new float[] {x,y+(h/2)};44gradient.getTransform().transform(s, 0, s, 0, 1);45trans.transform(s, 0, s, 0, 1);46float[] e = new float[] {x+w,y+(h/2)};47gradient.getTransform().transform(e, 0, e, 0, 1);48trans.transform(e, 0, e, 0, 1);4950start = new Vector2f(s[0],s[1]);51end = new Vector2f(e[0],e[1]);5253line = new Line(start, end);54}5556/**57* @see org.newdawn.slick.geom.TexCoordGenerator#getCoordFor(float, float)58*/59public Vector2f getCoordFor(float x, float y) {60Vector2f result = new Vector2f();61line.getClosestPoint(new Vector2f(x,y), result);62float u = result.distance(start);63u /= line.length();6465return new Vector2f(u,0);66}6768}697071