From 1e7a933543a2caeca85319747ec00348bcfd18af Mon Sep 17 00:00:00 2001 From: ed Date: Tue, 28 Mar 2017 15:44:49 +0100 Subject: [PATCH] Added viewportIgnoreDragFlag to Component to indicate that mouse drag events should not move the Component's parent Viewport with drag-to-scroll functionality enabled. --- modules/juce_gui_basics/components/juce_Component.h | 12 ++++++++++++ modules/juce_gui_basics/layout/juce_Viewport.cpp | 6 +++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/modules/juce_gui_basics/components/juce_Component.h b/modules/juce_gui_basics/components/juce_Component.h index 23205740f3..c5cbf8ae4d 100644 --- a/modules/juce_gui_basics/components/juce_Component.h +++ b/modules/juce_gui_basics/components/juce_Component.h @@ -2230,6 +2230,17 @@ public: */ CachedComponentImage* getCachedComponentImage() const noexcept { return cachedImage; } + /** Sets a flag to indicate whether mouse drag events on this Component should be ignored when it is inside a + Viewport with drag-to-scroll functionality enabled. This is useful for Components such as sliders that + should not move their parent Viewport when dragged. + */ + void setViewportIgnoreDragFlag (bool ignoreDrag) { flags.viewportIgnoreDragFlag = ignoreDrag; }; + + /** Retrieves the current state of the Viewport drag-to-scroll functionality flag. + @see setViewportIgnoreDragFlag + */ + bool getViewportIgnoreDragFlag() { return flags.viewportIgnoreDragFlag; } + //============================================================================== // These methods are deprecated - use localPointToGlobal, getLocalPoint, getLocalPoint, etc instead. JUCE_DEPRECATED (Point relativePositionToGlobal (Point) const); @@ -2288,6 +2299,7 @@ private: bool mouseDownWasBlocked : 1; bool isMoveCallbackPending : 1; bool isResizeCallbackPending : 1; + bool viewportIgnoreDragFlag : 1; #if JUCE_DEBUG bool isInsidePaintCall : 1; #endif diff --git a/modules/juce_gui_basics/layout/juce_Viewport.cpp b/modules/juce_gui_basics/layout/juce_Viewport.cpp index 724f30396c..58ca6e420a 100644 --- a/modules/juce_gui_basics/layout/juce_Viewport.cpp +++ b/modules/juce_gui_basics/layout/juce_Viewport.cpp @@ -211,8 +211,12 @@ struct Viewport::DragToScrollListener : private MouseListener, (int) offsetY.getPosition())); } - void mouseDown (const MouseEvent&) override + void mouseDown (const MouseEvent& e) override { + for (auto c = e.eventComponent; c != nullptr && c != &viewport; c = c->getParentComponent()) + if (c->getViewportIgnoreDragFlag()) + return; + ++numTouches; }