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:
parent
5a092ddb0a
commit
0747a7067b
2 changed files with 21 additions and 8 deletions
|
|
@ -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)
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue