Skip to content

Commit

Permalink
Add Upload, Change, and Remove profile image commands by request. Rig…
Browse files Browse the repository at this point in the history
…ht click image to activate menu.
  • Loading branch information
cinderblocks committed Dec 25, 2024
1 parent bc9b6a3 commit 9366bc6
Show file tree
Hide file tree
Showing 10 changed files with 537 additions and 232 deletions.
4 changes: 3 additions & 1 deletion indra/newview/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -608,8 +608,9 @@ set(viewer_SOURCE_FILES
llpreviewsound.cpp
llpreviewtexture.cpp
llproductinforequest.cpp
llprogressview.cpp
llprofileimagectrl.cpp
llprofileimagepicker.cpp
llprogressview.cpp
llrecentpeople.cpp
llreflectionmap.cpp
llreflectionmapmanager.cpp
Expand Down Expand Up @@ -1345,6 +1346,7 @@ set(viewer_HEADER_FILES
llpreviewsound.h
llpreviewtexture.h
llproductinforequest.h
llprofileimagectrl.h
llprofileimagepicker.h
llprogressview.h
llrecentpeople.h
Expand Down
141 changes: 1 addition & 140 deletions indra/newview/llfloaterprofiletexture.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,149 +30,10 @@

#include "llbutton.h"
#include "llfloaterreg.h"
#include "llpreview.h" // fors constants
#include "llpreview.h" // for constants
#include "lltrans.h"
#include "llviewercontrol.h"
#include "llviewertexture.h"
#include "llviewertexturelist.h"


//////////////////////////////////////////////////////////////////////////
// LLProfileImageCtrl
//////////////////////////////////////////////////////////////////////////

static LLDefaultChildRegistry::Register<LLProfileImageCtrl> r("profile_image");

LLProfileImageCtrl::LLProfileImageCtrl(const LLProfileImageCtrl::Params& p)
: LLIconCtrl(p)
, mImage(NULL)
, mImageOldBoostLevel(LLGLTexture::BOOST_NONE)
, mWasNoDelete(false)
, mImageLoadedSignal(NULL)
{
}

LLProfileImageCtrl::~LLProfileImageCtrl()
{
LLLoadedCallbackEntry::cleanUpCallbackList(&mCallbackTextureList);
releaseTexture();

delete mImageLoadedSignal;
}

void LLProfileImageCtrl::releaseTexture()
{
if (mImage.notNull())
{
mImage->setBoostLevel(mImageOldBoostLevel);
if (!mWasNoDelete)
{
// In most cases setBoostLevel marks images as NO_DELETE
mImage->forceActive();
}
mImage = NULL;
}
}

void LLProfileImageCtrl::setValue(const LLSD& value)
{
LLUUID id = value.asUUID();
setImageAssetId(id);
if (id.isNull())
{
LLIconCtrl::setValue("Generic_Person_Large", LLGLTexture::BOOST_UI);
}
else
{
// called second to not change priority before it gets saved to mImageOldBoostLevel
LLIconCtrl::setValue(value, LLGLTexture::BOOST_PREVIEW);
}
}

void LLProfileImageCtrl::draw()
{
if (mImage.notNull())
{
// Pump the texture priority
mImage->addTextureStats(MAX_IMAGE_AREA);
mImage->setKnownDrawSize(LLViewerTexture::MAX_IMAGE_SIZE_DEFAULT, LLViewerTexture::MAX_IMAGE_SIZE_DEFAULT);
}
LLIconCtrl::draw();
}

boost::signals2::connection LLProfileImageCtrl::setImageLoadedCallback(const image_loaded_signal_t::slot_type& cb)
{
if (!mImageLoadedSignal) mImageLoadedSignal = new image_loaded_signal_t();

return mImageLoadedSignal->connect(cb);
}

void LLProfileImageCtrl::setImageAssetId(const LLUUID& asset_id)
{
if (mImageID == asset_id)
{
return;
}

releaseTexture();

mImageID = asset_id;
if (mImageID.notNull())
{
mImage = LLViewerTextureManager::getFetchedTexture(mImageID, FTT_DEFAULT, MIPMAP_YES, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
mWasNoDelete = mImage->getTextureState() == LLGLTexture::NO_DELETE;
mImageOldBoostLevel = mImage->getBoostLevel();
mImage->setBoostLevel(LLGLTexture::BOOST_PREVIEW);
mImage->setKnownDrawSize(LLViewerTexture::MAX_IMAGE_SIZE_DEFAULT, LLViewerTexture::MAX_IMAGE_SIZE_DEFAULT);
mImage->forceToSaveRawImage(0);

if ((mImage->getFullWidth() * mImage->getFullHeight()) == 0)
{
mImage->setLoadedCallback(LLProfileImageCtrl::onImageLoaded,
0, TRUE, FALSE, new LLHandle<LLUICtrl>(getHandle()), &mCallbackTextureList);
}
else
{
onImageLoaded(true, mImage);
}
}
}

void LLProfileImageCtrl::onImageLoaded(bool success, LLViewerFetchedTexture* img)
{
if (mImageLoadedSignal)
{
(*mImageLoadedSignal)(success, img);
}
}

// static
void LLProfileImageCtrl::onImageLoaded(BOOL success,
LLViewerFetchedTexture* src_vi,
LLImageRaw* src,
LLImageRaw* aux_src,
S32 discard_level,
BOOL final,
void* userdata)
{
if (!userdata) return;

LLHandle<LLUICtrl>* handle = (LLHandle<LLUICtrl>*)userdata;

if (!handle->isDead())
{
LLProfileImageCtrl* caller = static_cast<LLProfileImageCtrl*>(handle->get());
if (caller && caller->mImageLoadedSignal)
{
(*caller->mImageLoadedSignal)(success, src_vi);
}
}

if (final || !success)
{
delete handle;
}
}


//////////////////////////////////////////////////////////////////////////
Expand Down
43 changes: 2 additions & 41 deletions indra/newview/llfloaterprofiletexture.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,50 +28,11 @@
#define LL_LLFLOATERPROFILETEXTURE_H

#include "llfloater.h"
#include "lliconctrl.h"
#include "llviewertexture.h"
#include "llprofileimagectrl.h"

class LLButton;
class LLImageRaw;

class LLProfileImageCtrl: public LLIconCtrl
{
public:
struct Params: public LLInitParam::Block<Params, LLIconCtrl::Params>
{
};

LLProfileImageCtrl(const Params& p);
virtual ~LLProfileImageCtrl();


virtual void setValue(const LLSD& value) override;
LLUUID getImageAssetId() { return mImageID; }
LLPointer<LLViewerFetchedTexture> getImage() {return mImage;}
void draw() override;

typedef boost::signals2::signal<void(bool success, LLViewerFetchedTexture* imagep)> image_loaded_signal_t;
boost::signals2::connection setImageLoadedCallback(const image_loaded_signal_t::slot_type& cb);
private:
void onImageLoaded(bool success, LLViewerFetchedTexture* src_vi);
static void onImageLoaded(BOOL success,
LLViewerFetchedTexture* src_vi,
LLImageRaw* src,
LLImageRaw* aux_src,
S32 discard_level,
BOOL final,
void* userdata);
void releaseTexture();

void setImageAssetId(const LLUUID& asset_id);
private:
LLPointer<LLViewerFetchedTexture> mImage;
LLUUID mImageID;
S32 mImageOldBoostLevel;
bool mWasNoDelete;
image_loaded_signal_t* mImageLoadedSignal;
LLLoadedCallbackEntry::source_callback_list_t mCallbackTextureList;
};
class LLViewerFetchedTexture;

class LLFloaterProfileTexture : public LLFloater
{
Expand Down
Loading

0 comments on commit 9366bc6

Please # to comment.