Files
Terrarum/lib/slick-source/org/newdawn/slick/svg/SimpleDiagramRenderer.java
Song Minjae 059abff814 added sources for Slick
Former-commit-id: 1647fa32ef6894bd7db44f741f07c2f4dcdf9054
Former-commit-id: 0e5810dcfbe1fd59b13e7cabe9f1e93c5542da2d
2016-12-30 23:29:12 +09:00

112 lines
3.2 KiB
Java

package org.newdawn.slick.svg;
import org.newdawn.slick.Color;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.geom.Shape;
import org.newdawn.slick.geom.ShapeRenderer;
import org.newdawn.slick.geom.TexCoordGenerator;
import org.newdawn.slick.opengl.TextureImpl;
import org.newdawn.slick.opengl.renderer.Renderer;
import org.newdawn.slick.opengl.renderer.SGL;
/**
* A very primtive implementation for rendering a diagram. This simply
* sticks the shapes on the screen in the right fill and stroke colours
*
* @author kevin
*/
public class SimpleDiagramRenderer {
/** The renderer to use for all GL operations */
protected static SGL GL = Renderer.get();
/** The diagram to be rendered */
public Diagram diagram;
/** The display list representing the diagram */
public int list = -1;
/**
* Create a new simple renderer
*
* @param diagram The diagram to be rendered
*/
public SimpleDiagramRenderer(Diagram diagram) {
this.diagram = diagram;
}
/**
* Render the diagram to the given graphics context
*
* @param g The graphics context to which we should render the diagram
*/
public void render(Graphics g) {
// last list generation
if (list == -1) {
list = GL.glGenLists(1);
GL.glNewList(list, SGL.GL_COMPILE);
render(g, diagram);
GL.glEndList();
}
GL.glCallList(list);
TextureImpl.bindNone();
}
/**
* Utility method to render a diagram in immediate mode
*
* @param g The graphics context to render to
* @param diagram The diagram to render
*/
public static void render(Graphics g, Diagram diagram) {
for (int i=0;i<diagram.getFigureCount();i++) {
Figure figure = diagram.getFigure(i);
if (figure.getData().isFilled()) {
if (figure.getData().isColor(NonGeometricData.FILL)) {
g.setColor(figure.getData().getAsColor(NonGeometricData.FILL));
g.fill(diagram.getFigure(i).getShape());
g.setAntiAlias(true);
g.draw(diagram.getFigure(i).getShape());
g.setAntiAlias(false);
}
String fill = figure.getData().getAsReference(NonGeometricData.FILL);
if (diagram.getPatternDef(fill) != null){
System.out.println("PATTERN");
}
if (diagram.getGradient(fill) != null) {
Gradient gradient = diagram.getGradient(fill);
Shape shape = diagram.getFigure(i).getShape();
TexCoordGenerator fg = null;
if (gradient.isRadial()) {
fg = new RadialGradientFill(shape, diagram.getFigure(i).getTransform(), gradient);
} else {
fg = new LinearGradientFill(shape, diagram.getFigure(i).getTransform(), gradient);
}
Color.white.bind();
ShapeRenderer.texture(shape, gradient.getImage(), fg);
}
}
if (figure.getData().isStroked()) {
if (figure.getData().isColor(NonGeometricData.STROKE)) {
g.setColor(figure.getData().getAsColor(NonGeometricData.STROKE));
g.setLineWidth(figure.getData().getAsFloat(NonGeometricData.STROKE_WIDTH));
g.setAntiAlias(true);
g.draw(diagram.getFigure(i).getShape());
g.setAntiAlias(false);
g.resetLineWidth();
}
}
// DEBUG VERSION
// g.setColor(Color.black);
// g.draw(diagram.getFigure(i).getShape());
// g.setColor(Color.red);
// g.fill(diagram.getFigure(i).getShape());
}
}
}