summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xdoc/contributions.txt2
-rw-r--r--indra/newview/llagentcamera.cpp8
-rw-r--r--indra/newview/lltoolface.cpp2
-rw-r--r--indra/newview/lltoolfocus.cpp2
-rw-r--r--indra/newview/lltoolpie.cpp31
-rw-r--r--indra/newview/pipeline.cpp1
6 files changed, 41 insertions, 5 deletions
diff --git a/doc/contributions.txt b/doc/contributions.txt
index bbdfaf655d..7a3fa2f95b 100755
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -1251,6 +1251,8 @@ Robin Cornelius
VWR-12763
VWR-12995
VWR-20911
+Rohacan Hirons
+ SL-14717
Rosco Teardrop
Rose Evans
Rudee Voom
diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp
index ed6c3c307f..e10244aad6 100644
--- a/indra/newview/llagentcamera.cpp
+++ b/indra/newview/llagentcamera.cpp
@@ -2501,8 +2501,16 @@ void LLAgentCamera::setFocusGlobal(const LLPickInfo& pick)
{
// focus on object plus designated offset
// which may or may not be same as pick.mPosGlobal
+ // except for rigged items to prevent wrong focus position
+ if (objectp->isRiggedMesh())
+ {
+ setFocusGlobal(pick.mPosGlobal, pick.mObjectID);
+ }
+ else
+ {
setFocusGlobal(objectp->getPositionGlobal() + LLVector3d(pick.mObjectOffset), pick.mObjectID);
}
+ }
else
{
// focus directly on point where user clicked
diff --git a/indra/newview/lltoolface.cpp b/indra/newview/lltoolface.cpp
index a00ac10698..71986d21f9 100644
--- a/indra/newview/lltoolface.cpp
+++ b/indra/newview/lltoolface.cpp
@@ -73,7 +73,7 @@ BOOL LLToolFace::handleDoubleClick(S32 x, S32 y, MASK mask)
BOOL LLToolFace::handleMouseDown(S32 x, S32 y, MASK mask)
{
- gViewerWindow->pickAsync(x, y, mask, pickCallback);
+ gViewerWindow->pickAsync(x, y, mask, pickCallback, false, gSavedSettings.getBOOL("AnimatedObjectsAllowLeftClick"));
return TRUE;
}
diff --git a/indra/newview/lltoolfocus.cpp b/indra/newview/lltoolfocus.cpp
index 07f46c5fbe..d8cb70dd3c 100644
--- a/indra/newview/lltoolfocus.cpp
+++ b/indra/newview/lltoolfocus.cpp
@@ -135,7 +135,7 @@ BOOL LLToolCamera::handleMouseDown(S32 x, S32 y, MASK mask)
gViewerWindow->hideCursor();
- gViewerWindow->pickAsync(x, y, mask, pickCallback, /*BOOL pick_transparent*/ FALSE, /*BOOL pick_rigged*/ FALSE, /*BOOL pick_unselectable*/ TRUE);
+ gViewerWindow->pickAsync(x, y, mask, pickCallback, /*BOOL pick_transparent*/ FALSE, /*BOOL pick_rigged*/ gSavedSettings.getBOOL("AnimatedObjectsAllowLeftClick"), /*BOOL pick_unselectable*/ TRUE);
return TRUE;
}
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 322d0bc727..c3f85c0008 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -78,6 +78,10 @@ static void handle_click_action_play();
static void handle_click_action_open_media(LLPointer<LLViewerObject> objectp);
static ECursorType cursor_from_parcel_media(U8 click_action);
+BOOL rigged_hovering_keep_hand = false;
+U64 last_rigged_hovering_check_clock_count = 0;
+U64 last_rigged_pick_clock_count = 0;
+
LLToolPie::LLToolPie()
: LLTool(std::string("Pie")),
mMouseButtonDown( false ),
@@ -112,7 +116,7 @@ BOOL LLToolPie::handleMouseDown(S32 x, S32 y, MASK mask)
mMouseDownX = x;
mMouseDownY = y;
LLTimer pick_timer;
- BOOL pick_rigged = false; //gSavedSettings.getBOOL("AnimatedObjectsAllowLeftClick");
+ BOOL pick_rigged = gSavedSettings.getBOOL("AnimatedObjectsAllowLeftClick");
LLPickInfo transparent_pick = gViewerWindow->pickImmediate(x, y, TRUE /*includes transparent*/, pick_rigged);
LLPickInfo visible_pick = gViewerWindow->pickImmediate(x, y, FALSE, pick_rigged);
LLViewerObject *transp_object = transparent_pick.getObject();
@@ -173,7 +177,9 @@ BOOL LLToolPie::handleMouseDown(S32 x, S32 y, MASK mask)
mMouseButtonDown = true;
- return handleLeftClickPick();
+ handleLeftClickPick();
+
+ return TRUE;
}
// Spawn context menus on right mouse down so you can drag over and select
@@ -722,7 +728,21 @@ void LLToolPie::selectionPropertiesReceived()
BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask)
{
- BOOL pick_rigged = false; //gSavedSettings.getBOOL("AnimatedObjectsAllowLeftClick");
+ // prevent rigged item hovering causing FPS to drop by faking we're still hovering it for 0.25 seconds
+ U64 current_clock_count = LLTimer::getCurrentClockCount();
+ if (current_clock_count - last_rigged_pick_clock_count < 2500000) {
+ if(rigged_hovering_keep_hand) gViewerWindow->setCursor(UI_CURSOR_HAND);
+ return TRUE;
+ }
+ rigged_hovering_keep_hand = 0;
+
+ static LLCachedControl<bool> pick_rigged_setting(gSavedSettings, "AnimatedObjectsAllowLeftClick");
+ BOOL pick_rigged = pick_rigged_setting;
+ if (pick_rigged) {
+ pick_rigged = (current_clock_count - last_rigged_hovering_check_clock_count > 1000000); // only 10 per seconds
+ if (pick_rigged) last_rigged_hovering_check_clock_count = current_clock_count;
+ }
+
mHoverPick = gViewerWindow->pickImmediate(x, y, FALSE, pick_rigged);
LLViewerObject *parent = NULL;
LLViewerObject *object = mHoverPick.getObject();
@@ -730,6 +750,10 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask)
if (object)
{
parent = object->getRootEdit();
+ // Update gLastRiggedPickClockCount if we're hovering a rigged item
+ if (object->isRiggedMesh()) {
+ last_rigged_pick_clock_count = current_clock_count;
+ }
}
// Show screen-space highlight glow effect
@@ -794,6 +818,7 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask)
{
show_highlight = true;
gViewerWindow->setCursor(UI_CURSOR_HAND);
+ rigged_hovering_keep_hand = true;
LL_DEBUGS("UserInput") << "hover handled by LLToolPie (inactive)" << LL_ENDL;
}
else
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 7ba7e545f4..ffca8896a6 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -7184,6 +7184,7 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector4a& start,
if (!sPickAvatar)
{
+ pick_rigged = false;
//save hit info in case we need to restore
//due to attachment override
LLVector4a local_normal;