summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorAndrey Kleshchev <andreykproductengine@lindenlab.com>2020-05-27 00:30:52 +0300
committerAndrey Kleshchev <andreykproductengine@lindenlab.com>2020-05-27 00:30:52 +0300
commita01f29761263314c21dd4905f05124f4c15df502 (patch)
tree72d2b4d6be539ee3eba4eb9e5ff249ac272ac5ee /indra/newview
parentad1a46affa3c47ba04a53a5ad625cd3e3693118f (diff)
SL-13148 Implemented wheel support for inworld media
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llpanelprimmediacontrols.cpp28
-rw-r--r--indra/newview/llpanelprimmediacontrols.h1
-rw-r--r--indra/newview/lltoolpie.cpp21
-rw-r--r--indra/newview/lltoolpie.h1
-rw-r--r--indra/newview/llviewermedia.cpp12
-rw-r--r--indra/newview/llviewermedia.h1
-rw-r--r--indra/newview/llviewermediafocus.cpp17
-rw-r--r--indra/newview/llviewermediafocus.h6
8 files changed, 79 insertions, 8 deletions
diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp
index 6e61584d33..55c84815aa 100644
--- a/indra/newview/llpanelprimmediacontrols.cpp
+++ b/indra/newview/llpanelprimmediacontrols.cpp
@@ -829,8 +829,32 @@ void LLPanelPrimMediaControls::draw()
BOOL LLPanelPrimMediaControls::handleScrollWheel(S32 x, S32 y, S32 clicks)
{
- mInactivityTimer.start();
- return LLViewerMediaFocus::getInstance()->handleScrollWheel(x, y, clicks);
+ mInactivityTimer.start();
+ BOOL res = FALSE;
+
+ // Unlike other mouse events, we need to handle scroll here otherwise
+ // it will be intercepted by camera and won't reach toolpie
+ if (LLViewerMediaFocus::getInstance()->isHoveringOverFocused())
+ {
+ // either let toolpie handle this or expose mHoverPick.mUVCoords in some way
+ res = LLToolPie::getInstance()->handleScrollWheel(x, y, clicks);
+ }
+
+ return res;
+}
+
+BOOL LLPanelPrimMediaControls::handleScrollHWheel(S32 x, S32 y, S32 clicks)
+{
+ mInactivityTimer.start();
+ BOOL res = FALSE;
+
+ if (LLViewerMediaFocus::getInstance()->isHoveringOverFocused())
+ {
+ // either let toolpie handle this or expose mHoverPick.mUVCoords in some way
+ res = LLToolPie::getInstance()->handleScrollHWheel(x, y, clicks);
+ }
+
+ return res;
}
BOOL LLPanelPrimMediaControls::handleMouseDown(S32 x, S32 y, MASK mask)
diff --git a/indra/newview/llpanelprimmediacontrols.h b/indra/newview/llpanelprimmediacontrols.h
index 21d5236074..d4301aaf7c 100644
--- a/indra/newview/llpanelprimmediacontrols.h
+++ b/indra/newview/llpanelprimmediacontrols.h
@@ -48,6 +48,7 @@ public:
/*virtual*/ BOOL postBuild();
virtual void draw();
virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
+ virtual BOOL handleScrollHWheel(S32 x, S32 y, S32 clicks);
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index aeb8bdc496..f499c34ca4 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -203,14 +203,31 @@ BOOL LLToolPie::handleRightMouseUp(S32 x, S32 y, MASK mask)
return LLTool::handleRightMouseUp(x, y, mask);
}
+BOOL LLToolPie::handleScrollWheelAny(S32 x, S32 y, S32 clicks_x, S32 clicks_y)
+{
+ BOOL res = FALSE;
+ // mHoverPick should have updated on its own and we should have a face
+ // in LLViewerMediaFocus in case of media, so just reuse mHoverPick
+ if (mHoverPick.mUVCoords.mV[VX] >= 0.f && mHoverPick.mUVCoords.mV[VY] >= 0.f)
+ {
+ res = LLViewerMediaFocus::getInstance()->handleScrollWheel(mHoverPick.mUVCoords, clicks_x, clicks_y);
+ }
+ else
+ {
+ // this won't provide correct coordinates in case of object selection
+ res = LLViewerMediaFocus::getInstance()->handleScrollWheel(x, y, clicks_x, clicks_y);
+ }
+ return res;
+}
+
BOOL LLToolPie::handleScrollWheel(S32 x, S32 y, S32 clicks)
{
- return LLViewerMediaFocus::getInstance()->handleScrollWheel(x, y, clicks);
+ return handleScrollWheelAny(x, y, 0, clicks);
}
BOOL LLToolPie::handleScrollHWheel(S32 x, S32 y, S32 clicks)
{
- return LLViewerMediaFocus::getInstance()->handleScrollWheel(x, y, clicks);
+ return handleScrollWheelAny(x, y, clicks, 0);
}
// True if you selected an object.
diff --git a/indra/newview/lltoolpie.h b/indra/newview/lltoolpie.h
index fe0acfe473..2d6c22f425 100644
--- a/indra/newview/lltoolpie.h
+++ b/indra/newview/lltoolpie.h
@@ -49,6 +49,7 @@ public:
virtual BOOL handleRightMouseUp(S32 x, S32 y, MASK mask);
virtual BOOL handleHover(S32 x, S32 y, MASK mask);
virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
+ BOOL handleScrollWheelAny(S32 x, S32 y, S32 clicks_x, S32 clicks_y);
virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
virtual BOOL handleScrollHWheel(S32 x, S32 y, S32 clicks);
virtual BOOL handleToolTip(S32 x, S32 y, MASK mask);
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 99b54f66d3..ed5dff1600 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -2294,6 +2294,18 @@ void LLViewerMediaImpl::mouseDoubleClick(S32 x, S32 y, MASK mask, S32 button)
}
//////////////////////////////////////////////////////////////////////////////////////////
+void LLViewerMediaImpl::scrollWheel(const LLVector2& texture_coords, S32 scroll_x, S32 scroll_y, MASK mask)
+{
+ if (mMediaSource)
+ {
+ S32 x, y;
+ scaleTextureCoords(texture_coords, &x, &y);
+
+ scrollWheel(x, y, scroll_x, scroll_y, mask);
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////
void LLViewerMediaImpl::scrollWheel(S32 x, S32 y, S32 scroll_x, S32 scroll_y, MASK mask)
{
scaleMouse(&x, &y);
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index 9467a138f0..512c5a8279 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -235,6 +235,7 @@ public:
void mouseMove(const LLVector2& texture_coords, MASK mask);
void mouseDoubleClick(const LLVector2& texture_coords, MASK mask);
void mouseDoubleClick(S32 x, S32 y, MASK mask, S32 button = 0);
+ void scrollWheel(const LLVector2& texture_coords, S32 scroll_x, S32 scroll_y, MASK mask);
void scrollWheel(S32 x, S32 y, S32 scroll_x, S32 scroll_y, MASK mask);
void mouseCapture();
diff --git a/indra/newview/llviewermediafocus.cpp b/indra/newview/llviewermediafocus.cpp
index 69ab0a71af..71ae7bfbc3 100644
--- a/indra/newview/llviewermediafocus.cpp
+++ b/indra/newview/llviewermediafocus.cpp
@@ -371,13 +371,26 @@ BOOL LLViewerMediaFocus::handleUnicodeChar(llwchar uni_char, BOOL called_from_pa
media_impl->handleUnicodeCharHere(uni_char);
return true;
}
-BOOL LLViewerMediaFocus::handleScrollWheel(S32 x, S32 y, S32 clicks)
+
+BOOL LLViewerMediaFocus::handleScrollWheel(const LLVector2& texture_coords, S32 clicks_x, S32 clicks_y)
+{
+ BOOL retval = FALSE;
+ LLViewerMediaImpl* media_impl = getFocusedMediaImpl();
+ if (media_impl && media_impl->hasMedia())
+ {
+ media_impl->scrollWheel(texture_coords, clicks_x, clicks_y, gKeyboard->currentMask(TRUE));
+ retval = TRUE;
+ }
+ return retval;
+}
+
+BOOL LLViewerMediaFocus::handleScrollWheel(S32 x, S32 y, S32 clicks_x, S32 clicks_y)
{
BOOL retval = FALSE;
LLViewerMediaImpl* media_impl = getFocusedMediaImpl();
if(media_impl && media_impl->hasMedia())
{
- media_impl->scrollWheel(x, y, 0, clicks, gKeyboard->currentMask(TRUE));
+ media_impl->scrollWheel(x, y, clicks_x, clicks_y, gKeyboard->currentMask(TRUE));
retval = TRUE;
}
return retval;
diff --git a/indra/newview/llviewermediafocus.h b/indra/newview/llviewermediafocus.h
index 763a6c1688..fa469c36e3 100644
--- a/indra/newview/llviewermediafocus.h
+++ b/indra/newview/llviewermediafocus.h
@@ -58,7 +58,8 @@ public:
/*virtual*/ BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent);
/*virtual*/ BOOL handleKeyUp(KEY key, MASK mask, BOOL called_from_parent);
/*virtual*/ BOOL handleUnicodeChar(llwchar uni_char, BOOL called_from_parent);
- BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
+ BOOL handleScrollWheel(const LLVector2& texture_coords, S32 clicks_x, S32 clicks_y);
+ BOOL handleScrollWheel(S32 x, S32 y, S32 clicks_x, S32 clicks_y);
void update();
@@ -67,7 +68,8 @@ public:
bool isFocusedOnFace(LLPointer<LLViewerObject> objectp, S32 face);
bool isHoveringOverFace(LLPointer<LLViewerObject> objectp, S32 face);
-
+ bool isHoveringOverFocused() { return mFocusedObjectID == mHoverObjectID && mFocusedObjectFace == mHoverObjectFace; };
+
// These look up (by uuid) and return the values that were set with setFocusFace. They will return null if the objects have been destroyed.
LLViewerMediaImpl* getFocusedMediaImpl();
LLViewerObject* getFocusedObject();