FIRE-34884: Fix wheel not working in delta mode
parent
26bfcd2e58
commit
3bc2e86342
|
|
@ -306,26 +306,29 @@ bool FSVirtualTrackpad::handleHover(S32 x, S32 y, MASK mask)
|
|||
if (!hasMouseCapture())
|
||||
return true;
|
||||
|
||||
S32 deltaX, deltaY;
|
||||
getHoverMovementDeltas(x, y, mask, &deltaX, &deltaY);
|
||||
S32 deltaX, deltaY, deltaZ;
|
||||
getHoverMovementDeltas(x, y, mask, &deltaX, &deltaY, &deltaZ);
|
||||
applyHoverMovementDeltas(deltaX, deltaY, mask);
|
||||
applyDeltasToValues(deltaX, deltaY, mask);
|
||||
applyDeltasToDeltaValues(deltaX, deltaY, mask);
|
||||
applyDeltasToDeltaValues(deltaX, deltaY, deltaZ, mask);
|
||||
|
||||
onCommit();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void FSVirtualTrackpad::getHoverMovementDeltas(S32 x, S32 y, MASK mask, S32* deltaX, S32* deltaY)
|
||||
void FSVirtualTrackpad::getHoverMovementDeltas(S32 x, S32 y, MASK mask, S32* deltaX, S32* deltaY, S32* deltaZ)
|
||||
{
|
||||
if (!deltaX || !deltaY)
|
||||
if (!deltaX || !deltaY || !deltaZ)
|
||||
return;
|
||||
|
||||
S32 fromX, fromY;
|
||||
fromX = mDoingPinchMode ? mPinchCursorValueX : mCursorValueX;
|
||||
fromY = mDoingPinchMode ? mPinchCursorValueY : mCursorValueY;
|
||||
|
||||
*deltaZ = mWheelClicksSinceLastDelta;
|
||||
mWheelClicksSinceLastDelta = 0;
|
||||
|
||||
if (mask & MASK_CONTROL)
|
||||
{
|
||||
if (!mHeldDownControlBefore)
|
||||
|
|
@ -427,48 +430,48 @@ void FSVirtualTrackpad::applyDeltasToValues(S32 deltaX, S32 deltaY, MASK mask)
|
|||
}
|
||||
}
|
||||
|
||||
void FSVirtualTrackpad::applyDeltasToDeltaValues(S32 deltaX, S32 deltaY, MASK mask)
|
||||
void FSVirtualTrackpad::applyDeltasToDeltaValues(S32 deltaX, S32 deltaY, S32 deltaZ, MASK mask)
|
||||
{
|
||||
if (mDoingPinchMode)
|
||||
{
|
||||
if ((mask & (MASK_SHIFT | MASK_ALT)) == MASK_ALT)
|
||||
{
|
||||
mPinchValueDeltaX = 0;
|
||||
mPinchValueDeltaX = deltaZ;
|
||||
mPinchValueDeltaY = deltaY;
|
||||
mPinchValueDeltaZ = deltaX;
|
||||
}
|
||||
else if ((mask & (MASK_SHIFT | MASK_ALT)) == MASK_SHIFT)
|
||||
{
|
||||
mPinchValueDeltaX = deltaX;
|
||||
mPinchValueDeltaY = 0;
|
||||
mPinchValueDeltaY = deltaZ;
|
||||
mPinchValueDeltaZ = deltaY;
|
||||
}
|
||||
else
|
||||
{
|
||||
mPinchValueDeltaX = deltaX;
|
||||
mPinchValueDeltaY = deltaY;
|
||||
mPinchValueDeltaZ = 0;
|
||||
mPinchValueDeltaZ = deltaZ;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((mask & (MASK_SHIFT | MASK_ALT)) == MASK_ALT)
|
||||
{
|
||||
mValueDeltaX = 0;
|
||||
mValueDeltaX = deltaZ;
|
||||
mValueDeltaY = deltaY;
|
||||
mValueDeltaZ = deltaX;
|
||||
}
|
||||
else if ((mask & (MASK_SHIFT | MASK_ALT)) == MASK_SHIFT)
|
||||
{
|
||||
mValueDeltaX = deltaX;
|
||||
mValueDeltaY = 0;
|
||||
mValueDeltaY = deltaZ;
|
||||
mValueDeltaZ = deltaY;
|
||||
}
|
||||
else
|
||||
{
|
||||
mValueDeltaX = deltaX;
|
||||
mValueDeltaY = deltaY;
|
||||
mValueDeltaZ = 0;
|
||||
mValueDeltaZ = deltaZ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -602,23 +605,43 @@ bool FSVirtualTrackpad::handleScrollWheel(S32 x, S32 y, S32 clicks)
|
|||
if (mask & MASK_CONTROL)
|
||||
changeAmount /= 5;
|
||||
|
||||
mWheelClicksSinceLastDelta = -1 * clicks * changeAmount;
|
||||
|
||||
if (mDoingPinchMode)
|
||||
{
|
||||
if ((mask & (MASK_SHIFT | MASK_ALT)) == MASK_ALT)
|
||||
mPinchValueX -= clicks * changeAmount;
|
||||
{
|
||||
mPinchValueX += mWheelClicksSinceLastDelta;
|
||||
mPinchValueDeltaX = mWheelClicksSinceLastDelta;
|
||||
}
|
||||
else if ((mask & (MASK_SHIFT | MASK_ALT)) == MASK_SHIFT)
|
||||
mPinchValueY -= clicks * changeAmount;
|
||||
{
|
||||
mPinchValueY += mWheelClicksSinceLastDelta;
|
||||
mPinchValueDeltaY = mWheelClicksSinceLastDelta;
|
||||
}
|
||||
else
|
||||
mPinchValueZ -= clicks * changeAmount;
|
||||
{
|
||||
mPinchValueZ += mWheelClicksSinceLastDelta;
|
||||
mPinchValueDeltaZ = mWheelClicksSinceLastDelta;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((mask & (MASK_SHIFT | MASK_ALT)) == MASK_ALT)
|
||||
mValueX -= clicks * changeAmount;
|
||||
{
|
||||
mValueX += mWheelClicksSinceLastDelta;
|
||||
mValueDeltaX = mWheelClicksSinceLastDelta;
|
||||
}
|
||||
else if ((mask & (MASK_SHIFT | MASK_ALT)) == MASK_SHIFT)
|
||||
mValueY -= clicks * changeAmount;
|
||||
{
|
||||
mValueY += mWheelClicksSinceLastDelta;
|
||||
mValueDeltaY = mWheelClicksSinceLastDelta;
|
||||
}
|
||||
else
|
||||
mValueZ -= clicks * changeAmount;
|
||||
{
|
||||
mValueZ += mWheelClicksSinceLastDelta;
|
||||
mValueDeltaZ = mWheelClicksSinceLastDelta;
|
||||
}
|
||||
}
|
||||
|
||||
if (!hasMouseCapture())
|
||||
|
|
|
|||
|
|
@ -119,10 +119,10 @@ private:
|
|||
LLVector3 normalizePixelPos(S32 x, S32 y, S32 z) const;
|
||||
LLVector3 normalizeDelta(S32 x, S32 y, S32 z) const;
|
||||
|
||||
void getHoverMovementDeltas(S32 x, S32 y, MASK mask, S32* deltaX, S32* deltaY);
|
||||
void getHoverMovementDeltas(S32 x, S32 y, MASK mask, S32* deltaX, S32* deltaY, S32* deltaZ);
|
||||
void applyHoverMovementDeltas(S32 deltaX, S32 deltaY, MASK mask);
|
||||
void applyDeltasToValues(S32 deltaX, S32 deltaY, MASK mask);
|
||||
void applyDeltasToDeltaValues(S32 deltaX, S32 deltaY, MASK mask);
|
||||
void applyDeltasToDeltaValues(S32 deltaX, S32 deltaY, S32 deltaZ, MASK mask);
|
||||
|
||||
LLUIImage* mImgMoonBack{ nullptr };
|
||||
LLUIImage* mImgMoonFront{ nullptr };
|
||||
|
|
@ -152,6 +152,11 @@ private:
|
|||
|
||||
bool mHeldDownControlBefore{ false };
|
||||
|
||||
/// <summary>
|
||||
/// The values the owner will get and set.
|
||||
/// </summary>
|
||||
S32 mWheelClicksSinceLastDelta{ 0 };
|
||||
|
||||
/// <summary>
|
||||
/// The values the owner will get and set.
|
||||
/// </summary>
|
||||
|
|
|
|||
Loading…
Reference in New Issue