// virtual BOOL LLViewerTexLayerSetBuffer::needsRender() { llassert(mTexLayerSet->getAvatarAppearance() == gAgentAvatarp); if (!isAgentAvatarValid()) return FALSE; const BOOL upload_now = mNeedsUpload && isReadyToUpload(); const BOOL update_now = mNeedsUpdate && isReadyToUpdate(); // Don't render if we don't want to (or aren't ready to) upload or update. if (!(update_now || upload_now)) { return FALSE; } // Don't render if we're animating our appearance. if (gAgentAvatarp->getIsAppearanceAnimating()) { return FALSE; } // Don't render if we are trying to create a shirt texture but aren't wearing a skirt. if (gAgentAvatarp->getBakedTE(getViewerTexLayerSet()) == LLAvatarAppearanceDefines::TEX_SKIRT_BAKED && !gAgentAvatarp->isWearingWearableType(LLWearableType::WT_SKIRT)) { cancelUpload(); return FALSE; } // Render if we have at least minimal level of detail for each local texture. return getViewerTexLayerSet()->isLocalTextureDataAvailable(); }
#include <Wt/WContainerWidget.h> #include <Wt/WFileDropWidget.h> SAMPLE_BEGIN(FileDrop) auto dropWidgetPtr = Wt::cpp14::make_unique<Wt::WFileDropWidget>(); auto dropWidget = dropWidgetPtr.get(); dropWidget->drop().connect([=] (const std::vector<Wt::WFileDropWidget::File*>& files) { const int maxFiles = 5; unsigned prevNbFiles = dropWidget->uploads().size() - files.size(); for (unsigned i=0; i < files.size(); i++) { if (prevNbFiles + i >= maxFiles) { dropWidget->cancelUpload(files[i]); continue; } Wt::WContainerWidget *block = dropWidget->addWidget(Wt::cpp14::make_unique<Wt::WContainerWidget>()); block->setToolTip(files[i]->clientFileName()); block->addStyleClass("upload-block spinner"); } if (dropWidget->uploads().size() >= maxFiles) dropWidget->setAcceptDrops(false); }); dropWidget->uploaded().connect([=] (Wt::WFileDropWidget::File* file) { std::vector<Wt::WFileDropWidget::File*> uploads = dropWidget->uploads(); std::size_t idx = 0; for (; idx != uploads.size(); ++idx) if (uploads[idx] == file)