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.java56
1 files changed, 35 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 fa11f2675..5c9c6859e 100644
--- a/src/graphui/classes/com/jogamp/graph/ui/Scene.java
+++ b/src/graphui/classes/com/jogamp/graph/ui/Scene.java
@@ -485,15 +485,8 @@ public final class Scene implements Container, GLEventListener {
syncDisplayedOnce.notifyAll();
}
final Tooltip tt = toolTipActive.get();
- if( null != tt && null == toolTipHUD.get() ) {
- final Shape[] hud = { null };
- if( tt.tick() && forOne(pmv, tt.getTool(), () -> {
- final AABBox toolMvBounds = tt.getToolMvBounds(pmv);
- hud[0] = tt.createTip(drawable, Scene.this, pmv, toolMvBounds);
- }) )
- {
- setToolTip( hud[0] );
- }
+ if( null != tt ) {
+ activateTooltipImpl(drawable, pmv, tt);
}
}
@@ -1103,7 +1096,7 @@ public final class Scene implements Container, GLEventListener {
@Override
public void mousePressed(final MouseEvent e) {
- clearToolTip();
+ // clearToolTip();
if( -1 == lId || e.getPointerId(0) == lId ) {
lx = e.getX();
ly = e.getY();
@@ -1117,7 +1110,7 @@ public final class Scene implements Container, GLEventListener {
@Override
public void mouseReleased(final MouseEvent e) {
- clearToolTip();
+ // clearToolTip();
// flip to GL window coordinates, origin bottom-left
final int glWinX = e.getX();
final int glWinY = getHeight() - e.getY() - 1;
@@ -1133,7 +1126,6 @@ public final class Scene implements Container, GLEventListener {
@Override
public void mouseClicked(final MouseEvent e) {
- clearToolTip();
// flip to GL window coordinates
final int glWinX = e.getX();
final int glWinY = getHeight() - e.getY() - 1;
@@ -1146,6 +1138,7 @@ public final class Scene implements Container, GLEventListener {
releaseActiveShape();
clear();
}
+ clearToolTip();
}
@Override
@@ -1158,8 +1151,8 @@ public final class Scene implements Container, GLEventListener {
// dragged .. delegate to active shape!
// flip to GL window coordinates, origin bottom-left
- final int glWinX = lx;
- final int glWinY = getHeight() - ly - 1;
+ final int glWinX = e.getX();
+ final int glWinY = getHeight() - e.getY() - 1;
dispatchMouseEventForShape(activeShape, e, glWinX, glWinY);
}
}
@@ -1175,7 +1168,6 @@ public final class Scene implements Container, GLEventListener {
@Override
public void mouseMoved(final MouseEvent e) {
- clearToolTip();
if( -1 == lId || e.getPointerId(0) == lId ) {
lx = e.getX();
ly = e.getY();
@@ -1184,9 +1176,12 @@ public final class Scene implements Container, GLEventListener {
final int glWinX = lx;
final int glWinY = getHeight() - ly - 1;
final Shape s = dispatchMouseEventPickShape(e, glWinX, glWinY);
+ clearToolTip();
if( null != s ) {
mouseOver = true;
- toolTipActive.set( s.startToolTip() );
+ synchronized( toolTipActive ) {
+ toolTipActive.set( s.startToolTip(true /* lookupParents */) );
+ }
} else {
mouseOver = false;
}
@@ -1222,20 +1217,39 @@ public final class Scene implements Container, GLEventListener {
}
private void clearToolTip() {
- final Tooltip tt = toolTipActive.getAndSet(null);
- if( null != tt ) {
- tt.stop();
+ final Tooltip tt;
+ synchronized( toolTipActive ) {
+ tt = toolTipActive.get();
+ if( null != tt && tt.stop(false) ) {
+ toolTipActive.set(null);
+ }
}
final Shape s = toolTipHUD.getAndSet(null);
if( null != s ) {
invoke(false, (final GLAutoDrawable drawable) -> {
- if( s == removeShape(s) ) {
- tt.destroyTip(drawable.getGL().getGL2ES2(), renderer, s);
+ if( null != tt ) {
+ if( s == removeShape(s) ) {
+ tt.destroyTip(drawable.getGL().getGL2ES2(), renderer, s);
+ }
+ } else {
+ removeShape(drawable.getGL().getGL2ES2(), renderer, s);
}
return true;
});
}
}
+ private void activateTooltipImpl(final GLAutoDrawable drawable, final PMVMatrix4f pmv, final Tooltip tt) {
+ if( null == toolTipHUD.get() ) {
+ final Shape[] hud = { null };
+ if( tt.tick() && forOne(pmv, tt.getTool(), () -> {
+ final AABBox toolMvBounds = tt.getToolMvBounds(pmv);
+ hud[0] = tt.createTip(drawable, Scene.this, pmv, toolMvBounds);
+ }) )
+ {
+ setToolTip( hud[0] );
+ }
+ }
+ }
/**
* Return a formatted status string containing avg fps and avg frame duration.