--HG--
branch : avatar-pipeline
meow-7.2.2
Loren Shih 2009-11-17 13:06:01 -05:00
commit aebfdac65f
6 changed files with 75 additions and 18 deletions

View File

@ -62,7 +62,7 @@ class LLInitialWearablesFetch : public LLInventoryFetchDescendentsObserver
{
public:
LLInitialWearablesFetch() {}
~LLInitialWearablesFetch() {}
~LLInitialWearablesFetch();
virtual void done();
struct InitialWearableData
@ -84,7 +84,6 @@ public:
protected:
void processWearablesMessage();
void processContents();
static void onIdle(void *userdata);
};
LLAgentWearables gAgentWearables;
@ -2013,6 +2012,11 @@ void LLAgentWearables::updateServer()
// to avoid gInventory.notifyObservers recursion.
//--------------------------------------------------------------------
LLInitialWearablesFetch::~LLInitialWearablesFetch()
{
llinfos << "~LLInitialWearablesFetch" << llendl;
}
// virtual
void LLInitialWearablesFetch::done()
{
@ -2020,15 +2024,7 @@ void LLInitialWearablesFetch::done()
// gInventory.notifyObservers. The results will be handled in the next
// idle tick instead.
gInventory.removeObserver(this);
gIdleCallbacks.addFunction(onIdle, this);
}
// static
void LLInitialWearablesFetch::onIdle(void *data)
{
gIdleCallbacks.deleteFunction(onIdle, data);
LLInitialWearablesFetch *self = reinterpret_cast<LLInitialWearablesFetch*>(data);
self->processContents();
doOnIdle(boost::bind(&LLInitialWearablesFetch::processContents,this));
}
void LLInitialWearablesFetch::processContents()

View File

@ -95,8 +95,9 @@ public:
mCopyItems(copy_items),
mAppend(append)
{}
~LLOutfitObserver() {}
virtual void done(); //public
~LLOutfitObserver();
virtual void done();
void doWearCategory();
protected:
LLUUID mCatID;
@ -104,7 +105,19 @@ protected:
bool mAppend;
};
LLOutfitObserver::~LLOutfitObserver()
{
llinfos << "~LLOutfitObserver" << llendl;
}
// BAP is LLOutfitObserver getting deleted here?
void LLOutfitObserver::done()
{
gInventory.removeObserver(this);
doOnIdle(boost::bind(&LLOutfitObserver::doWearCategory,this));
}
void LLOutfitObserver::doWearCategory()
{
// We now have an outfit ready to be copied to agent inventory. Do
// it, and wear that outfit normally.
@ -175,6 +188,7 @@ void LLOutfitObserver::done()
// Wear the inventory category.
LLAppearanceManager::instance().wearInventoryCategoryOnAvatar(gInventory.getCategory(mCatID), mAppend);
}
delete this;
}
class LLOutfitFetch : public LLInventoryFetchDescendentsObserver

View File

@ -36,6 +36,7 @@
#include "llsingleton.h"
#include "llinventorymodel.h"
#include "llviewerinventory.h"
#include "llcallbacklist.h"
class LLWearable;
struct LLWearableHoldingPattern;
@ -111,4 +112,36 @@ private:
#define SUPPORT_ENSEMBLES 0
// Shim class and template function to allow arbitrary boost::bind
// expressions to be run as one-time idle callbacks.
template <typename T>
class OnIdleCallback
{
public:
OnIdleCallback(T callable):
mCallable(callable)
{
}
static void onIdle(void *data)
{
gIdleCallbacks.deleteFunction(onIdle, data);
OnIdleCallback<T>* self = reinterpret_cast<OnIdleCallback<T>*>(data);
self->call();
delete self;
}
void call()
{
mCallable();
}
private:
T mCallable;
};
template <typename T>
void doOnIdle(T callable)
{
OnIdleCallback<T>* cb_functor = new OnIdleCallback<T>(callable);
gIdleCallbacks.addFunction(&OnIdleCallback<T>::onIdle,cb_functor);
}
#endif

View File

@ -1672,6 +1672,17 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
// if target is an outfit or current outfit folder we use link
if (move_is_into_current_outfit || move_is_into_outfit)
{
if (inv_cat->getPreferredType() == LLFolderType::FT_NONE)
{
if (move_is_into_current_outfit)
{
// traverse category and add all contents to currently worn.
BOOL append = true;
LLAppearanceManager::instance().wearInventoryCategory(inv_cat, false, append);
}
}
else
{
#if SUPPORT_ENSEMBLES
// BAP - should skip if dup.
if (move_is_into_current_outfit)
@ -1690,6 +1701,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
cb);
}
#endif
}
}
else
{

View File

@ -73,9 +73,9 @@ LLScrollingPanelParam::LLScrollingPanelParam( const LLPanel::Params& panel_param
F32 min_weight = param->getMinWeight();
F32 max_weight = param->getMaxWeight();
mHintMin = new LLVisualParamHint( pos_x, pos_y, PARAM_HINT_WIDTH, PARAM_HINT_HEIGHT, mesh, param, min_weight);
mHintMin = new LLVisualParamHint( pos_x, pos_y, PARAM_HINT_WIDTH, PARAM_HINT_HEIGHT, mesh, (LLViewerVisualParam*) wearable->getVisualParam(param->getID()), min_weight);
pos_x += PARAM_HINT_WIDTH + 3 * BTN_BORDER;
mHintMax = new LLVisualParamHint( pos_x, pos_y, PARAM_HINT_WIDTH, PARAM_HINT_HEIGHT, mesh, param, max_weight );
mHintMax = new LLVisualParamHint( pos_x, pos_y, PARAM_HINT_WIDTH, PARAM_HINT_HEIGHT, mesh, (LLViewerVisualParam*) wearable->getVisualParam(param->getID()), max_weight );
mHintMin->setAllowsUpdates( FALSE );
mHintMax->setAllowsUpdates( FALSE );

View File

@ -146,8 +146,9 @@ void LLVisualParamHint::preRender(BOOL clear_depth)
{
LLVOAvatarSelf* avatarp = gAgent.getAvatarObject();
mLastParamWeight = avatarp->getVisualParamWeight(mVisualParam);
avatarp->setVisualParamWeight(mVisualParam, mVisualParamWeight);
mLastParamWeight = mVisualParam->getWeight();
mVisualParam->setWeight(mVisualParamWeight, FALSE);
avatarp->setVisualParamWeight(mVisualParam->getID(), mVisualParamWeight, FALSE);
avatarp->setVisualParamWeight("Blink_Left", 0.f);
avatarp->setVisualParamWeight("Blink_Right", 0.f);
avatarp->updateComposites();
@ -242,7 +243,8 @@ BOOL LLVisualParamHint::render()
gGL.setSceneBlendType(LLRender::BT_ALPHA);
gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
}
avatarp->setVisualParamWeight(mVisualParam, mLastParamWeight);
avatarp->setVisualParamWeight(mVisualParam->getID(), mLastParamWeight);
mVisualParam->setWeight(mLastParamWeight, FALSE);
gGL.color4f(1,1,1,1);
mGLTexturep->setGLTextureCreated(true);
return TRUE;