diff options
Diffstat (limited to 'src/graphui/classes/com/jogamp/graph/ui/Scene.java')
-rw-r--r-- | src/graphui/classes/com/jogamp/graph/ui/Scene.java | 47 |
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(); - } } /** |