aboutsummaryrefslogtreecommitdiffstats
path: root/src/graphui/classes/com/jogamp/graph/ui/Scene.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/graphui/classes/com/jogamp/graph/ui/Scene.java')
-rw-r--r--src/graphui/classes/com/jogamp/graph/ui/Scene.java47
1 files changed, 26 insertions, 21 deletions
diff --git a/src/graphui/classes/com/jogamp/graph/ui/Scene.java b/src/graphui/classes/com/jogamp/graph/ui/Scene.java
index e2dc96b8d..15ced642b 100644
--- a/src/graphui/classes/com/jogamp/graph/ui/Scene.java
+++ b/src/graphui/classes/com/jogamp/graph/ui/Scene.java
@@ -133,8 +133,8 @@ public final class Scene implements Container, GLEventListener {
private static final boolean DEBUG = false;
private final List<Shape> shapes = new CopyOnWriteArrayList<Shape>();
- private final AtomicReference<Tooltip> startedToolTip = new AtomicReference<Tooltip>();
- private final AtomicReference<GraphShape> toolTipHUD = new AtomicReference<GraphShape>();
+ private final AtomicReference<Tooltip> toolTipStarted = new AtomicReference<Tooltip>();
+ private final AtomicReference<Shape> toolTipHUD = new AtomicReference<Shape>();
private boolean doFrustumCulling = false;
@@ -503,12 +503,11 @@ public final class Scene implements Container, GLEventListener {
displayedOnce = true;
syncDisplayedOnce.notifyAll();
}
- final Tooltip tt = startedToolTip.get();
+ final Tooltip tt = toolTipStarted.get();
if( null != tt && null == toolTipHUD.get() ) {
- final GraphShape[] t = { null };
- if( tt.tick() && forOne(pmv, tt.tool, () -> { t[0] = tt.createTip(pmv); }) ) {
- toolTipHUD.set( t[0] );
- startedToolTip.set(null);
+ final Shape[] hud = { null };
+ if( tt.tick() && forOne(pmv, tt.getTool(), () -> { hud[0] = tt.createTip(Scene.this, pmv); }) ) {
+ setToolTip( hud[0] );
}
}
}
@@ -1053,7 +1052,7 @@ public final class Scene implements Container, GLEventListener {
private final class SBCGestureListener implements GestureHandler.GestureListener {
@Override
public void gestureDetected(final GestureEvent gh) {
- clearToolTips();
+ clearToolTip();
if( null != activeShape ) {
// gesture .. delegate to active shape!
final InputEvent orig = gh.getTrigger();
@@ -1121,7 +1120,7 @@ public final class Scene implements Container, GLEventListener {
@Override
public void mousePressed(final MouseEvent e) {
- clearToolTips();
+ clearToolTip();
if( -1 == lId || e.getPointerId(0) == lId ) {
lx = e.getX();
ly = e.getY();
@@ -1135,7 +1134,7 @@ public final class Scene implements Container, GLEventListener {
@Override
public void mouseReleased(final MouseEvent e) {
- clearToolTips();
+ clearToolTip();
// flip to GL window coordinates, origin bottom-left
final int glWinX = e.getX();
final int glWinY = getHeight() - e.getY() - 1;
@@ -1151,7 +1150,7 @@ public final class Scene implements Container, GLEventListener {
@Override
public void mouseClicked(final MouseEvent e) {
- clearToolTips();
+ clearToolTip();
// flip to GL window coordinates
final int glWinX = e.getX();
final int glWinY = getHeight() - e.getY() - 1;
@@ -1168,7 +1167,7 @@ public final class Scene implements Container, GLEventListener {
@Override
public void mouseDragged(final MouseEvent e) {
- clearToolTips();
+ clearToolTip();
// drag activeShape, if no gesture-activity, only on 1st pointer
if( null != activeShape && activeShape.isInteractive() && !pinchToZoomGesture.isWithinGesture() && e.getPointerId(0) == lId ) {
lx = e.getX();
@@ -1184,7 +1183,7 @@ public final class Scene implements Container, GLEventListener {
@Override
public void mouseWheelMoved(final MouseEvent e) {
- clearToolTips();
+ clearToolTip();
// flip to GL window coordinates
final int glWinX = lx;
final int glWinY = getHeight() - ly - 1;
@@ -1193,7 +1192,7 @@ public final class Scene implements Container, GLEventListener {
@Override
public void mouseMoved(final MouseEvent e) {
- clearToolTips();
+ clearToolTip();
if( -1 == lId || e.getPointerId(0) == lId ) {
lx = e.getX();
ly = e.getY();
@@ -1204,7 +1203,7 @@ public final class Scene implements Container, GLEventListener {
final Shape s = dispatchMouseEventPickShape(e, glWinX, glWinY);
if( null != s ) {
mouseOver = true;
- startedToolTip.set( s.startToolTip() );
+ toolTipStarted.set( s.startToolTip() );
} else {
mouseOver = false;
}
@@ -1213,7 +1212,7 @@ public final class Scene implements Container, GLEventListener {
public void mouseEntered(final MouseEvent e) { }
@Override
public void mouseExited(final MouseEvent e) {
- clearToolTips();
+ clearToolTip();
releaseActiveShape();
clear();
}
@@ -1234,7 +1233,17 @@ public final class Scene implements Container, GLEventListener {
}
}
- private void clearToolTips() {
+ private void setToolTip(final Shape hud) {
+ toolTipStarted.set( null );
+ addShape( hud );
+ toolTipHUD.set( hud );
+ }
+
+ private void clearToolTip() {
+ final Tooltip tt = toolTipStarted.getAndSet(null);
+ if( null != tt ) {
+ tt.stop();
+ }
final Shape s = toolTipHUD.getAndSet(null);
if( null != s ) {
invoke(false, (final GLAutoDrawable drawable) -> {
@@ -1242,10 +1251,6 @@ public final class Scene implements Container, GLEventListener {
return true;
});
}
- final Tooltip tt = startedToolTip.getAndSet(null);
- if( null != tt ) {
- tt.stop();
- }
}
/**