Don't rely on 0,0,0 for empty pos/rot/size clipboards, but use flags instead. Fixes FIRE-3468

ziree 2011-11-09 22:20:53 +01:00
parent 867b32944b
commit eb98fa3de6
2 changed files with 14 additions and 3 deletions

View File

@ -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;
// <AW: opensim-limits>
// 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] );

View File

@ -110,6 +110,11 @@ protected:
LLVector3 mClipboardPos;
LLVector3 mClipboardSize;
LLVector3 mClipboardRot;
BOOL mHasPosClipboard;
BOOL mHasSizeClipboard;
BOOL mHasRotClipboard;
LLSD mPramsClipboard;
LLVolumeParams mClipboardVolumeParams;
BOOL mHasParamClipboard;