Reuse utility method to convert mouse events

This commit is contained in:
Sergey Malenkov
2015-07-16 18:07:43 +03:00
parent 3ac6a4b17b
commit 28e53a00af
8 changed files with 65 additions and 77 deletions
@@ -36,6 +36,7 @@ import com.intellij.ui.JBColor;
import com.intellij.ui.UserActivityProviderComponent;
import com.intellij.util.ui.JBSwingUtilities;
import com.intellij.util.ui.JBUI;
import com.intellij.util.ui.MouseEventAdapter;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -194,15 +195,12 @@ public abstract class ComboBoxAction extends AnAction implements CustomComponent
addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseDragged(MouseEvent e) {
mouseMoved(new MouseEvent(e.getComponent(),
MouseEvent.MOUSE_MOVED,
e.getWhen(),
e.getModifiers(),
e.getX(),
e.getY(),
e.getClickCount(),
e.isPopupTrigger(),
e.getButton()));
mouseMoved(MouseEventAdapter.convert(e, e.getComponent(),
MouseEvent.MOUSE_MOVED,
e.getWhen(),
e.getModifiers(),
e.getX(),
e.getY()));
}
@Override
@@ -412,8 +412,7 @@ public class Tree extends JTree implements ComponentWithEmptyText, ComponentWith
(e.getX() >= bounds.x + bounds.width ||
e.getX() < bounds.x && !isLocationInExpandControl(path, e.getX(), e.getY()))) {
int newX = bounds.x + bounds.width - 2;
e2 = new MouseEvent(e.getComponent(), e.getID(), e.getWhen(), e.getModifiers(), newX, e.getY(), e.getClickCount(),
e.isPopupTrigger(), e.getButton());
e2 = MouseEventAdapter.convert(e, e.getComponent(), newX, e.getY());
}
}
}
@@ -47,6 +47,7 @@ import com.intellij.util.Alarm;
import com.intellij.util.ReflectionUtil;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.HashMap;
import com.intellij.util.ui.MouseEventAdapter;
import com.intellij.util.ui.UIUtil;
import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;
import org.jetbrains.annotations.NotNull;
@@ -350,9 +351,8 @@ public class IdeEventQueue extends EventQueue {
}
lastMouseWheel = System.currentTimeMillis();
MouseWheelEvent newMouseWheelEvent = new MouseWheelEvent(
wheelDestinationComponent, mwe.getID(), lastMouseWheel, mwe.getModifiers(), mwe.getX(), mwe.getY(),
mwe.getClickCount(), mwe.isPopupTrigger(), mwe.getScrollType(), mwe.getScrollAmount(), mwe.getWheelRotation()
MouseWheelEvent newMouseWheelEvent = MouseEventAdapter.convert(mwe,
wheelDestinationComponent, mwe.getID(), lastMouseWheel, mwe.getModifiers(), mwe.getX(), mwe.getY()
);
return newMouseWheelEvent;
}
@@ -30,6 +30,7 @@ import com.intellij.openapi.wm.IdeGlassPane;
import com.intellij.openapi.wm.IdeGlassPaneUtil;
import com.intellij.util.containers.FactoryMap;
import com.intellij.util.ui.JBUI;
import com.intellij.util.ui.MouseEventAdapter;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -405,20 +406,7 @@ public class IdeGlassPaneImpl extends JPanel implements IdeGlassPaneEx, IdeEvent
private static MouseEvent convertEvent(final MouseEvent e, final Component target) {
final Point point = SwingUtilities.convertPoint(e.getComponent(), e.getPoint(), target);
if (e instanceof MouseWheelEvent) {
final MouseWheelEvent mwe = (MouseWheelEvent)e;
return new MouseWheelEvent(target, mwe.getID(), mwe.getWhen(), mwe.getModifiersEx(), point.x, point.y, mwe.getClickCount(),
mwe.isPopupTrigger(), mwe.getScrollType(), mwe.getScrollAmount(), mwe.getWheelRotation());
}
else if (e instanceof MenuDragMouseEvent) {
final MenuDragMouseEvent de = (MenuDragMouseEvent)e;
return new MenuDragMouseEvent(target, de.getID(), de.getWhen(), de.getModifiersEx(), point.x, point.y, e.getClickCount(),
e.isPopupTrigger(), de.getPath(), de.getMenuSelectionManager());
}
else {
return new MouseEvent(target, e.getID(), e.getWhen(), e.getModifiersEx(), point.x, point.y, e.getClickCount(), e.isPopupTrigger(),
e.getButton());
}
return MouseEventAdapter.convert(e, target, e.getID(), e.getWhen(), e.getModifiersEx(), point.x, point.y);
}
private static void fireMouseEvent(final MouseListener listener, final MouseEvent event) {
@@ -39,6 +39,7 @@ import com.intellij.ui.Gray;
import com.intellij.ui.ScreenUtil;
import com.intellij.ui.border.CustomLineBorder;
import com.intellij.util.ui.Animator;
import com.intellij.util.ui.MouseEventAdapter;
import com.intellij.util.ui.UIUtil;
import org.java.ayatana.ApplicationMenu;
import org.jetbrains.annotations.NotNull;
@@ -553,8 +554,7 @@ public class IdeMenuBar extends JMenuBar implements IdeEventQueue.EventDispatche
Component item = ((IdeMenuBar)c).findComponentAt(p.x, size.height / 2);
if (item instanceof JMenuItem) {
// re-target border clicks as a menu item ones
item.dispatchEvent(
new MouseEvent(item, e.getID(), e.getWhen(), e.getModifiers(), 1, 1, e.getClickCount(), e.isPopupTrigger(), e.getButton()));
item.dispatchEvent(MouseEventAdapter.convert(e, item, 1, 1));
e.consume();
return;
}
@@ -52,6 +52,7 @@ import com.intellij.util.IconUtil;
import com.intellij.util.NotNullFunction;
import com.intellij.util.ui.JBInsets;
import com.intellij.util.ui.JBUI;
import com.intellij.util.ui.MouseEventAdapter;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -625,8 +626,7 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame {
new ClickListener() {
@Override
public boolean onClick(@NotNull MouseEvent e, int clickCount) {
final MouseEvent newEvent = new MouseEvent(link, e.getID(), e.getWhen(), e.getModifiers(), e.getX(), e.getY(), e.getClickCount(),
e.isPopupTrigger(), e.getButton());
final MouseEvent newEvent = MouseEventAdapter.convert(e, link, e.getX(), e.getY());
link.doClick(newEvent);
return true;
}
@@ -26,6 +26,7 @@ import com.intellij.ui.popup.AbstractPopup;
import com.intellij.ui.popup.MovablePopup;
import com.intellij.util.Alarm;
import com.intellij.util.ObjectUtils;
import com.intellij.util.ui.MouseEventAdapter;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -73,68 +74,53 @@ public abstract class AbstractExpandableItemsHandler<KeyType, ComponentType exte
myComponent.validate();
myPopup = new MovablePopup(myComponent, myTipComponent);
MouseAdapter tipMouseAdapter = new MouseAdapter() {
@Override
public void mouseExited(MouseEvent e) {
// don't hide the hint if mouse exited to myComponent
if (myComponent.getMousePosition() == null) {
hideHint();
}
}
myTipComponent.addMouseWheelListener(new MouseWheelListener() {
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
Point p = e.getLocationOnScreen();
SwingUtilities.convertPointFromScreen(p, myComponent);
myComponent.dispatchEvent(new MouseWheelEvent(myComponent,
e.getID(),
e.getWhen(),
e.getModifiers(),
p.x, p.y,
e.getClickCount(),
e.isPopupTrigger(),
e.getScrollType(),
e.getScrollAmount(),
e.getWheelRotation()));
dispatchEvent(myComponent, e);
}
});
myTipComponent.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
Point p = e.getLocationOnScreen();
SwingUtilities.convertPointFromScreen(p, myComponent);
myComponent.dispatchEvent(new MouseEvent(myComponent,
e.getID(),
e.getWhen(),
e.getModifiers(),
p.x, p.y,
e.getClickCount(),
e.isPopupTrigger(),
e.getButton()));
dispatchEvent(myComponent, e);
}
@Override
public void mousePressed(MouseEvent e) {
mouseClicked(e);
dispatchEvent(myComponent, e);
}
@Override
public void mouseReleased(MouseEvent e) {
mouseClicked(e);
dispatchEvent(myComponent, e);
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
// don't hide the hint if mouse exited to owner component
if (myComponent.getMousePosition() == null) {
hideHint();
}
}
});
myTipComponent.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseMoved(MouseEvent e) {
mouseClicked(e);
dispatchEvent(myComponent, e);
}
@Override
public void mouseDragged(MouseEvent e) {
mouseClicked(e);
dispatchEvent(myComponent, e);
}
};
myTipComponent.addMouseListener(tipMouseAdapter);
myTipComponent.addMouseWheelListener(tipMouseAdapter);
myTipComponent.addMouseMotionListener(tipMouseAdapter);
});
myComponent.addMouseListener(
new MouseListener() {
@@ -480,4 +466,12 @@ public abstract class AbstractExpandableItemsHandler<KeyType, ComponentType exte
protected abstract Pair<Component, Rectangle> getCellRendererAndBounds(KeyType key);
protected abstract KeyType getCellKeyForPoint(Point point);
private static void dispatchEvent(JComponent component, MouseEvent event) {
if (component != null && event != null) {
Point point = event.getLocationOnScreen();
SwingUtilities.convertPointFromScreen(point, component);
component.dispatchEvent(MouseEventAdapter.convert(event, component, point.x, point.y));
}
}
}
@@ -15,6 +15,7 @@
*/
package com.intellij.util.ui;
import javax.swing.event.MenuDragMouseEvent;
import java.awt.*;
import java.awt.event.*;
@@ -101,12 +102,12 @@ public class MouseEventAdapter<T> implements MouseListener, MouseMotionListener,
}
public static MouseEvent convert(MouseEvent event, Component source, int id, long when, int modifiers, int x, int y) {
return event instanceof MouseWheelEvent
? convert((MouseWheelEvent)event, source, id, when, modifiers, x, y)
: new MouseEvent(source, id, when, modifiers, x, y,
event.getClickCount(),
event.isPopupTrigger(),
event.getButton());
if (event instanceof MouseWheelEvent) return convert((MouseWheelEvent)event, source, id, when, modifiers, x, y);
if (event instanceof MenuDragMouseEvent) return convert((MenuDragMouseEvent)event, source, id, when, modifiers, x, y);
return new MouseEvent(source, id, when, modifiers, x, y,
event.getClickCount(),
event.isPopupTrigger(),
event.getButton());
}
public static MouseWheelEvent convert(MouseWheelEvent event, Component source, int id, long when, int modifiers, int x, int y) {
@@ -117,4 +118,12 @@ public class MouseEventAdapter<T> implements MouseListener, MouseMotionListener,
event.getScrollAmount(),
event.getWheelRotation());
}
public static MenuDragMouseEvent convert(MenuDragMouseEvent event, Component source, int id, long when, int modifiers, int x, int y) {
return new MenuDragMouseEvent(source, id, when, modifiers, x, y,
event.getClickCount(),
event.isPopupTrigger(),
event.getPath(),
event.getMenuSelectionManager());
}
}