summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/demos/com/jogamp/opengl/demos/graph/ui/UISceneDemo12.java10
-rw-r--r--src/demos/com/jogamp/opengl/demos/graph/ui/UISceneDemo20.java14
-rw-r--r--src/graphui/classes/com/jogamp/graph/ui/shapes/BaseButton.java (renamed from src/graphui/classes/com/jogamp/graph/ui/shapes/RoundButton.java)66
-rw-r--r--src/graphui/classes/com/jogamp/graph/ui/shapes/Button.java36
-rw-r--r--src/graphui/classes/com/jogamp/graph/ui/shapes/TexSeqButton.java6
5 files changed, 78 insertions, 54 deletions
diff --git a/src/demos/com/jogamp/opengl/demos/graph/ui/UISceneDemo12.java b/src/demos/com/jogamp/opengl/demos/graph/ui/UISceneDemo12.java
index 5e3f1031f..846f03184 100644
--- a/src/demos/com/jogamp/opengl/demos/graph/ui/UISceneDemo12.java
+++ b/src/demos/com/jogamp/opengl/demos/graph/ui/UISceneDemo12.java
@@ -43,7 +43,7 @@ import com.jogamp.graph.ui.layout.Padding;
import com.jogamp.graph.ui.shapes.Button;
import com.jogamp.graph.ui.shapes.Label;
import com.jogamp.graph.ui.shapes.Rectangle;
-import com.jogamp.graph.ui.shapes.RoundButton;
+import com.jogamp.graph.ui.shapes.BaseButton;
import com.jogamp.newt.event.WindowAdapter;
import com.jogamp.newt.event.WindowEvent;
import com.jogamp.newt.opengl.GLWindow;
@@ -129,7 +129,7 @@ public class UISceneDemo12 {
final Group groupA0 = new Group(new BoxLayout( new Padding(0.15f, 0.15f) ) );
{
- groupA0.addShape( new RoundButton(options.renderModes, 0.70f, 0.70f).setCorner(0f).setInteractive(false).setColor(0, 1, 0, 1) );
+ groupA0.addShape( new BaseButton(options.renderModes, 0.70f, 0.70f).setCorner(0f).setInteractive(false).setColor(0, 1, 0, 1) );
groupA0.addShape( new Button(options.renderModes, font, "stack1", 0.50f, 0.50f/2f).setCorner(0f).setDragAndResizeable(false) );
groupA0.addShape( new Label(options.renderModes, font, 0.70f/4f, "pajq").setDragAndResizeable(false).setColor(0, 0, 1, 1) );
}
@@ -146,7 +146,7 @@ public class UISceneDemo12 {
final Group groupA1 = new Group(new BoxLayout( 1f, 1f, new Margin(0.05f, 0.05f), new Padding(0.10f, 0.10f) ) );
{
- groupA1.addShape( new RoundButton(options.renderModes, 0.70f, 0.70f).setCorner(0f).setInteractive(false).setColor(0, 1, 0, 1) );
+ groupA1.addShape( new BaseButton(options.renderModes, 0.70f, 0.70f).setCorner(0f).setInteractive(false).setColor(0, 1, 0, 1) );
groupA1.addShape( new Button(options.renderModes, font, "stack2", 0.50f, 0.50f/2f).setCorner(0f).setDragAndResizeable(false) );
groupA1.addShape( new Label(options.renderModes, font, 0.70f/4f, "pajq").setDragAndResizeable(false).setColor(0, 0, 1, 1) );
}
@@ -163,7 +163,7 @@ public class UISceneDemo12 {
final Group groupA2 = new Group(new BoxLayout( 1f, 1f, new Margin(0.10f, Margin.CENTER), new Padding(0.05f, 0) ) );
{
- groupA2.addShape( new RoundButton(options.renderModes, 0.70f, 0.70f).setCorner(0f).setInteractive(false).setColor(0, 1, 0, 1) );
+ groupA2.addShape( new BaseButton(options.renderModes, 0.70f, 0.70f).setCorner(0f).setInteractive(false).setColor(0, 1, 0, 1) );
groupA2.addShape( new Button(options.renderModes, font, "stack3", 0.50f, 0.50f/2f).setCorner(0f).setDragAndResizeable(false) );
groupA2.addShape( new Label(options.renderModes, font, 0.70f/4f, "pajq").setDragAndResizeable(false).setColor(0, 0, 1, 1) );
}
@@ -180,7 +180,7 @@ public class UISceneDemo12 {
final Group groupA3 = new Group(new BoxLayout( 1f, 1f, new Margin(Margin.CENTER) ) );
{
- groupA3.addShape( new RoundButton(options.renderModes, 0.70f, 0.70f).setCorner(0f).setInteractive(false).setColor(0, 1, 0, 1) );
+ groupA3.addShape( new BaseButton(options.renderModes, 0.70f, 0.70f).setCorner(0f).setInteractive(false).setColor(0, 1, 0, 1) );
groupA3.addShape( new Button(options.renderModes, font, "stack4", 0.50f, 0.50f/2f).setCorner(0f).setDragAndResizeable(false) );
groupA3.addShape( new Label(options.renderModes, font, 0.70f/4f, "pajq").setDragAndResizeable(false).setColor(0, 0, 1, 1) );
}
diff --git a/src/demos/com/jogamp/opengl/demos/graph/ui/UISceneDemo20.java b/src/demos/com/jogamp/opengl/demos/graph/ui/UISceneDemo20.java
index 735192715..d732795ca 100644
--- a/src/demos/com/jogamp/opengl/demos/graph/ui/UISceneDemo20.java
+++ b/src/demos/com/jogamp/opengl/demos/graph/ui/UISceneDemo20.java
@@ -56,7 +56,7 @@ import com.jogamp.graph.ui.shapes.GLButton;
import com.jogamp.graph.ui.shapes.ImageButton;
import com.jogamp.graph.ui.shapes.Label;
import com.jogamp.graph.ui.shapes.MediaButton;
-import com.jogamp.graph.ui.shapes.RoundButton;
+import com.jogamp.graph.ui.shapes.BaseButton;
import com.jogamp.nativewindow.ScalableSurface;
import com.jogamp.newt.Display;
import com.jogamp.newt.MonitorDevice;
@@ -341,8 +341,8 @@ public class UISceneDemo20 implements GLEventListener {
sl.addAll(buttonsLeft.getShapes());
sl.addAll(buttonsRight.getShapes());
for(final Shape s : sl) {
- if( s instanceof RoundButton ) {
- final RoundButton rb = (RoundButton)s;
+ if( s instanceof BaseButton ) {
+ final BaseButton rb = (BaseButton)s;
final float c = rb.getCorner()+dc;
System.err.println("Corner: "+c);
rb.setCorner(c);
@@ -355,10 +355,10 @@ public class UISceneDemo20 implements GLEventListener {
sl.addAll(buttonsLeft.getShapes());
sl.addAll(buttonsRight.getShapes());
for(final Shape s : sl) {
- if( s instanceof RoundButton ) {
- final RoundButton b = (RoundButton)s;
+ if( s instanceof BaseButton ) {
+ final BaseButton b = (BaseButton)s;
b.getRotation().setIdentity();
- b.setCorner(RoundButton.DEFAULT_CORNER);
+ b.setCorner(BaseButton.ROUND_CORNER);
if( b instanceof Button ) {
((Button)b).setSpacing(Button.DEFAULT_SPACING_X, Button.DEFAULT_SPACING_Y);
}
@@ -393,7 +393,7 @@ public class UISceneDemo20 implements GLEventListener {
System.err.println("Button Size: "+buttonLWidth+" x "+buttonLHeight);
- RoundButton button;
+ BaseButton button;
button = new Button(renderModes, fontButtons, " Next Text ", buttonLWidth, buttonLHeight);
button.setName(BUTTON_NEXTTEXT);
button.addMouseListener(new Shape.MouseGestureAdapter() {
diff --git a/src/graphui/classes/com/jogamp/graph/ui/shapes/RoundButton.java b/src/graphui/classes/com/jogamp/graph/ui/shapes/BaseButton.java
index 672d99c3e..7c1997d2d 100644
--- a/src/graphui/classes/com/jogamp/graph/ui/shapes/RoundButton.java
+++ b/src/graphui/classes/com/jogamp/graph/ui/shapes/BaseButton.java
@@ -31,24 +31,28 @@ import com.jogamp.graph.curve.OutlineShape;
import com.jogamp.graph.ui.GraphShape;
/**
- * An abstract GraphUI round Button {@link GraphShape}
+ * An abstract GraphUI base filled button {@link GraphShape},
+ * usually used as a backdrop or base shape for more informative button types.
* <p>
* GraphUI is GPU based and resolution independent.
* </p>
* <p>
- * This button is rendered with a round oval shape.
- * To render it rectangular, {@link #setCorner(float)} to zero.
+ * This button is rendered with a round oval shape {@link #ROUND_CORNER by default},
+ * but can be set to {@link #PERP_CORNER rectangular shape}.
* </p>
*/
-public class RoundButton extends GraphShape {
+public class BaseButton extends GraphShape {
+
+ /** {@link #setCorner(float) Round corner}, value {@value}. This is the default value. */
+ public static final float ROUND_CORNER = 1f;
+ /** {@link #setCorner(float) Perpendicular corner} for a rectangular shape, value {@value}. */
+ public static final float PERP_CORNER = 0f;
- /** {@value} */
- public static final float DEFAULT_CORNER = 1f;
protected float width;
protected float height;
- protected float corner = DEFAULT_CORNER;
+ protected float corner = ROUND_CORNER;
- public RoundButton(final int renderModes, final float width, final float height) {
+ public BaseButton(final int renderModes, final float width, final float height) {
super(renderModes);
this.width = width;
this.height = height;
@@ -60,7 +64,32 @@ public class RoundButton extends GraphShape {
public final float getCorner() { return corner; }
- public RoundButton setSize(final float width, final float height) {
+ /**
+ * Set corner size with range [0.01 .. 1.00] for round corners
+ * or `zero` for perpendicular corners.
+ * <p>
+ * , default is {@link #ROUND_CORNER round corner},
+ * alternative a {@link #PERP_CORNER perpendicular corner} for a rectangular shape is available.
+ * </p>
+ * @see #ROUND_CORNER
+ * @see #PERP_CORNER
+ */
+ public BaseButton setCorner(final float corner) {
+ if( 0.01f <= corner && corner <= 1.0f ) {
+ this.corner = corner;
+ }
+ if( corner > 1.0f ){
+ this.corner = 1.0f;
+ } else if( corner < 0.01f ){
+ this.corner = 0.0f;
+ } else {
+ this.corner = corner;
+ }
+ markShapeDirty();
+ return this;
+ }
+
+ public BaseButton setSize(final float width, final float height) {
this.width = width;
this.height = height;
markShapeDirty();
@@ -69,9 +98,9 @@ public class RoundButton extends GraphShape {
@Override
protected void addShapeToRegion() {
- addRoundShapeToRegion(0f);
+ addBaseShapeToRegion(0f);
}
- protected OutlineShape addRoundShapeToRegion(final float zOffset) {
+ protected OutlineShape addBaseShapeToRegion(final float zOffset) {
final OutlineShape shape = new OutlineShape();
if(corner == 0.0f) {
createSharpOutline(shape, zOffset);
@@ -131,21 +160,6 @@ public class RoundButton extends GraphShape {
shape.closeLastOutline(true);
}
- /** Set corner size, default is {@link #DEFAULT_CORNER} */
- public RoundButton setCorner(final float corner) {
- if(corner > 1.0f){
- this.corner = 1.0f;
- }
- else if(corner < 0.01f){
- this.corner = 0.0f;
- }
- else{
- this.corner = corner;
- }
- markShapeDirty();
- return this;
- }
-
@Override
public String getSubString() {
return super.getSubString()+", dim "+getWidth() + " x " + getHeight() + ", corner " + corner;
diff --git a/src/graphui/classes/com/jogamp/graph/ui/shapes/Button.java b/src/graphui/classes/com/jogamp/graph/ui/shapes/Button.java
index 0f754d32a..c1be8064d 100644
--- a/src/graphui/classes/com/jogamp/graph/ui/shapes/Button.java
+++ b/src/graphui/classes/com/jogamp/graph/ui/shapes/Button.java
@@ -35,6 +35,7 @@ import com.jogamp.graph.curve.opengl.RegionRenderer;
import com.jogamp.graph.font.Font;
import com.jogamp.graph.geom.plane.AffineTransform;
import com.jogamp.graph.ui.GraphShape;
+import com.jogamp.opengl.math.FloatUtil;
import com.jogamp.opengl.math.Vec2f;
import com.jogamp.opengl.math.Vec3f;
import com.jogamp.opengl.math.Vec4f;
@@ -43,7 +44,7 @@ import com.jogamp.opengl.math.geom.AABBox;
import jogamp.graph.ui.shapes.Label0;
/**
- * A GraphUI text labeled {@link RoundButton} {@link GraphShape}
+ * A GraphUI text labeled {@link BaseButton} {@link GraphShape}
* <p>
* GraphUI is GPU based and resolution independent.
* </p>
@@ -52,14 +53,14 @@ import jogamp.graph.ui.shapes.Label0;
* To render it rectangular, {@link #setCorner(float)} to zero.
* </p>
*/
-public class Button extends RoundButton {
+public class Button extends BaseButton {
/** {@value} */
public static final float DEFAULT_SPACING_X = 0.12f;
/** {@value} */
public static final float DEFAULT_SPACING_Y = 0.42f;
- private static final float DEFAULT_2PASS_LABEL_ZOFFSET = -0.005f; // -0.05f;
- private float twoPassLabelZOffset = DEFAULT_2PASS_LABEL_ZOFFSET;
+ private static final float DEFAULT_LABEL_ZOFFSET = 0.005f; // 0.05f;
+ private float labelZOffset;
private final Label0 label;
private float spacingX = DEFAULT_SPACING_X;
@@ -73,6 +74,7 @@ public class Button extends RoundButton {
final String labelText, final float width,
final float height) {
super(renderModes | Region.COLORCHANNEL_RENDERING_BIT, width, height);
+ this.labelZOffset = DEFAULT_LABEL_ZOFFSET;
this.label = new Label0(labelFont, labelText, new Vec4f( 1.33f, 1.33f, 1.33f, 1.0f )); // 0.75 * 1.33 = 1.0
setColor(0.75f, 0.75f, 0.75f, 1.0f);
setPressedColorMod(0.9f, 0.9f, 0.9f, 0.7f);
@@ -85,6 +87,7 @@ public class Button extends RoundButton {
@Override
public void draw(final GL2ES2 gl, final RegionRenderer renderer, final int[] sampleCount) {
+ // No need to setup an poly offset for z-fighting, using one region now
// Setup poly offset for z-fighting
// gl.glEnable(GL.GL_POLYGON_OFFSET_FILL);
// gl.glPolygonOffset(0f, 1f);
@@ -94,12 +97,13 @@ public class Button extends RoundButton {
@Override
protected void addShapeToRegion() {
- addRoundShapeToRegion( twoPassLabelZOffset );
+ addBaseShapeToRegion( FloatUtil.isZero(labelZOffset) ? 0f : -labelZOffset );
// Precompute text-box size .. guessing pixelSize
final float lw = box.getWidth() * ( 1f - spacingX ) ;
final float lh = box.getHeight() * ( 1f - spacingY ) ;
final AABBox lbox0_em = label.getFont().getGlyphBounds(label.getText(), tempT1, tempT2);
+ // final AABBox lbox0_em = label.getFont().getGlyphShapeBounds(null, label.getText(), tempT1, tempT2);
final float lsx = lw / lbox0_em.getWidth();
final float lsy = lh / lbox0_em.getHeight();
final float lScale = lsx < lsy ? lsx : lsy;
@@ -127,11 +131,12 @@ public class Button extends RoundButton {
}
}
- public float get2PassLabelZOffset() { return twoPassLabelZOffset; }
+ public float getLabelZOffset() { return labelZOffset; }
- public void set2PassLabelZOffset(final float v) {
- twoPassLabelZOffset = v;
+ public Button setLabelZOffset(final float v) {
+ labelZOffset = v;
markShapeDirty();
+ return this;
}
public final float getSpacingX() { return spacingX; }
@@ -142,7 +147,7 @@ public class Button extends RoundButton {
* @param spacingX spacing in percent on X, default is {@link #DEFAULT_SPACING_X}
* @param spacingY spacing in percent on Y, default is {@link #DEFAULT_SPACING_Y}
*/
- public final void setSpacing(final float spacingX, final float spacingY) {
+ public final Button setSpacing(final float spacingX, final float spacingY) {
if ( spacingX < 0.0f ) {
this.spacingX = 0.0f;
} else if ( spacingX > 1.0f ) {
@@ -158,35 +163,40 @@ public class Button extends RoundButton {
this.spacingY = spacingY;
}
markShapeDirty();
+ return this;
}
public final Vec4f getLabelColor() {
return label.getColor();
}
- public final void setLabelColor(final float r, final float g, final float b) {
+ public final Button setLabelColor(final float r, final float g, final float b) {
label.setColor(r, g, b, 1.0f);
markShapeDirty();
+ return this;
}
- public final void setFont(final Font labelFont) {
+ public final Button setFont(final Font labelFont) {
if( !label.getFont().equals(labelFont) ) {
label.setFont(labelFont);
markShapeDirty();
}
+ return this;
}
- public final void setLabel(final String labelText) {
+ public final Button setLabel(final String labelText) {
if( !label.getText().equals(labelText) ) {
label.setText(labelText);
markShapeDirty();
}
+ return this;
}
- public final void setLabel(final Font labelFont, final String labelText) {
+ public final Button setLabel(final Font labelFont, final String labelText) {
if( !label.getText().equals(labelText) || !label.getFont().equals(labelFont) ) {
label.setFont(labelFont);
label.setText(labelText);
markShapeDirty();
}
+ return this;
}
@Override
diff --git a/src/graphui/classes/com/jogamp/graph/ui/shapes/TexSeqButton.java b/src/graphui/classes/com/jogamp/graph/ui/shapes/TexSeqButton.java
index 87a86e706..4768b4974 100644
--- a/src/graphui/classes/com/jogamp/graph/ui/shapes/TexSeqButton.java
+++ b/src/graphui/classes/com/jogamp/graph/ui/shapes/TexSeqButton.java
@@ -35,7 +35,7 @@ import com.jogamp.graph.ui.GraphShape;
import com.jogamp.opengl.util.texture.TextureSequence;
/**
- * An abstract GraphUI {@link TextureSequence} {@link RoundButton} {@link GraphShape}.
+ * An abstract GraphUI {@link TextureSequence} {@link BaseButton} {@link GraphShape}.
* <p>
* GraphUI is GPU based and resolution independent.
* </p>
@@ -44,7 +44,7 @@ import com.jogamp.opengl.util.texture.TextureSequence;
* To render it rectangular, {@link #setCorner(float)} to zero.
* </p>
*/
-public abstract class TexSeqButton extends RoundButton {
+public abstract class TexSeqButton extends BaseButton {
protected final TextureSequence texSeq;
public TexSeqButton(final int renderModes, final float width,
@@ -62,6 +62,6 @@ public abstract class TexSeqButton extends RoundButton {
@Override
protected void addShapeToRegion() {
- addRoundShapeToRegion( 0f );
+ addBaseShapeToRegion( 0f );
}
}