From a45eaafa8e02b79730eaa01f6c246a98b4e0ecac Mon Sep 17 00:00:00 2001 From: Alexander Lobas Date: Wed, 13 Dec 2017 17:42:43 +0300 Subject: [PATCH] IDEA-170615 No scrollbars in database diagram IDEA-90162 Unlimited re-sizing in Diagrams when scrolling with Mouse Wheel --- .../keymap/impl/IdeMouseEventDispatcher.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeMouseEventDispatcher.java b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeMouseEventDispatcher.java index f611db056249..3840ee9c0282 100644 --- a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeMouseEventDispatcher.java +++ b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeMouseEventDispatcher.java @@ -242,6 +242,10 @@ public final class IdeMouseEventDispatcher { return false; // forward mouse processing to the special shortcut panel } + if (doVerticalDiagramScrolling(c, e)) { + return true; + } + if (isHorizontalScrolling(c, e)) { boolean done = doHorizontalScrolling(c, (MouseWheelEvent)e); if (done) return true; @@ -312,6 +316,43 @@ public final class IdeMouseEventDispatcher { return false; } + private static boolean doVerticalDiagramScrolling(@Nullable Component component, @NotNull MouseEvent event) { + if (component != null && event instanceof MouseWheelEvent && isDiagramViewComponent(component.getParent())) { + MouseWheelEvent mwe = (MouseWheelEvent)event; + if (!mwe.isShiftDown() && mwe.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL && JBScrollPane.isScrollEvent(mwe)) { + JScrollBar scrollBar = findVerticalScrollBar(component); + if (scrollBar != null) { + scrollBar.setValue(scrollBar.getValue() + getScrollAmount(mwe, scrollBar)); + return true; + } + } + } + return false; + } + + @Nullable + private static JScrollBar findVerticalScrollBar(@Nullable Component component) { + if (component == null) { + return null; + } + if (component instanceof JScrollPane) { + JScrollBar scrollBar = ((JScrollPane)component).getVerticalScrollBar(); + return scrollBar != null && scrollBar.isVisible() ? scrollBar : null; + } + if (isDiagramViewComponent(component)) { + JComponent view = (JComponent)component; + for (int i = 0; i < view.getComponentCount(); i++) { + if (view.getComponent(i) instanceof JScrollBar) { + JScrollBar scrollBar = (JScrollBar)view.getComponent(i); + if (scrollBar.getOrientation() == Adjustable.VERTICAL) { + return scrollBar.isVisible() ? scrollBar : null; + } + } + } + } + return findVerticalScrollBar(component.getParent()); + } + public void resetHorScrollingTracker() { myLastHorScrolledComponentHash = 0; }