|
|
@@ -193,7 +193,7 @@ struct Viewport::DragToScrollListener : private MouseListener, |
|
|
|
private ViewportDragPosition::Listener
|
|
|
|
{
|
|
|
|
DragToScrollListener (Viewport& v)
|
|
|
|
: viewport (v), numTouches (0), isDragging (false)
|
|
|
|
: viewport (v), numTouches (0), isDragging (false), isViewportDragBlocked (false)
|
|
|
|
{
|
|
|
|
viewport.contentHolder.addMouseListener (this, true);
|
|
|
|
offsetX.addListener (this);
|
|
|
@@ -213,16 +213,15 @@ struct Viewport::DragToScrollListener : private MouseListener, |
|
|
|
|
|
|
|
void mouseDown (const MouseEvent& e) override
|
|
|
|
{
|
|
|
|
for (auto c = e.eventComponent; c != nullptr && c != &viewport; c = c->getParentComponent())
|
|
|
|
if (c->getViewportIgnoreDragFlag())
|
|
|
|
return;
|
|
|
|
if (doesMouseEventComponentBlockViewportDrag (e.eventComponent))
|
|
|
|
isViewportDragBlocked = true;
|
|
|
|
|
|
|
|
++numTouches;
|
|
|
|
}
|
|
|
|
|
|
|
|
void mouseDrag (const MouseEvent& e) override
|
|
|
|
{
|
|
|
|
if (numTouches == 1)
|
|
|
|
if (numTouches == 1 && ! isViewportDragBlocked)
|
|
|
|
{
|
|
|
|
Point<float> totalOffset = e.getOffsetFromDragStart().toFloat();
|
|
|
|
|
|
|
@@ -245,8 +244,11 @@ struct Viewport::DragToScrollListener : private MouseListener, |
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void mouseUp (const MouseEvent&) override
|
|
|
|
void mouseUp (const MouseEvent& e) override
|
|
|
|
{
|
|
|
|
if (doesMouseEventComponentBlockViewportDrag (e.eventComponent))
|
|
|
|
isViewportDragBlocked = false;
|
|
|
|
|
|
|
|
if (--numTouches <= 0)
|
|
|
|
{
|
|
|
|
offsetX.endDrag();
|
|
|
@@ -256,12 +258,23 @@ struct Viewport::DragToScrollListener : private MouseListener, |
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool doesMouseEventComponentBlockViewportDrag (const Component* eventComp)
|
|
|
|
{
|
|
|
|
for (auto c = eventComp; c != nullptr && c != &viewport; c = c->getParentComponent())
|
|
|
|
if (c->getViewportIgnoreDragFlag())
|
|
|
|
return true;
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
Viewport& viewport;
|
|
|
|
ViewportDragPosition offsetX, offsetY;
|
|
|
|
Point<int> originalViewPos;
|
|
|
|
int numTouches;
|
|
|
|
bool isDragging;
|
|
|
|
|
|
|
|
bool isViewportDragBlocked;
|
|
|
|
|
|
|
|
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (DragToScrollListener)
|
|
|
|
};
|
|
|
|
|
|
|
|