From bbdd39ea9354d0a8146b3217de2076ca80264871 Mon Sep 17 00:00:00 2001 From: Kirill Kalishev Date: Fri, 20 May 2011 16:26:31 +0400 Subject: [PATCH] IDEA-69923 unnecessary tooltip animation --- .../intellij/openapi/ui/popup/Balloon.java | 2 ++ .../com/intellij/ide/IdeTooltipManager.java | 23 +++++++++++++------ .../src/com/intellij/ui/BalloonImpl.java | 9 +++++++- .../src/com/intellij/ui/LightweightHint.java | 2 +- 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/platform/platform-api/src/com/intellij/openapi/ui/popup/Balloon.java b/platform/platform-api/src/com/intellij/openapi/ui/popup/Balloon.java index aadb7e8aaca9..f25b6aa0284e 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/popup/Balloon.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/popup/Balloon.java @@ -47,6 +47,8 @@ public interface Balloon extends Disposable { void hide(); + void setAnimationEnabled(boolean enabled); + boolean wasFadedIn(); boolean wasFadedOut(); diff --git a/platform/platform-impl/src/com/intellij/ide/IdeTooltipManager.java b/platform/platform-impl/src/com/intellij/ide/IdeTooltipManager.java index a8502bed767d..b0d2890145ac 100644 --- a/platform/platform-impl/src/com/intellij/ide/IdeTooltipManager.java +++ b/platform/platform-impl/src/com/intellij/ide/IdeTooltipManager.java @@ -201,6 +201,10 @@ public class IdeTooltipManager implements ApplicationComponent, AWTEventListener } public IdeTooltip show(final IdeTooltip tooltip, boolean now) { + return show(tooltip, now, true); + } + + public IdeTooltip show(final IdeTooltip tooltip, boolean now, final boolean animationEnabled) { myAlarm.cancelAllRequests(); hideCurrent(null, null, null); @@ -216,15 +220,15 @@ public class IdeTooltipManager implements ApplicationComponent, AWTEventListener } if (myQueuedComponent != tooltip.getComponent() || !tooltip.getComponent().isShowing()) { - hideCurrent(null, null, null); + hideCurrent(null, null, null, animationEnabled); return; } if (tooltip.beforeShow()) { - show(tooltip, null); + show(tooltip, null, animationEnabled); } else { - hideCurrent(null, null, null); + hideCurrent(null, null, null, animationEnabled); } } }; @@ -238,7 +242,7 @@ public class IdeTooltipManager implements ApplicationComponent, AWTEventListener return tooltip; } - private void show(final IdeTooltip tooltip, Runnable beforeShow) { + private void show(final IdeTooltip tooltip, Runnable beforeShow, boolean animationEnabled) { boolean toCenterX; boolean toCenterY; @@ -275,7 +279,7 @@ public class IdeTooltipManager implements ApplicationComponent, AWTEventListener .setPreferredPosition(tooltip.getPreferredPosition()) .setFillColor(bg) .setBorderColor(border) - .setAnimationCycle(Registry.intValue("ide.tooltip.animationCycle")) + .setAnimationCycle(animationEnabled ? Registry.intValue("ide.tooltip.animationCycle") : 0) .setShowCallout(true) .setCalloutShift((small && tooltip.getCalloutShift() == 0) ? -2 : tooltip.getCalloutShift()) .setPositionChangeXShift(tooltip.getPositionChangeX()) @@ -362,6 +366,10 @@ public class IdeTooltipManager implements ApplicationComponent, AWTEventListener } public boolean hideCurrent(@Nullable MouseEvent me, AnAction action, AnActionEvent event) { + return hideCurrent(me, action, event, true); + } + + public boolean hideCurrent(@Nullable MouseEvent me, AnAction action, AnActionEvent event, final boolean animationEnabled) { myShowRequest = null; myQueuedComponent = null; myQueuedTooltip = null; @@ -385,7 +393,7 @@ public class IdeTooltipManager implements ApplicationComponent, AWTEventListener @Override public void run() { if (myHideRunnable != null) { - hideCurrentNow(); + hideCurrentNow(animationEnabled); myHideRunnable = null; } } @@ -401,8 +409,9 @@ public class IdeTooltipManager implements ApplicationComponent, AWTEventListener return true; } - private void hideCurrentNow() { + private void hideCurrentNow(boolean animationEnabled) { if (myCurrentTipUi != null) { + myCurrentTipUi.setAnimationEnabled(animationEnabled); myCurrentTipUi.hide(); myCurrentTooltip.onHidden(); myShowDelay = false; diff --git a/platform/platform-impl/src/com/intellij/ui/BalloonImpl.java b/platform/platform-impl/src/com/intellij/ui/BalloonImpl.java index 37e8b8f8b16e..3c08f96cbcd6 100644 --- a/platform/platform-impl/src/com/intellij/ui/BalloonImpl.java +++ b/platform/platform-impl/src/com/intellij/ui/BalloonImpl.java @@ -153,6 +153,8 @@ public class BalloonImpl implements Disposable, Balloon, LightweightWindow, Posi private String myTitle; private JLabel myTitleLabel; + private boolean myAnimationEnabled = true; + public boolean isInsideBalloon(MouseEvent me) { return isInside(new RelativePoint(me)); } @@ -532,7 +534,7 @@ public class BalloonImpl implements Disposable, Balloon, LightweightWindow, Posi if (myAnimator != null) { Disposer.dispose(myAnimator); } - myAnimator = new Animator("Balloon", 10, myAnimationCycle, false, 0, 1, forward) { + myAnimator = new Animator("Balloon", 10, myAnimationEnabled ? myAnimationCycle : 0, false, 0, 1, forward) { public void paintNow(final float frame, final float totalFrames, final float cycle) { if (myComp == null || myComp.getParent() == null) return; myComp.setAlpha(frame / totalFrames); @@ -1425,4 +1427,9 @@ public class BalloonImpl implements Disposable, Balloon, LightweightWindow, Posi Point p = myPosition.getShiftedPoint(myTargetPoint, myCalloutshift * -1); return new RelativePoint(myLayeredPane, p); } + + @Override + public void setAnimationEnabled(boolean enabled) { + myAnimationEnabled = enabled; + } } diff --git a/platform/platform-impl/src/com/intellij/ui/LightweightHint.java b/platform/platform-impl/src/com/intellij/ui/LightweightHint.java index 9a0c76fe37d8..8bfdbb8d4379 100644 --- a/platform/platform-impl/src/com/intellij/ui/LightweightHint.java +++ b/platform/platform-impl/src/com/intellij/ui/LightweightHint.java @@ -401,7 +401,7 @@ public class LightweightHint extends UserDataHolderBase implements Hint { if (!screenPoint.equals(new RelativePoint(myCurrentIdeTooltip.getComponent(), myCurrentIdeTooltip.getPoint()).getScreenPoint())) { myCurrentIdeTooltip.setPoint(point.getPoint()); myCurrentIdeTooltip.setComponent(point.getComponent()); - IdeTooltipManager.getInstance().show(myCurrentIdeTooltip, true); + IdeTooltipManager.getInstance().show(myCurrentIdeTooltip, true, false); } } else { Point targetPoint = point.getPoint(myComponent.getParent());