aboutsummaryrefslogtreecommitdiffstats
path: root/src/graphui
diff options
context:
space:
mode:
authorSven Göthel <[email protected]>2024-02-03 01:14:10 +0100
committerSven Göthel <[email protected]>2024-02-03 01:14:10 +0100
commit4ba099b97df41be220c4b2816c728e6b8cc1b037 (patch)
tree7c20f28515ed9d5dba71b0721c24b29c8d3d12eb /src/graphui
parent7928ed90104f71fb53ae8201b3140b8e347b83ee (diff)
Graph/GraphUI: Move getDefault*() to FontFactory and add {get,set}FallbackFont() + Font.getBestCoverage(..); Use fallback-font in MediaButton in case chosen font doesn't match (foreign languages, e.g. 'zho' Chinese .. )
Diffstat (limited to 'src/graphui')
-rw-r--r--src/graphui/classes/com/jogamp/graph/ui/Scene.java22
-rw-r--r--src/graphui/classes/com/jogamp/graph/ui/shapes/MediaButton.java48
-rw-r--r--src/graphui/classes/com/jogamp/graph/ui/widgets/MediaPlayer.java19
3 files changed, 40 insertions, 49 deletions
diff --git a/src/graphui/classes/com/jogamp/graph/ui/Scene.java b/src/graphui/classes/com/jogamp/graph/ui/Scene.java
index 9ebacf2ec..7f47b2d98 100644
--- a/src/graphui/classes/com/jogamp/graph/ui/Scene.java
+++ b/src/graphui/classes/com/jogamp/graph/ui/Scene.java
@@ -28,7 +28,6 @@
package com.jogamp.graph.ui;
import java.io.File;
-import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
@@ -54,8 +53,6 @@ import com.jogamp.graph.curve.Region;
import com.jogamp.graph.curve.opengl.GLRegion;
import com.jogamp.graph.curve.opengl.RegionRenderer;
import com.jogamp.graph.curve.opengl.RenderState;
-import com.jogamp.graph.font.Font;
-import com.jogamp.graph.font.FontFactory;
import com.jogamp.graph.ui.Shape.Visitor2;
import com.jogamp.math.FloatUtil;
import com.jogamp.math.Matrix4f;
@@ -130,25 +127,6 @@ public final class Scene implements Container, GLEventListener {
return FloatUtil.getZBufferEpsilon(zBits, setup.getSceneDist(), setup.getZNear());
}
- /** Returns {@link FontFactory#getDefault()} font or null if n/a */
- public static Font getDefaultFont() {
- try {
- return FontFactory.getDefault().getDefault();
- } catch(final IOException ioe) {
- ioe.printStackTrace();
- return null;
- }
- }
- /** Returns the default symbols font or null if n/a */
- public static Font getSymbolsFont() {
- try {
- return FontFactory.get(FontFactory.SYMBOLS).getDefault();
- } catch(final IOException ioe) {
- ioe.printStackTrace();
- return null;
- }
- }
-
private static final boolean DEBUG = false;
private final List<Shape> shapes = new CopyOnWriteArrayList<Shape>();
diff --git a/src/graphui/classes/com/jogamp/graph/ui/shapes/MediaButton.java b/src/graphui/classes/com/jogamp/graph/ui/shapes/MediaButton.java
index bbf1d7b66..54b23ba6a 100644
--- a/src/graphui/classes/com/jogamp/graph/ui/shapes/MediaButton.java
+++ b/src/graphui/classes/com/jogamp/graph/ui/shapes/MediaButton.java
@@ -39,8 +39,8 @@ import com.jogamp.common.util.InterruptSource;
import com.jogamp.graph.curve.Region;
import com.jogamp.graph.curve.opengl.RegionRenderer;
import com.jogamp.graph.font.Font;
+import com.jogamp.graph.font.FontFactory;
import com.jogamp.graph.ui.GraphShape;
-import com.jogamp.graph.ui.Scene;
import com.jogamp.graph.ui.layout.Alignment;
import com.jogamp.math.Vec2f;
import com.jogamp.math.Vec4f;
@@ -78,6 +78,8 @@ public class MediaButton extends TexSeqButton {
private static final boolean DEBUG_PGS_POSSZ = false;
private boolean verbose = false;
+ private Font subFont;
+ private Font subFallbackFont;
private final Label subLabel;
private final float subZOffset;
private boolean subEnabled;
@@ -106,18 +108,19 @@ public class MediaButton extends TexSeqButton {
private final List<SubtitleEvent> subEventQueue = new ArrayList<SubtitleEvent>();
private final Object subEventLock = new Object();
- /** Constructs a {@link MediaButton} with subtitles disabled. */
+ /** Constructs a {@link MediaButton} with {@link FontFactory#getDefaultFont()} for subtitles. */
public MediaButton(final int renderModes, final float width, final float height, final GLMediaPlayer mPlayer) {
this(renderModes, width, height, mPlayer, null);
}
/**
- * Constructs a {@link MediaButton} prepared for using subtitles.
+ * Constructs a {@link MediaButton} prepared for using subtitles
* @param renderModes
* @param width
* @param height
* @param mPlayer
- * @param subFont text/ASS subtitle font
+ * @param subFont text/ASS subtitle font, pass {@code null} for {@link FontFactory#getDefaultFont()}.
+ * {@link FontFactory#getFallbackFont()} is used {@link Font#getBestCoverage(Font, Font, CharSequence) if providing a better coverage} of a Text/ASS subtitle line.
* @see #setSubtitleParams(Font, float, float, Alignment)
* @see #setSubtitleColor(Vec4f, float)
*/
@@ -132,23 +135,13 @@ public class MediaButton extends TexSeqButton {
mPlayer.setSubtitleEventListener(subEventListener);
- final Font f;
- if( null != subFont ) {
- f = subFont;
- subEnabled = true;
- } else {
- f = Scene.getDefaultFont();
- subEnabled = false;
- }
+ setSubtitleParams(subFont, DEFAULT_ASS_SUB_HEIGHT, DEFAULT_ASS_SUB_POS, DEFAULT_ASS_SUB_ALIGNMENT);
+ this.subLabel = new Label(renderModes, this.subFont, "");
this.subZOffset = Button.DEFAULT_LABEL_ZOFFSET;
- this.subLineHeightPct = DEFAULT_ASS_SUB_HEIGHT;
- this.subLineDY = DEFAULT_ASS_SUB_POS;
- this.subAlignment = DEFAULT_ASS_SUB_ALIGNMENT;
- this.subLabel = new Label(renderModes, f, "");
- this.subLabel.setColor( DEFAULT_ASS_SUB_COLOR );
this.subLabel.moveTo(0, 0, subZOffset);
this.subBlend = new Rectangle(renderModes, 1f, 1f, 0f);
- this.subBlend.setColor( new Vec4f( 0, 0, 0, DEFAULT_ASS_SUB_BLEND ) );
+ setSubtitleColor(DEFAULT_ASS_SUB_COLOR, DEFAULT_ASS_SUB_BLEND);
+
this.subTexImg = new ImageButton(renderModes, width, height, new ImageSequence(mPlayer.getTextureUnit(), true /* useBuildInTexLookup */));
this.subTexImg.setPerp().setToggleable(false).setDragAndResizeable(false).setInteractive(false);
// this.subTexImg.setBorder(0.001f).setBorderColor(1, 1, 0, 1);
@@ -157,15 +150,26 @@ public class MediaButton extends TexSeqButton {
this.drawLastSub = null;
}
+ /** Toggle enabling subtitle rendering */
+ public void setSubtitlesEnabled(final boolean v) {
+ subEnabled = v;
+ }
+
/**
- * Sets text/ASS subtitle parameter
- * @param subFont text/ASS subtitle font
+ * Sets text/ASS subtitle parameter, enabling subtitle rendering
+ * @param subFont text/ASS subtitle font, pass {@code null} for {@link FontFactory#getDefaultFont()}
+ * {@link FontFactory#getFallbackFont()} is used {@link Font#getBestCoverage(Font, Font, CharSequence) if providing a better coverage} of a Text/ASS subtitle line.
* @param subLineHeightPct text/ASS subtitle line height percentage, defaults to {@link #DEFAULT_ASS_SUB_HEIGHT}
* @param subLineDY text/ASS y-axis offset to bottom in line-height, defaults to {@link #DEFAULT_ASS_SUB_POS}
* @param subAlignment text/ASS subtitle alignment, defaults to {@link #DEFAULT_ASS_SUB_ALIGNMENT}
*/
public void setSubtitleParams(final Font subFont, final float subLineHeightPct, final float subLineDY, final Alignment subAlignment) {
- this.subLabel.setFont(subFont);
+ if( null != subFont ) {
+ this.subFont = subFont;
+ } else {
+ this.subFont = FontFactory.getDefaultFont();
+ }
+ this.subFallbackFont = FontFactory.getFallbackFont();
this.subLineHeightPct = subLineHeightPct;
this.subLineDY = subLineDY;
this.subAlignment = subAlignment;
@@ -398,6 +402,7 @@ public class MediaButton extends TexSeqButton {
} else if( SubtitleEvent.Type.Text == sub.type ) {
final SubTextEvent assSub = (SubTextEvent)sub;
if( newSub ) {
+ subLabel.setFont( Font.getBestCoverage(subFont, subFallbackFont, assSub.text) );
subLabel.setText(assSub.text);
final AABBox subBox = subLabel.getBounds(gl.getGLProfile());
final float subLineHeight = subBox.getHeight() / assSub.lines;
@@ -503,5 +508,4 @@ public class MediaButton extends TexSeqButton {
pmv.popMv();
}
}
-
}
diff --git a/src/graphui/classes/com/jogamp/graph/ui/widgets/MediaPlayer.java b/src/graphui/classes/com/jogamp/graph/ui/widgets/MediaPlayer.java
index d93078288..f434bd0ad 100644
--- a/src/graphui/classes/com/jogamp/graph/ui/widgets/MediaPlayer.java
+++ b/src/graphui/classes/com/jogamp/graph/ui/widgets/MediaPlayer.java
@@ -38,6 +38,7 @@ import com.jogamp.common.util.InterruptSource;
import com.jogamp.graph.curve.Region;
import com.jogamp.graph.curve.opengl.GLRegion;
import com.jogamp.graph.font.Font;
+import com.jogamp.graph.font.FontFactory;
import com.jogamp.graph.ui.Group;
import com.jogamp.graph.ui.Scene;
import com.jogamp.graph.ui.Shape;
@@ -106,7 +107,7 @@ public class MediaPlayer extends Widget {
{
super( new BoxLayout(aratio, 1, Alignment.None) );
- final Font fontInfo = Scene.getDefaultFont(), fontSymbols = Scene.getSymbolsFont();
+ final Font fontInfo = FontFactory.getDefaultFont(), fontSymbols = FontFactory.getSymbolsFont();
if( null == fontInfo || null == fontSymbols ) {
mButton = null;
return;
@@ -130,7 +131,7 @@ public class MediaPlayer extends Widget {
this.setBorderColor(BorderColor).setBorder(BorderSz);
this.setInteractive(true).setFixedARatioResize(true);
- mButton = new MediaButton(renderModes, aratio, 1, mPlayer, fontInfo);
+ mButton = new MediaButton(renderModes, aratio, 1, mPlayer);
mButton.setName("mp.mButton").setInteractive(false);
mButton.setPerp().setPressedColorMod(1f, 1f, 1f, 0.85f);
@@ -170,7 +171,7 @@ public class MediaPlayer extends Widget {
audioLabel.setText("audio\n"+mp.getLang(mp.getAID()));
subLabel.setText("sub\n"+mp.getLang(mp.getSID()));
ctrlSlider.setMinMax(new Vec2f(0, mp.getDuration()), 0);
- System.err.println("Init +"+mp.toString());
+ System.err.println("Init "+mp.toString());
for(final GLMediaPlayer.Chapter c : mp.getChapters()) {
if( DEBUG ) {
@@ -623,9 +624,17 @@ public class MediaPlayer extends Widget {
ctrlSlider.getKnob().setDraggable(true);
}
+ /** Toggle enabling subtitle rendering */
+ public void setSubtitlesEnabled(final boolean v) {
+ if( null != mButton ) {
+ mButton.setSubtitlesEnabled(v);
+ }
+ }
+
/**
- * Sets text/ASS subtitle parameter
- * @param subFont text/ASS subtitle font
+ * Sets text/ASS subtitle parameter, enabling subtitle rendering
+ * @param subFont text/ASS subtitle font, pass {@code null} for {@link FontFactory#getDefaultFont()}
+ * {@link FontFactory#getFallbackFont()} is used {@link Font#getBestCoverage(Font, Font, CharSequence) if providing a better coverage} of a Text/ASS subtitle line.
* @param subLineHeightPct text/ASS subtitle line height percentage, defaults to {@link MediaButton#DEFAULT_ASS_SUB_HEIGHT}
* @param subLineDY text/ASS y-axis offset to bottom in line-height, defaults to {@link MediaButton#DEFAULT_ASS_SUB_POS}
* @param subAlignment text/ASS subtitle alignment, defaults to {@link #DEFAULT_ASS_SUB_ALIGNMENT}