Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
epoxy
GitHub Repository: epoxy/proj11
Path: blob/master/SLICK_HOME/src/org/newdawn/slick/svg/SimpleDiagramRenderer.java
1463 views
1
package org.newdawn.slick.svg;
2
3
import org.newdawn.slick.Color;
4
import org.newdawn.slick.Graphics;
5
import org.newdawn.slick.geom.Shape;
6
import org.newdawn.slick.geom.ShapeRenderer;
7
import org.newdawn.slick.geom.TexCoordGenerator;
8
import org.newdawn.slick.opengl.TextureImpl;
9
import org.newdawn.slick.opengl.renderer.Renderer;
10
import org.newdawn.slick.opengl.renderer.SGL;
11
12
/**
13
* A very primtive implementation for rendering a diagram. This simply
14
* sticks the shapes on the screen in the right fill and stroke colours
15
*
16
* @author kevin
17
*/
18
public class SimpleDiagramRenderer {
19
/** The renderer to use for all GL operations */
20
protected static SGL GL = Renderer.get();
21
22
/** The diagram to be rendered */
23
public Diagram diagram;
24
/** The display list representing the diagram */
25
public int list = -1;
26
27
/**
28
* Create a new simple renderer
29
*
30
* @param diagram The diagram to be rendered
31
*/
32
public SimpleDiagramRenderer(Diagram diagram) {
33
this.diagram = diagram;
34
}
35
36
/**
37
* Render the diagram to the given graphics context
38
*
39
* @param g The graphics context to which we should render the diagram
40
*/
41
public void render(Graphics g) {
42
// last list generation
43
if (list == -1) {
44
list = GL.glGenLists(1);
45
GL.glNewList(list, SGL.GL_COMPILE);
46
render(g, diagram);
47
GL.glEndList();
48
}
49
50
GL.glCallList(list);
51
52
TextureImpl.bindNone();
53
}
54
55
/**
56
* Utility method to render a diagram in immediate mode
57
*
58
* @param g The graphics context to render to
59
* @param diagram The diagram to render
60
*/
61
public static void render(Graphics g, Diagram diagram) {
62
for (int i=0;i<diagram.getFigureCount();i++) {
63
Figure figure = diagram.getFigure(i);
64
65
if (figure.getData().isFilled()) {
66
if (figure.getData().isColor(NonGeometricData.FILL)) {
67
g.setColor(figure.getData().getAsColor(NonGeometricData.FILL));
68
g.fill(diagram.getFigure(i).getShape());
69
g.setAntiAlias(true);
70
g.draw(diagram.getFigure(i).getShape());
71
g.setAntiAlias(false);
72
}
73
74
String fill = figure.getData().getAsReference(NonGeometricData.FILL);
75
if (diagram.getPatternDef(fill) != null){
76
System.out.println("PATTERN");
77
}
78
if (diagram.getGradient(fill) != null) {
79
Gradient gradient = diagram.getGradient(fill);
80
Shape shape = diagram.getFigure(i).getShape();
81
TexCoordGenerator fg = null;
82
if (gradient.isRadial()) {
83
fg = new RadialGradientFill(shape, diagram.getFigure(i).getTransform(), gradient);
84
} else {
85
fg = new LinearGradientFill(shape, diagram.getFigure(i).getTransform(), gradient);
86
}
87
88
Color.white.bind();
89
ShapeRenderer.texture(shape, gradient.getImage(), fg);
90
}
91
}
92
93
if (figure.getData().isStroked()) {
94
if (figure.getData().isColor(NonGeometricData.STROKE)) {
95
g.setColor(figure.getData().getAsColor(NonGeometricData.STROKE));
96
g.setLineWidth(figure.getData().getAsFloat(NonGeometricData.STROKE_WIDTH));
97
g.setAntiAlias(true);
98
g.draw(diagram.getFigure(i).getShape());
99
g.setAntiAlias(false);
100
g.resetLineWidth();
101
}
102
}
103
104
// DEBUG VERSION
105
// g.setColor(Color.black);
106
// g.draw(diagram.getFigure(i).getShape());
107
// g.setColor(Color.red);
108
// g.fill(diagram.getFigure(i).getShape());
109
}
110
}
111
}
112
113