From eb98fa3de6783b7f4427090437cbbfaa431593ec Mon Sep 17 00:00:00 2001 From: ziree Date: Wed, 9 Nov 2011 22:20:53 +0100 Subject: [PATCH] Don't rely on 0,0,0 for empty pos/rot/size clipboards, but use flags instead. Fixes FIRE-3468 --- indra/newview/llpanelobject.cpp | 12 +++++++++--- indra/newview/llpanelobject.h | 5 +++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp index ecacaccdc9..01d4e509c8 100644 --- a/indra/newview/llpanelobject.cpp +++ b/indra/newview/llpanelobject.cpp @@ -340,6 +340,9 @@ LLPanelObject::LLPanelObject() mSelectedType(MI_BOX), mSculptTextureRevert(LLUUID::null), mSculptTypeRevert(0), + mHasPosClipboard(FALSE), + mHasSizeClipboard(FALSE), + mHasRotClipboard(FALSE), mHasParamClipboard(FALSE), mHasFlexiParam(FALSE), mHasSculptParam(FALSE), @@ -2389,6 +2392,7 @@ void LLPanelObject::onCopyPos(const LLSD& data) mClipboardPos = LLVector3(mCtrlPosX->get(), mCtrlPosY->get(), mCtrlPosZ->get()); copy_vector_to_clipboard(mClipboardPos); mBtnPastePos->setToolTip(llformat("Paste Position\n<%g, %g, %g>", mClipboardPos.mV[VX], mClipboardPos.mV[VY], mClipboardPos.mV[VZ])); + mHasPosClipboard = TRUE; } void LLPanelObject::onCopySize(const LLSD& data) @@ -2396,6 +2400,7 @@ void LLPanelObject::onCopySize(const LLSD& data) mClipboardSize = LLVector3(mCtrlScaleX->get(), mCtrlScaleY->get(), mCtrlScaleZ->get()); copy_vector_to_clipboard(mClipboardSize); mBtnPasteSize->setToolTip(llformat("Paste Size\n<%g, %g, %g>", mClipboardSize.mV[VX], mClipboardSize.mV[VY], mClipboardSize.mV[VZ])); + mHasSizeClipboard = TRUE; } void LLPanelObject::onCopyRot(const LLSD& data) @@ -2403,12 +2408,13 @@ void LLPanelObject::onCopyRot(const LLSD& data) mClipboardRot = LLVector3(mCtrlRotX->get(), mCtrlRotY->get(), mCtrlRotZ->get()); copy_vector_to_clipboard(mClipboardRot); mBtnPasteRot->setToolTip(llformat("Paste Rotation\n<%g, %g, %g>", mClipboardRot.mV[VX], mClipboardRot.mV[VY], mClipboardRot.mV[VZ])); + mHasRotClipboard = TRUE; } void LLPanelObject::onPastePos(const LLSD& data) { - if(mClipboardPos.isNull()) return; + if(!mHasPosClipboard) return; //clamp pos on non-attachments, just keep the prims on the sim if (!mObject->isAttachment()) @@ -2432,7 +2438,7 @@ void LLPanelObject::onPastePos(const LLSD& data) void LLPanelObject::onPasteSize(const LLSD& data) { - if(mClipboardSize.isNull()) return; + if(!mHasSizeClipboard) return; // // mClipboardSize.mV[VX] = llclamp(mClipboardSize.mV[VX], MIN_PRIM_SCALE, llpanelobject_max_prim_scale()); // mClipboardSize.mV[VY] = llclamp(mClipboardSize.mV[VY], MIN_PRIM_SCALE, llpanelobject_max_prim_scale()); @@ -2456,7 +2462,7 @@ void LLPanelObject::onPasteSize(const LLSD& data) void LLPanelObject::onPasteRot(const LLSD& data) { - if(mClipboardRot.isNull()) return; + if(!mHasRotClipboard) return; mCtrlRotX->set( mClipboardRot.mV[VX] ); mCtrlRotY->set( mClipboardRot.mV[VY] ); diff --git a/indra/newview/llpanelobject.h b/indra/newview/llpanelobject.h index bda203f738..ea68d104fd 100644 --- a/indra/newview/llpanelobject.h +++ b/indra/newview/llpanelobject.h @@ -110,6 +110,11 @@ protected: LLVector3 mClipboardPos; LLVector3 mClipboardSize; LLVector3 mClipboardRot; + + BOOL mHasPosClipboard; + BOOL mHasSizeClipboard; + BOOL mHasRotClipboard; + LLSD mPramsClipboard; LLVolumeParams mClipboardVolumeParams; BOOL mHasParamClipboard;