mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Reuse utility method to convert mouse events
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
+2
-2
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user