1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

Fixed bug with multi-touch in Viewport when drag is blocked and made some methods const

This commit is contained in:
ed 2017-03-29 15:21:32 +01:00
parent 5a092ddb0a
commit 0747a7067b
2 changed files with 21 additions and 8 deletions

View file

@ -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)
};