diff options
Diffstat (limited to 'src/jogl/classes/jogamp/graph/curve')
5 files changed, 67 insertions, 32 deletions
diff --git a/src/jogl/classes/jogamp/graph/curve/opengl/RegionRendererImpl01.java b/src/jogl/classes/jogamp/graph/curve/opengl/RegionRendererImpl01.java index 31ad974d0..51198fd75 100644 --- a/src/jogl/classes/jogamp/graph/curve/opengl/RegionRendererImpl01.java +++ b/src/jogl/classes/jogamp/graph/curve/opengl/RegionRendererImpl01.java @@ -94,7 +94,7 @@ public class RegionRendererImpl01 extends RegionRenderer { } @Override - protected void drawImpl(GL2ES2 gl, Region region, float[] position, int[] texSize) { + protected void drawImpl(GL2ES2 gl, Region region, int[] texSize) { ((GLRegion)region).draw(gl, rs, vp_width, vp_height, texSize); } } diff --git a/src/jogl/classes/jogamp/graph/curve/opengl/TextRendererImpl01.java b/src/jogl/classes/jogamp/graph/curve/opengl/TextRendererImpl01.java index 4ec4d1d98..c3c7e0cac 100644 --- a/src/jogl/classes/jogamp/graph/curve/opengl/TextRendererImpl01.java +++ b/src/jogl/classes/jogamp/graph/curve/opengl/TextRendererImpl01.java @@ -93,7 +93,7 @@ public class TextRendererImpl01 extends TextRenderer { } @Override - public void drawString3D(GL2ES2 gl, Font font, String str, float[] position, int fontSize, int[/*1*/] texSize) { + public void drawString3D(GL2ES2 gl, Font font, String str, int fontSize, int[/*1*/] texSize) { if(!isInitialized()){ throw new GLException("TextRendererImpl01: not initialized!"); } diff --git a/src/jogl/classes/jogamp/graph/curve/tess/CDTriangulator2D.java b/src/jogl/classes/jogamp/graph/curve/tess/CDTriangulator2D.java index a60f91b87..f0910c465 100644 --- a/src/jogl/classes/jogamp/graph/curve/tess/CDTriangulator2D.java +++ b/src/jogl/classes/jogamp/graph/curve/tess/CDTriangulator2D.java @@ -128,8 +128,9 @@ public class CDTriangulator2D implements Triangulator{ } } Triangle tri = loop.cut(true); - if(tri != null) + if(tri != null) { triangles.add(tri); + } } return triangles; } diff --git a/src/jogl/classes/jogamp/graph/curve/text/GlyphShape.java b/src/jogl/classes/jogamp/graph/curve/text/GlyphShape.java index ff46c3338..8c214dd0b 100644 --- a/src/jogl/classes/jogamp/graph/curve/text/GlyphShape.java +++ b/src/jogl/classes/jogamp/graph/curve/text/GlyphShape.java @@ -29,71 +29,84 @@ package jogamp.graph.curve.text; import java.util.ArrayList; +import com.jogamp.graph.font.Font.Glyph; import com.jogamp.graph.geom.Vertex; import com.jogamp.graph.geom.Triangle; import com.jogamp.graph.geom.Vertex.Factory; - import com.jogamp.graph.curve.OutlineShape; -import com.jogamp.opengl.math.Quaternion; +// import com.jogamp.opengl.math.Quaternion; public class GlyphShape { - private Quaternion quat= null; - private OutlineShape shape = null; + // private Quaternion quat= null; + private Glyph glyph; + private OutlineShape shape; /** Create a new Glyph shape * based on Parametric curve control polyline */ public GlyphShape(Vertex.Factory<? extends Vertex> factory){ - shape = new OutlineShape(factory); + this.shape = new OutlineShape(factory); + this.glyph = null; } /** Create a new GlyphShape from a {@link OutlineShape} * @param factory vertex impl factory {@link Factory} * @param shape {@link OutlineShape} representation of the Glyph */ - public GlyphShape(Vertex.Factory<? extends Vertex> factory, OutlineShape shape){ + public GlyphShape(Vertex.Factory<? extends Vertex> factory, Glyph glyph, OutlineShape shape){ this(factory); this.shape = shape; this.shape.transformOutlines(OutlineShape.VerticesState.QUADRATIC_NURBS); + this.glyph = glyph; + } + + public final void destroy() { + shape.clear(); + shape = null; + glyph = null; } public final Vertex.Factory<? extends Vertex> vertexFactory() { return shape.vertexFactory(); } - public OutlineShape getShape() { + public final Glyph getGlyph() { + return glyph; + } + + public final OutlineShape getShape() { return shape; } - public int getNumVertices() { + public final int getNumVertices() { return shape.getVertices().size(); } - /** Get the rotational Quaternion attached to this Shape + /** Get the rotational quaternion attached to this Shape. * @return the Quaternion Object - */ - public Quaternion getQuat() { + public final Quaternion getQuat() { return quat; } - /** Set the Quaternion that shall defien the rotation + /** + * Set the Quaternion that shall define the rotation * of this shape. * @param quat - */ - public void setQuat(Quaternion quat) { + public final void setQuat(Quaternion quat) { this.quat = quat; } + */ /** Triangluate the glyph shape * @return ArrayList of triangles which define this shape */ - public ArrayList<Triangle> triangulate(){ + public final ArrayList<Triangle> triangulate(){ return shape.triangulate(); } /** Get the list of Vertices of this Object * @return arrayList of Vertices */ - public ArrayList<Vertex> getVertices(){ + public final ArrayList<Vertex> getVertices(){ return shape.getVertices(); } } diff --git a/src/jogl/classes/jogamp/graph/curve/text/GlyphString.java b/src/jogl/classes/jogamp/graph/curve/text/GlyphString.java index 2284ab669..5fb547e69 100644 --- a/src/jogl/classes/jogamp/graph/curve/text/GlyphString.java +++ b/src/jogl/classes/jogamp/graph/curve/text/GlyphString.java @@ -28,6 +28,7 @@ package jogamp.graph.curve.text; import java.util.ArrayList; +import java.util.List; import com.jogamp.graph.font.Font; import com.jogamp.graph.geom.Vertex; @@ -38,7 +39,7 @@ import com.jogamp.graph.geom.opengl.SVertex; import javax.media.opengl.GL2ES2; import jogamp.graph.curve.opengl.RegionFactory; -import jogamp.graph.font.FontInt; +import jogamp.graph.geom.plane.AffineTransform; import com.jogamp.graph.curve.OutlineShape; import com.jogamp.graph.curve.Region; @@ -47,18 +48,23 @@ import com.jogamp.graph.curve.opengl.RenderState; import com.jogamp.opengl.math.geom.AABBox; import com.jogamp.opengl.util.PMVMatrix; +/** + * @deprecated use {@link com.jogamp.graph.font.Font#getOutlineShapes(java.util.List, CharSequence, float, Factory)}, + * {@link com.jogamp.graph.curve.Region#create(OutlineShape, int)} + * and a {@link com.jogamp.graph.curve.opengl.RegionRenderer}. + */ public class GlyphString { /** Static font size for all default font OutlineShape generations via {@link #createString(OutlineShape, Factory, Font, String)}. * <p>The actual font size shall be accomplished by the GL PMV matrix.</p> */ public static final int STATIC_FONT_SIZE = 10; - private ArrayList<GlyphShape> glyphs = new ArrayList<GlyphShape>(); - private CharSequence str; - private String fontname; + private final ArrayList<GlyphShape> glyphs = new ArrayList<GlyphShape>(); + private final CharSequence str; + private final String fontname; private GLRegion region; - private SVertex origin = new SVertex(); + private final SVertex origin = new SVertex(); /** * <p>Uses {@link #STATIC_FONT_SIZE}.</p> @@ -84,11 +90,11 @@ public class GlyphString { * @param str string text * @return the created {@link GlyphString} instance */ - public static GlyphString createString(OutlineShape shape, Factory<? extends Vertex> vertexFactory, Font font, int fontSize, String str) { - ArrayList<OutlineShape> shapes = ((FontInt)font).getOutlineShapes(str, fontSize, vertexFactory); + public static GlyphString createString(OutlineShape shape, Factory<? extends Vertex> vertexFactory, Font font, int fontSize, CharSequence str) { + List<OutlineShape> shapes = font.getOutlineShapes(null, str, fontSize, vertexFactory); GlyphString glyphString = new GlyphString(font.getName(Font.NAME_UNIQUNAME), str); - glyphString.createfromOutlineShapes(vertexFactory, shapes); + glyphString.createfromOutlineShapes(vertexFactory, font, str, shapes); if(null != shape) { for(int i=0; i<glyphString.glyphs.size(); i++) { shape.addOutlineShape(glyphString.glyphs.get(i).getShape()); @@ -119,13 +125,18 @@ public class GlyphString { * @param vertexFactory vertex impl factory {@link Factory} * @param shapes list of {@link OutlineShape} */ - public void createfromOutlineShapes(Factory<? extends Vertex> vertexFactory, ArrayList<OutlineShape> shapes) { + public void createfromOutlineShapes(Factory<? extends Vertex> vertexFactory, Font font, CharSequence str, List<OutlineShape> shapes) { + if(shapes.size() != str.length()) { + throw new InternalError("XXX"); + } final int numGlyps = shapes.size(); for (int index=0;index<numGlyps;index++){ if(shapes.get(index) == null){ continue; } - GlyphShape glyphShape = new GlyphShape(vertexFactory, shapes.get(index)); + GlyphShape glyphShape = new GlyphShape(vertexFactory, + font.getGlyph(str.charAt(index)), + shapes.get(index)); if(glyphShape.getNumVertices() < 3) { continue; @@ -143,20 +154,30 @@ public class GlyphString { public GLRegion createRegion(GL2ES2 gl, int renderModes){ region = RegionFactory.create(renderModes); // region.setFlipped(true); + float y = 0; + float advanceTotal = 0; + AffineTransform t = new AffineTransform(); int numVertices = region.getNumVertices(); for(int i=0; i< glyphs.size(); i++) { - final GlyphShape glyph = glyphs.get(i); - ArrayList<Triangle> gtris = glyph.triangulate(); + final GlyphShape glyphShape = glyphs.get(i); + Font.Metrics metrics = glyphShape.getGlyph().getFont().getMetrics(); + final float scale = metrics.getScale(STATIC_FONT_SIZE); + t.translate(advanceTotal, y); + t.scale(scale, scale); + + ArrayList<Triangle> gtris = glyphShape.triangulate(); region.addTriangles(gtris); - final ArrayList<Vertex> gVertices = glyph.getVertices(); + final ArrayList<Vertex> gVertices = glyphShape.getVertices(); for(int j=0; j<gVertices.size(); j++) { final Vertex gVert = gVertices.get(j); gVert.setId(numVertices++); region.addVertex(gVert); } + + advanceTotal += glyphShape.getGlyph().getAdvance(STATIC_FONT_SIZE, true); } return region; } |