Merge branch 'develop' of https://github.com/secondlife/viewer
# Conflicts: # indra/newview/llglsandbox.cpp # indra/newview/llphysicsshapebuilderutil.cppmeow-7.2.2
commit
b727a5e73c
|
|
@ -9,3 +9,5 @@ a0b3021bdcf76859054fda8e30abb3ed47749e83
|
|||
1b67dd855c41f5a0cda7ec2a68d98071986ca703
|
||||
6cc7dd09d5e69cf57e6de7fb568a0ad2693f9c9a
|
||||
e2e37cced861b98de8c1a7c9c0d3a50d2d90e433
|
||||
# multiple problems
|
||||
5370a6d323e14d7b4e32a3f41ef78f7744e361c5
|
||||
|
|
|
|||
|
|
@ -2655,6 +2655,34 @@ S32 LLTextBase::removeFirstLine()
|
|||
return 0;
|
||||
}
|
||||
|
||||
// virtual
|
||||
void LLTextBase::copyContents(const LLTextBase* source)
|
||||
{
|
||||
llassert(source);
|
||||
if (!source)
|
||||
return;
|
||||
|
||||
beforeValueChange();
|
||||
deselect();
|
||||
|
||||
mSegments.clear();
|
||||
for (const LLTextSegmentPtr& segp : source->mSegments)
|
||||
{
|
||||
mSegments.emplace(segp->clone(*this));
|
||||
}
|
||||
|
||||
mLineInfoList.clear();
|
||||
for (const line_info& li : mLineInfoList)
|
||||
{
|
||||
mLineInfoList.push_back(line_info(li));
|
||||
}
|
||||
|
||||
getViewModel()->setDisplay(source->getViewModel()->getDisplay());
|
||||
|
||||
onValueChange(0, getLength());
|
||||
needsReflow();
|
||||
}
|
||||
|
||||
void LLTextBase::appendLineBreakSegment(const LLStyle::Params& style_params)
|
||||
{
|
||||
segment_vec_t segments;
|
||||
|
|
@ -3586,6 +3614,24 @@ boost::signals2::connection LLTextBase::setIsObjectBlockedCallback(const is_bloc
|
|||
LLTextSegment::~LLTextSegment()
|
||||
{}
|
||||
|
||||
// static
|
||||
LLStyleSP LLTextSegment::cloneStyle(LLTextBase& target, const LLStyle* source)
|
||||
{
|
||||
// Take most params from target
|
||||
LLStyle::Params params = target.getStyleParams();
|
||||
LLStyle* style = new LLStyle(params);
|
||||
|
||||
// Take some params from source
|
||||
style->setLinkHREF(source->getLinkHREF());
|
||||
if (source->isImage())
|
||||
{
|
||||
style->setImage(source->getImage()->getName());
|
||||
}
|
||||
|
||||
return style;
|
||||
}
|
||||
|
||||
|
||||
bool LLTextSegment::getDimensionsF32(S32 first_char, S32 num_chars, F32& width, S32& height) const { width = 0; height = 0; return false; }
|
||||
bool LLTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const
|
||||
{
|
||||
|
|
@ -3927,6 +3973,13 @@ void LLNormalTextSegment::setToolTip(const std::string& tooltip)
|
|||
mTooltip = tooltip;
|
||||
}
|
||||
|
||||
// virtual
|
||||
LLTextSegmentPtr LLNormalTextSegment::clone(LLTextBase& target) const
|
||||
{
|
||||
LLStyleConstSP sp(cloneStyle(target, mStyle));
|
||||
return new LLNormalTextSegment(sp, mStart, mEnd, target);
|
||||
}
|
||||
|
||||
bool LLNormalTextSegment::getDimensionsF32(S32 first_char, S32 num_chars, F32& width, S32& height) const
|
||||
{
|
||||
height = 0;
|
||||
|
|
@ -4067,6 +4120,13 @@ LLLabelTextSegment::LLLabelTextSegment( const LLUIColor& color, S32 start, S32 e
|
|||
{
|
||||
}
|
||||
|
||||
// virtual
|
||||
LLTextSegmentPtr LLLabelTextSegment::clone(LLTextBase& target) const
|
||||
{
|
||||
LLStyleConstSP sp(cloneStyle(target, mStyle));
|
||||
return new LLLabelTextSegment(sp, mStart, mEnd, target);
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
const LLWString& LLLabelTextSegment::getWText() const
|
||||
{
|
||||
|
|
@ -4091,6 +4151,13 @@ LLEmojiTextSegment::LLEmojiTextSegment(const LLUIColor& color, S32 start, S32 en
|
|||
{
|
||||
}
|
||||
|
||||
// virtual
|
||||
LLTextSegmentPtr LLEmojiTextSegment::clone(LLTextBase& target) const
|
||||
{
|
||||
LLStyleConstSP sp(cloneStyle(target, mStyle));
|
||||
return new LLEmojiTextSegment(sp, mStart, mEnd, target);
|
||||
}
|
||||
|
||||
bool LLEmojiTextSegment::handleToolTip(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
if (mTooltip.empty())
|
||||
|
|
@ -4114,6 +4181,14 @@ LLOnHoverChangeableTextSegment::LLOnHoverChangeableTextSegment( LLStyleConstSP s
|
|||
mHoveredStyle(style),
|
||||
mNormalStyle(normal_style){}
|
||||
|
||||
// virtual
|
||||
LLTextSegmentPtr LLOnHoverChangeableTextSegment::clone(LLTextBase& target) const
|
||||
{
|
||||
LLStyleConstSP hsp(cloneStyle(target, mHoveredStyle));
|
||||
LLStyleConstSP nsp(cloneStyle(target, mNormalStyle));
|
||||
return new LLOnHoverChangeableTextSegment(hsp, nsp, mStart, mEnd, target);
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
F32 LLOnHoverChangeableTextSegment::draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRectf& draw_rect)
|
||||
{
|
||||
|
|
@ -4153,6 +4228,13 @@ LLInlineViewSegment::~LLInlineViewSegment()
|
|||
mView->die();
|
||||
}
|
||||
|
||||
// virtual
|
||||
LLTextSegmentPtr LLInlineViewSegment::clone(LLTextBase& target) const
|
||||
{
|
||||
llassert_always_msg(false, "NOT SUPPORTED");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bool LLInlineViewSegment::getDimensionsF32(S32 first_char, S32 num_chars, F32& width, S32& height) const
|
||||
{
|
||||
if (first_char == 0 && num_chars == 0)
|
||||
|
|
@ -4240,6 +4322,14 @@ LLLineBreakTextSegment::LLLineBreakTextSegment(LLStyleConstSP style,S32 pos):LLT
|
|||
LLLineBreakTextSegment::~LLLineBreakTextSegment()
|
||||
{
|
||||
}
|
||||
|
||||
// virtual
|
||||
LLTextSegmentPtr LLLineBreakTextSegment::clone(LLTextBase& target) const
|
||||
{
|
||||
LLLineBreakTextSegment* copy = new LLLineBreakTextSegment(mStart);
|
||||
copy->mFontHeight = mFontHeight;
|
||||
return copy;
|
||||
}
|
||||
bool LLLineBreakTextSegment::getDimensionsF32(S32 first_char, S32 num_chars, F32& width, S32& height) const
|
||||
{
|
||||
width = 0;
|
||||
|
|
@ -4267,8 +4357,16 @@ LLImageTextSegment::~LLImageTextSegment()
|
|||
{
|
||||
}
|
||||
|
||||
// virtual
|
||||
LLTextSegmentPtr LLImageTextSegment::clone(LLTextBase& target) const
|
||||
{
|
||||
LLStyleConstSP sp(cloneStyle(target, mStyle));
|
||||
return new LLImageTextSegment(sp, mStart, target);
|
||||
}
|
||||
|
||||
static const S32 IMAGE_HPAD = 3;
|
||||
|
||||
// virtual
|
||||
bool LLImageTextSegment::getDimensionsF32(S32 first_char, S32 num_chars, F32& width, S32& height) const
|
||||
{
|
||||
width = 0;
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@
|
|||
class LLScrollContainer;
|
||||
class LLContextMenu;
|
||||
class LLUrlMatch;
|
||||
class LLTextBase;
|
||||
|
||||
///
|
||||
/// A text segment is used to specify a subsection of a text string
|
||||
|
|
@ -62,6 +63,9 @@ public:
|
|||
mEnd(end)
|
||||
{}
|
||||
virtual ~LLTextSegment();
|
||||
virtual LLTextSegmentPtr clone(LLTextBase& terget) const { return new LLTextSegment(mStart, mEnd); }
|
||||
static LLStyleSP cloneStyle(LLTextBase& target, const LLStyle* source);
|
||||
|
||||
bool getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const;
|
||||
|
||||
virtual bool getDimensionsF32(S32 first_char, S32 num_chars, F32& width, S32& height) const;
|
||||
|
|
@ -128,6 +132,7 @@ public:
|
|||
LLNormalTextSegment( LLStyleConstSP style, S32 start, S32 end, LLTextBase& editor );
|
||||
LLNormalTextSegment( const LLUIColor& color, S32 start, S32 end, LLTextBase& editor, bool is_visible = true);
|
||||
virtual ~LLNormalTextSegment();
|
||||
/*virtual*/ LLTextSegmentPtr clone(LLTextBase& target) const;
|
||||
|
||||
/*virtual*/ bool getDimensionsF32(S32 first_char, S32 num_chars, F32& width, S32& height) const;
|
||||
/*virtual*/ S32 getOffset(S32 segment_local_x_coord, S32 start_offset, S32 num_chars, bool round) const;
|
||||
|
|
@ -180,6 +185,7 @@ class LLLabelTextSegment : public LLNormalTextSegment
|
|||
public:
|
||||
LLLabelTextSegment( LLStyleConstSP style, S32 start, S32 end, LLTextBase& editor );
|
||||
LLLabelTextSegment( const LLUIColor& color, S32 start, S32 end, LLTextBase& editor, bool is_visible = true);
|
||||
/*virtual*/ LLTextSegmentPtr clone(LLTextBase& target) const;
|
||||
|
||||
protected:
|
||||
|
||||
|
|
@ -194,6 +200,7 @@ class LLEmojiTextSegment : public LLNormalTextSegment
|
|||
public:
|
||||
LLEmojiTextSegment(LLStyleConstSP style, S32 start, S32 end, LLTextBase& editor);
|
||||
LLEmojiTextSegment(const LLUIColor& color, S32 start, S32 end, LLTextBase& editor, bool is_visible = true);
|
||||
/*virtual*/ LLTextSegmentPtr clone(LLTextBase& target) const override;
|
||||
|
||||
bool canEdit() const override { return false; }
|
||||
bool handleToolTip(S32 x, S32 y, MASK mask) override;
|
||||
|
|
@ -204,6 +211,7 @@ class LLOnHoverChangeableTextSegment : public LLNormalTextSegment
|
|||
{
|
||||
public:
|
||||
LLOnHoverChangeableTextSegment( LLStyleConstSP style, LLStyleConstSP normal_style, S32 start, S32 end, LLTextBase& editor );
|
||||
/*virtual*/ LLTextSegmentPtr clone(LLTextBase& target) const;
|
||||
/*virtual*/ F32 draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRectf& draw_rect);
|
||||
/*virtual*/ bool handleHover(S32 x, S32 y, MASK mask);
|
||||
protected:
|
||||
|
|
@ -218,6 +226,7 @@ class LLIndexSegment : public LLTextSegment
|
|||
{
|
||||
public:
|
||||
LLIndexSegment() : LLTextSegment(0, 0) {}
|
||||
/*virtual*/ LLTextSegmentPtr clone(LLTextBase& target) const { return new LLIndexSegment(); }
|
||||
};
|
||||
|
||||
class LLInlineViewSegment : public LLTextSegment
|
||||
|
|
@ -235,6 +244,8 @@ public:
|
|||
|
||||
LLInlineViewSegment(const Params& p, S32 start, S32 end);
|
||||
~LLInlineViewSegment();
|
||||
/*virtual*/ LLTextSegmentPtr clone(LLTextBase& target) const;
|
||||
|
||||
/*virtual*/ bool getDimensionsF32(S32 first_char, S32 num_chars, F32& width, S32& height) const;
|
||||
/*virtual*/ S32 getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars, S32 line_ind) const;
|
||||
/*virtual*/ void updateLayout(const class LLTextBase& editor);
|
||||
|
|
@ -259,6 +270,7 @@ public:
|
|||
LLLineBreakTextSegment(LLStyleConstSP style,S32 pos);
|
||||
LLLineBreakTextSegment(S32 pos);
|
||||
~LLLineBreakTextSegment();
|
||||
/*virtual*/ LLTextSegmentPtr clone(LLTextBase& target) const;
|
||||
/*virtual*/ bool getDimensionsF32(S32 first_char, S32 num_chars, F32& width, S32& height) const;
|
||||
S32 getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars, S32 line_ind) const;
|
||||
F32 draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRectf& draw_rect);
|
||||
|
|
@ -272,6 +284,8 @@ class LLImageTextSegment : public LLTextSegment
|
|||
public:
|
||||
LLImageTextSegment(LLStyleConstSP style,S32 pos,class LLTextBase& editor);
|
||||
~LLImageTextSegment();
|
||||
/*virtual*/ LLTextSegmentPtr clone(LLTextBase& target) const;
|
||||
|
||||
/*virtual*/ bool getDimensionsF32(S32 first_char, S32 num_chars, F32& width, S32& height) const;
|
||||
S32 getNumChars(S32 num_pixels, S32 segment_offset, S32 char_offset, S32 max_chars, S32 line_ind) const;
|
||||
F32 draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRectf& draw_rect);
|
||||
|
|
@ -547,6 +561,7 @@ public:
|
|||
|
||||
const LLFontGL* getFont() const override { return mFont; }
|
||||
|
||||
virtual void copyContents(const LLTextBase* source);
|
||||
virtual void appendLineBreakSegment(const LLStyle::Params& style_params);
|
||||
virtual void appendImageSegment(const LLStyle::Params& style_params);
|
||||
virtual void appendWidget(const LLInlineViewSegment::Params& params, const std::string& text, bool allow_undo);
|
||||
|
|
|
|||
|
|
@ -371,43 +371,46 @@ void GLTFSceneManager::addGLTFObject(LLViewerObject* obj, LLUUID gltf_id)
|
|||
//static
|
||||
void GLTFSceneManager::onGLTFBinLoadComplete(const LLUUID& id, LLAssetType::EType asset_type, void* user_data, S32 status, LLExtStat ext_status)
|
||||
{
|
||||
LLViewerObject* obj = (LLViewerObject*)user_data;
|
||||
llassert(asset_type == LLAssetType::AT_GLTF_BIN);
|
||||
|
||||
if (status == LL_ERR_NOERR)
|
||||
{
|
||||
if (obj)
|
||||
LLAppViewer::instance()->postToMainCoro([=]()
|
||||
{
|
||||
// find the Buffer with the given id in the asset
|
||||
if (obj->mGLTFAsset)
|
||||
LLViewerObject* obj = (LLViewerObject*)user_data;
|
||||
llassert(asset_type == LLAssetType::AT_GLTF_BIN);
|
||||
|
||||
if (status == LL_ERR_NOERR)
|
||||
{
|
||||
obj->mGLTFAsset->mPendingBuffers--;
|
||||
|
||||
|
||||
if (obj->mGLTFAsset->mPendingBuffers == 0)
|
||||
if (obj)
|
||||
{
|
||||
if (obj->mGLTFAsset->prep())
|
||||
// find the Buffer with the given id in the asset
|
||||
if (obj->mGLTFAsset)
|
||||
{
|
||||
GLTFSceneManager& mgr = GLTFSceneManager::instance();
|
||||
if (std::find(mgr.mObjects.begin(), mgr.mObjects.end(), obj) == mgr.mObjects.end())
|
||||
obj->mGLTFAsset->mPendingBuffers--;
|
||||
|
||||
|
||||
if (obj->mGLTFAsset->mPendingBuffers == 0)
|
||||
{
|
||||
GLTFSceneManager::instance().mObjects.push_back(obj);
|
||||
if (obj->mGLTFAsset->prep())
|
||||
{
|
||||
GLTFSceneManager& mgr = GLTFSceneManager::instance();
|
||||
if (std::find(mgr.mObjects.begin(), mgr.mObjects.end(), obj) == mgr.mObjects.end())
|
||||
{
|
||||
GLTFSceneManager::instance().mObjects.push_back(obj);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("GLTF") << "Failed to prepare GLTF asset: " << id << LL_ENDL;
|
||||
obj->mGLTFAsset = nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("GLTF") << "Failed to prepare GLTF asset: " << id << LL_ENDL;
|
||||
obj->mGLTFAsset = nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("GLTF") << "Failed to load GLTF asset: " << id << LL_ENDL;
|
||||
obj->unref();
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("GLTF") << "Failed to load GLTF asset: " << id << LL_ENDL;
|
||||
obj->unref();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//static
|
||||
|
|
|
|||
|
|
@ -41,6 +41,16 @@ public:
|
|||
mEditor(NULL)
|
||||
{}
|
||||
|
||||
/*virtual*/ LLTextSegmentPtr clone(LLTextBase& target) const
|
||||
{
|
||||
ChatSeparator* copy = new ChatSeparator(mStart, mEnd);
|
||||
if (mEditor)
|
||||
{
|
||||
copy->mEditor = ⌖
|
||||
}
|
||||
return copy;
|
||||
}
|
||||
|
||||
/*virtual*/ void linkToDocument(class LLTextBase* editor)
|
||||
{
|
||||
mEditor = editor;
|
||||
|
|
|
|||
|
|
@ -44,6 +44,14 @@ public:
|
|||
mExpanderLabel(utf8str_to_wstring(more_text))
|
||||
{}
|
||||
|
||||
/*virtual*/ LLTextSegmentPtr clone(LLTextBase& target) const
|
||||
{
|
||||
LLStyleSP sp(cloneStyle(target, mStyle));
|
||||
LLExpanderSegment* copy = new LLExpanderSegment(sp, mStart, mEnd, LLStringUtil::null, target);
|
||||
copy->mExpanderLabel = mExpanderLabel;
|
||||
return copy;
|
||||
}
|
||||
|
||||
/*virtual*/ bool getDimensionsF32(S32 first_char, S32 num_chars, F32& width, S32& height) const
|
||||
{
|
||||
// more label always spans width of text box
|
||||
|
|
|
|||
|
|
@ -2399,6 +2399,14 @@ bool LLFace::calcPixelArea(F32& cos_angle_to_view_dir, F32& radius)
|
|||
center.mul(0.5f);
|
||||
size.setSub(mRiggedExtents[1], mRiggedExtents[0]);
|
||||
}
|
||||
else if (mDrawablep && mVObjp.notNull() && mVObjp->getPartitionType() == LLViewerRegion::PARTITION_PARTICLE && mDrawablep->getSpatialGroup())
|
||||
{ // use box of spatial group for particles (over approximates size, but we don't actually have a good size per particle)
|
||||
LLSpatialGroup* group = mDrawablep->getSpatialGroup();
|
||||
const LLVector4a* extents = group->getExtents();
|
||||
size.setSub(extents[1], extents[0]);
|
||||
center.setAdd(extents[1], extents[0]);
|
||||
center.mul(0.5f);
|
||||
}
|
||||
else
|
||||
{
|
||||
center.load3(getPositionAgent().mV);
|
||||
|
|
|
|||
|
|
@ -163,6 +163,7 @@ public:
|
|||
void updateParcelInfo();
|
||||
void updateCovenantInfo();
|
||||
static void onChangeAgreeCovenant(LLUICtrl* ctrl, void* user_data);
|
||||
void updateFloaterCovenant(const LLTextBase* source, const LLUUID &asset_id);
|
||||
void updateFloaterCovenantText(const std::string& string, const LLUUID &asset_id);
|
||||
void updateFloaterEstateName(const std::string& name);
|
||||
void updateFloaterLastModified(const std::string& text);
|
||||
|
|
@ -201,6 +202,8 @@ public:
|
|||
|
||||
void onVisibilityChanged ( const LLSD& new_visibility );
|
||||
|
||||
private:
|
||||
void onCovenantTextUpdated(const LLUUID& asset_id);
|
||||
};
|
||||
|
||||
// static
|
||||
|
|
@ -221,6 +224,15 @@ void LLFloaterBuyLand::buyLand(
|
|||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterBuyLand::updateCovenant(const LLTextBase* source, const LLUUID& asset_id)
|
||||
{
|
||||
if (LLFloaterBuyLandUI* floater = LLFloaterReg::findTypedInstance<LLFloaterBuyLandUI>("buy_land"))
|
||||
{
|
||||
floater->updateFloaterCovenant(source, asset_id);
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterBuyLand::updateCovenantText(const std::string& string, const LLUUID &asset_id)
|
||||
{
|
||||
|
|
@ -560,11 +572,24 @@ void LLFloaterBuyLandUI::onChangeAgreeCovenant(LLUICtrl* ctrl, void* user_data)
|
|||
}
|
||||
}
|
||||
|
||||
void LLFloaterBuyLandUI::updateFloaterCovenant(const LLTextBase* source, const LLUUID& asset_id)
|
||||
{
|
||||
LLViewerTextEditor* editor = getChild<LLViewerTextEditor>("covenant_editor");
|
||||
editor->copyContents(source);
|
||||
|
||||
onCovenantTextUpdated(asset_id);
|
||||
}
|
||||
|
||||
void LLFloaterBuyLandUI::updateFloaterCovenantText(const std::string &string, const LLUUID& asset_id)
|
||||
{
|
||||
LLViewerTextEditor* editor = getChild<LLViewerTextEditor>("covenant_editor");
|
||||
editor->setText(string);
|
||||
|
||||
onCovenantTextUpdated(asset_id);
|
||||
}
|
||||
|
||||
void LLFloaterBuyLandUI::onCovenantTextUpdated(const LLUUID& asset_id)
|
||||
{
|
||||
LLCheckBoxCtrl* check = getChild<LLCheckBoxCtrl>("agree_covenant");
|
||||
LLTextBox* box = getChild<LLTextBox>("covenant_text");
|
||||
if (asset_id.isNull())
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
#ifndef LL_LLFLOATERBUYLAND_H
|
||||
#define LL_LLFLOATERBUYLAND_H
|
||||
|
||||
class LLTextBase;
|
||||
class LLFloater;
|
||||
class LLViewerRegion;
|
||||
class LLParcelSelection;
|
||||
|
|
@ -37,6 +38,7 @@ public:
|
|||
static void buyLand(LLViewerRegion* region,
|
||||
LLSafeHandle<LLParcelSelection> parcel,
|
||||
bool is_for_group);
|
||||
static void updateCovenant(const LLTextBase* source, const LLUUID& asset_id);
|
||||
static void updateCovenantText(const std::string& string, const LLUUID& asset_id);
|
||||
static void updateEstateName(const std::string& name);
|
||||
static void updateLastModified(const std::string& text);
|
||||
|
|
|
|||
|
|
@ -78,9 +78,10 @@
|
|||
// </FS:Zi>
|
||||
|
||||
// <FS:Zi> detect and strip empty alpha layers from images on upload
|
||||
const U8 ALPHA_EMPTY_THRESHOLD = 253;
|
||||
const F32 ALPHA_EMPTY_THRESHOLD_RATIO = 0.999f;
|
||||
constexpr U8 ALPHA_EMPTY_THRESHOLD = 253;
|
||||
constexpr F32 ALPHA_EMPTY_THRESHOLD_RATIO = 0.999f;
|
||||
// </FS:Zi>
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// LLFloaterImagePreview()
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -435,6 +436,21 @@ void LLFloaterImagePreview::draw()
|
|||
gGL.color3f(1.f, 1.f, 1.f);
|
||||
gGL.begin(LLRender::TRIANGLES);
|
||||
{
|
||||
// <FS:Zi> Make preview area position to be not hard-coded
|
||||
//gGL.texCoord2f(mPreviewImageRect.mLeft, mPreviewImageRect.mTop);
|
||||
//gGL.vertex2i(PREVIEW_HPAD, PREVIEW_TEXTURE_HEIGHT + PREVIEW_VPAD);
|
||||
//gGL.texCoord2f(mPreviewImageRect.mLeft, mPreviewImageRect.mBottom);
|
||||
//gGL.vertex2i(PREVIEW_HPAD, PREVIEW_HPAD + PREF_BUTTON_HEIGHT + PREVIEW_HPAD);
|
||||
//gGL.texCoord2f(mPreviewImageRect.mRight, mPreviewImageRect.mBottom);
|
||||
//gGL.vertex2i(r.getWidth() - PREVIEW_HPAD, PREVIEW_HPAD + PREF_BUTTON_HEIGHT + PREVIEW_HPAD);
|
||||
|
||||
//gGL.texCoord2f(mPreviewImageRect.mRight, mPreviewImageRect.mBottom);
|
||||
//gGL.vertex2i(r.getWidth() - PREVIEW_HPAD, PREVIEW_HPAD + PREF_BUTTON_HEIGHT + PREVIEW_HPAD);
|
||||
//gGL.texCoord2f(mPreviewImageRect.mLeft, mPreviewImageRect.mTop);
|
||||
//gGL.vertex2i(PREVIEW_HPAD, PREVIEW_TEXTURE_HEIGHT + PREVIEW_VPAD);
|
||||
//gGL.texCoord2f(mPreviewImageRect.mRight, mPreviewImageRect.mTop);
|
||||
//gGL.vertex2i(r.getWidth() - PREVIEW_HPAD, PREVIEW_TEXTURE_HEIGHT + PREVIEW_VPAD);
|
||||
|
||||
gGL.texCoord2f(mPreviewImageRect.mLeft, mPreviewImageRect.mTop);
|
||||
gGL.vertex2i(mPreviewRect.mLeft, mPreviewRect.mTop);
|
||||
gGL.texCoord2f(mPreviewImageRect.mLeft, mPreviewImageRect.mBottom);
|
||||
|
|
@ -448,6 +464,7 @@ void LLFloaterImagePreview::draw()
|
|||
gGL.vertex2i(mPreviewRect.mRight, mPreviewRect.mBottom);
|
||||
gGL.texCoord2f(mPreviewImageRect.mRight, mPreviewImageRect.mTop);
|
||||
gGL.vertex2i(mPreviewRect.mRight, mPreviewRect.mTop);
|
||||
// </FS:Zi>
|
||||
}
|
||||
gGL.end();
|
||||
|
||||
|
|
@ -472,6 +489,21 @@ void LLFloaterImagePreview::draw()
|
|||
|
||||
gGL.begin(LLRender::TRIANGLES);
|
||||
{
|
||||
// <FS:Zi> Make preview area position to be not hard-coded
|
||||
//gGL.texCoord2f(0.f, 1.f);
|
||||
//gGL.vertex2i(PREVIEW_HPAD, PREVIEW_TEXTURE_HEIGHT + PREVIEW_VPAD);
|
||||
//gGL.texCoord2f(0.f, 0.f);
|
||||
//gGL.vertex2i(PREVIEW_HPAD, PREVIEW_HPAD + PREF_BUTTON_HEIGHT + PREVIEW_HPAD);
|
||||
//gGL.texCoord2f(1.f, 0.f);
|
||||
//gGL.vertex2i(r.getWidth() - PREVIEW_HPAD, PREVIEW_HPAD + PREF_BUTTON_HEIGHT + PREVIEW_HPAD);
|
||||
|
||||
//gGL.texCoord2f(1.f, 0.f);
|
||||
//gGL.vertex2i(r.getWidth() - PREVIEW_HPAD, PREVIEW_HPAD + PREF_BUTTON_HEIGHT + PREVIEW_HPAD);
|
||||
//gGL.texCoord2f(0.f, 1.f);
|
||||
//gGL.vertex2i(PREVIEW_HPAD, PREVIEW_TEXTURE_HEIGHT + PREVIEW_VPAD);
|
||||
//gGL.texCoord2f(1.f, 1.f);
|
||||
//gGL.vertex2i(r.getWidth() - PREVIEW_HPAD, PREVIEW_TEXTURE_HEIGHT + PREVIEW_VPAD);
|
||||
|
||||
gGL.texCoord2f(0.f, 1.f);
|
||||
gGL.vertex2i(mPreviewRect.mLeft, mPreviewRect.mTop);
|
||||
gGL.texCoord2f(0.f, 0.f);
|
||||
|
|
@ -485,6 +517,7 @@ void LLFloaterImagePreview::draw()
|
|||
gGL.vertex2i(mPreviewRect.mRight, mPreviewRect.mBottom);
|
||||
gGL.texCoord2f(1.f, 1.f);
|
||||
gGL.vertex2i(mPreviewRect.mRight, mPreviewRect.mTop);
|
||||
// </FS:Zi>
|
||||
}
|
||||
gGL.end();
|
||||
|
||||
|
|
|
|||
|
|
@ -3356,6 +3356,16 @@ void LLPanelLandCovenant::refresh()
|
|||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLPanelLandCovenant::updateCovenant(const LLTextBase* source)
|
||||
{
|
||||
if (LLPanelLandCovenant* self = LLFloaterLand::getCurrentPanelLandCovenant())
|
||||
{
|
||||
LLViewerTextEditor* editor = self->getChild<LLViewerTextEditor>("covenant_editor");
|
||||
editor->copyContents(source);
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLPanelLandCovenant::updateCovenantText(const std::string &string)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ class LLRadioGroup;
|
|||
class LLParcelSelectionObserver;
|
||||
class LLSpinCtrl;
|
||||
class LLTabContainer;
|
||||
class LLTextBase;
|
||||
class LLTextBox;
|
||||
class LLTextEditor;
|
||||
class LLTextureCtrl;
|
||||
|
|
@ -434,6 +435,7 @@ public:
|
|||
virtual ~LLPanelLandCovenant();
|
||||
virtual bool postBuild();
|
||||
void refresh();
|
||||
static void updateCovenant(const LLTextBase* source);
|
||||
static void updateCovenantText(const std::string& string);
|
||||
static void updateEstateName(const std::string& name);
|
||||
static void updateLastModified(const std::string& text);
|
||||
|
|
|
|||
|
|
@ -3054,6 +3054,16 @@ void LLPanelEstateCovenant::setEstateName(const std::string& name)
|
|||
mEstateNameText->setText(name);
|
||||
}
|
||||
|
||||
// static
|
||||
void LLPanelEstateCovenant::updateCovenant(const LLTextBase* source, const LLUUID& asset_id)
|
||||
{
|
||||
if (LLPanelEstateCovenant* panelp = LLFloaterRegionInfo::getPanelCovenant())
|
||||
{
|
||||
panelp->mEditor->copyContents(source);
|
||||
panelp->setCovenantID(asset_id);
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLPanelEstateCovenant::updateCovenantText(const std::string& string, const LLUUID& asset_id)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -412,6 +412,7 @@ public:
|
|||
void* user_data, S32 status, LLExtStat ext_status);
|
||||
|
||||
// Accessor functions
|
||||
static void updateCovenant(const LLTextBase* source, const LLUUID& asset_id);
|
||||
static void updateCovenantText(const std::string& string, const LLUUID& asset_id);
|
||||
static void updateEstateName(const std::string& name);
|
||||
static void updateLastModified(const std::string& text);
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@
|
|||
#include <vector>
|
||||
|
||||
// Height of the yellow selection highlight posts for land
|
||||
const F32 PARCEL_POST_HEIGHT = 0.666f;
|
||||
constexpr F32 PARCEL_POST_HEIGHT = 0.666f;
|
||||
|
||||
// Returns true if you got at least one object
|
||||
void LLToolSelectRect::handleRectangleSelection(S32 x, S32 y, MASK mask)
|
||||
|
|
@ -235,36 +235,27 @@ void LLToolSelectRect::handleRectangleSelection(S32 x, S32 y, MASK mask)
|
|||
{
|
||||
std::vector<LLDrawable*> potentials;
|
||||
|
||||
for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();
|
||||
iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
|
||||
for (LLViewerRegion* region : LLWorld::getInstance()->getRegionList())
|
||||
{
|
||||
LLViewerRegion* region = *iter;
|
||||
for (U32 i = 0; i < LLViewerRegion::NUM_PARTITIONS; i++)
|
||||
{
|
||||
LLSpatialPartition* part = region->getSpatialPartition(i);
|
||||
if (part)
|
||||
if (LLSpatialPartition* part = region->getSpatialPartition(i))
|
||||
{
|
||||
part->cull(camera, &potentials, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (std::vector<LLDrawable*>::iterator iter = potentials.begin();
|
||||
iter != potentials.end(); iter++)
|
||||
for (LLDrawable* drawable : potentials)
|
||||
{
|
||||
LLDrawable* drawable = *iter;
|
||||
// <FS:Ansariel> FIRE-15206: Crash fixing
|
||||
if (!drawable)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
|
||||
LLViewerObject* vobjp = drawable->getVObj();
|
||||
|
||||
// <FS:Ansariel> FIRE-15206: Crash fixing
|
||||
//if (!drawable || !vobjp ||
|
||||
if (!vobjp ||
|
||||
// </FS:Ansariel>
|
||||
vobjp->getPCode() != LL_PCODE_VOLUME ||
|
||||
vobjp->isAttachment() ||
|
||||
(deselect && !vobjp->isSelected()))
|
||||
|
|
@ -317,7 +308,7 @@ void LLToolSelectRect::handleRectangleSelection(S32 x, S32 y, MASK mask)
|
|||
gViewerWindow->setup3DRender();
|
||||
}
|
||||
|
||||
const F32 WIND_RELATIVE_ALTITUDE = 25.f;
|
||||
constexpr F32 WIND_RELATIVE_ALTITUDE = 25.f;
|
||||
|
||||
void LLWind::renderVectors()
|
||||
{
|
||||
|
|
@ -342,14 +333,14 @@ void LLWind::renderVectors()
|
|||
x = mVelX[i + j*mSize] * WIND_SCALE_HACK;
|
||||
y = mVelY[i + j*mSize] * WIND_SCALE_HACK;
|
||||
gGL.pushMatrix();
|
||||
gGL.translatef((F32)i * region_width_meters/mSize, (F32)j * region_width_meters/mSize, 0.0);
|
||||
gGL.color3f(0,1,0);
|
||||
gGL.translatef((F32)i * region_width_meters/mSize, (F32)j * region_width_meters/mSize, 0.f);
|
||||
gGL.color3f(0.f, 1.f, 0.f);
|
||||
gGL.begin(LLRender::POINTS);
|
||||
gGL.vertex3f(0,0,0);
|
||||
gGL.vertex3f(0.f, 0.f, 0.f);
|
||||
gGL.end();
|
||||
gGL.color3f(1,0,0);
|
||||
gGL.color3f(1.f, 0.f, 0.f);
|
||||
gGL.begin(LLRender::LINES);
|
||||
gGL.vertex3f(x * 0.1f, y * 0.1f ,0.f);
|
||||
gGL.vertex3f(x * 0.1f, y * 0.1f, 0.f);
|
||||
gGL.vertex3f(x, y, 0.f);
|
||||
gGL.end();
|
||||
gGL.popMatrix();
|
||||
|
|
@ -363,7 +354,7 @@ void LLWind::renderVectors()
|
|||
|
||||
// Used by lltoolselectland
|
||||
void LLViewerParcelMgr::renderRect(const LLVector3d &west_south_bottom_global,
|
||||
const LLVector3d &east_north_top_global )
|
||||
const LLVector3d &east_north_top_global)
|
||||
{
|
||||
LLGLSUIDefault gls_ui;
|
||||
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
|
|
@ -434,92 +425,6 @@ void LLViewerParcelMgr::renderRect(const LLVector3d &west_south_bottom_global,
|
|||
LLUI::setLineWidth(1.f);
|
||||
}
|
||||
|
||||
/*
|
||||
void LLViewerParcelMgr::renderParcel(LLParcel* parcel )
|
||||
{
|
||||
S32 i;
|
||||
S32 count = parcel->getBoxCount();
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
const LLParcelBox& box = parcel->getBox(i);
|
||||
|
||||
F32 west = box.mMin.mV[VX];
|
||||
F32 south = box.mMin.mV[VY];
|
||||
|
||||
F32 east = box.mMax.mV[VX];
|
||||
F32 north = box.mMax.mV[VY];
|
||||
|
||||
// HACK: At edge of last region of world, we need to make sure the region
|
||||
// resolves correctly so we can get a height value.
|
||||
const F32 FUDGE = 0.01f;
|
||||
|
||||
F32 sw_bottom = LLWorld::getInstance()->resolveLandHeightAgent( LLVector3( west, south, 0.f ) );
|
||||
F32 se_bottom = LLWorld::getInstance()->resolveLandHeightAgent( LLVector3( east-FUDGE, south, 0.f ) );
|
||||
F32 ne_bottom = LLWorld::getInstance()->resolveLandHeightAgent( LLVector3( east-FUDGE, north-FUDGE, 0.f ) );
|
||||
F32 nw_bottom = LLWorld::getInstance()->resolveLandHeightAgent( LLVector3( west, north-FUDGE, 0.f ) );
|
||||
|
||||
// little hack to make nearby lines not Z-fight
|
||||
east -= 0.1f;
|
||||
north -= 0.1f;
|
||||
|
||||
F32 sw_top = sw_bottom + POST_HEIGHT;
|
||||
F32 se_top = se_bottom + POST_HEIGHT;
|
||||
F32 ne_top = ne_bottom + POST_HEIGHT;
|
||||
F32 nw_top = nw_bottom + POST_HEIGHT;
|
||||
|
||||
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
LLGLDepthTest gls_depth(GL_TRUE);
|
||||
|
||||
LLUI::setLineWidth(2.f);
|
||||
gGL.color4f(0.f, 1.f, 1.f, 1.f);
|
||||
|
||||
// Cheat and give this the same pick-name as land
|
||||
gGL.begin(LLRender::LINES);
|
||||
|
||||
gGL.vertex3f(west, north, nw_bottom);
|
||||
gGL.vertex3f(west, north, nw_top);
|
||||
|
||||
gGL.vertex3f(east, north, ne_bottom);
|
||||
gGL.vertex3f(east, north, ne_top);
|
||||
|
||||
gGL.vertex3f(east, south, se_bottom);
|
||||
gGL.vertex3f(east, south, se_top);
|
||||
|
||||
gGL.vertex3f(west, south, sw_bottom);
|
||||
gGL.vertex3f(west, south, sw_top);
|
||||
|
||||
gGL.end();
|
||||
|
||||
gGL.color4f(0.f, 1.f, 1.f, 0.2f);
|
||||
gGL.begin(LLRender::QUADS);
|
||||
|
||||
gGL.vertex3f(west, north, nw_bottom);
|
||||
gGL.vertex3f(west, north, nw_top);
|
||||
gGL.vertex3f(east, north, ne_top);
|
||||
gGL.vertex3f(east, north, ne_bottom);
|
||||
|
||||
gGL.vertex3f(east, north, ne_bottom);
|
||||
gGL.vertex3f(east, north, ne_top);
|
||||
gGL.vertex3f(east, south, se_top);
|
||||
gGL.vertex3f(east, south, se_bottom);
|
||||
|
||||
gGL.vertex3f(east, south, se_bottom);
|
||||
gGL.vertex3f(east, south, se_top);
|
||||
gGL.vertex3f(west, south, sw_top);
|
||||
gGL.vertex3f(west, south, sw_bottom);
|
||||
|
||||
gGL.vertex3f(west, south, sw_bottom);
|
||||
gGL.vertex3f(west, south, sw_top);
|
||||
gGL.vertex3f(west, north, nw_top);
|
||||
gGL.vertex3f(west, north, nw_bottom);
|
||||
|
||||
gGL.end();
|
||||
|
||||
LLUI::setLineWidth(1.f);
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
// north = a wall going north/south. Need that info to set up texture
|
||||
// coordinates correctly.
|
||||
|
|
|
|||
|
|
@ -753,7 +753,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
|
|||
case IM_NOTHING_SPECIAL: // p2p IM
|
||||
// Don't show dialog, just do IM
|
||||
if (!gAgent.isGodlike()
|
||||
&& gAgent.getRegion()->isPrelude()
|
||||
&& gAgent.inPrelude()
|
||||
&& to_id.isNull())
|
||||
{
|
||||
// do nothing -- don't distract newbies in
|
||||
|
|
|
|||
|
|
@ -655,6 +655,11 @@ void LLPanelPlaceProfile::updateCovenantText(const std::string &text)
|
|||
mCovenantText->setText(text);
|
||||
}
|
||||
|
||||
void LLPanelPlaceProfile::updateCovenant(const LLTextBase* source)
|
||||
{
|
||||
mCovenantText->copyContents(source);
|
||||
}
|
||||
|
||||
void LLPanelPlaceProfile::onForSaleBannerClick()
|
||||
{
|
||||
LLViewerParcelMgr* mgr = LLViewerParcelMgr::getInstance();
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@
|
|||
|
||||
class LLAccordionCtrl;
|
||||
class LLIconCtrl;
|
||||
class LLTextBase;
|
||||
class LLTextEditor;
|
||||
|
||||
class LLPanelPlaceProfile : public LLPanelPlaceInfo
|
||||
|
|
@ -60,6 +61,7 @@ public:
|
|||
void updateEstateName(const std::string& name);
|
||||
void updateEstateOwnerName(const std::string& name);
|
||||
void updateCovenantText(const std::string &text);
|
||||
void updateCovenant(const LLTextBase* source);
|
||||
|
||||
private:
|
||||
void onForSaleBannerClick();
|
||||
|
|
|
|||
|
|
@ -28,6 +28,26 @@
|
|||
|
||||
#include "llphysicsshapebuilderutil.h"
|
||||
|
||||
#include "llmeshrepository.h"
|
||||
|
||||
bool LLPhysicsVolumeParams::hasDecomposition() const
|
||||
{
|
||||
if (!isMeshSculpt())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
LLUUID mesh_id = getSculptID();
|
||||
if (mesh_id.isNull())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
LLModel::Decomposition* decomp = gMeshRepo.getDecomposition(mesh_id);
|
||||
|
||||
return decomp != NULL;
|
||||
}
|
||||
|
||||
/* static */
|
||||
// <FS:Beq> FIRE-23053 - analysed mesh physics is not correctly displayed for thin meshes
|
||||
//void LLPhysicsShapeBuilderUtil::determinePhysicsShape( const LLPhysicsVolumeParams& volume_params, const LLVector3& scale, PhysicsShapeSpecification& specOut)
|
||||
|
|
@ -203,35 +223,32 @@ void LLPhysicsShapeBuilderUtil::determinePhysicsShape(const LLPhysicsVolumeParam
|
|||
{
|
||||
specOut.mType = PhysicsShapeSpecification::PRIM_CONVEX;
|
||||
}
|
||||
// <FS:Beq> restore proper behaviour.
|
||||
// else if (volume_params.isMeshSculpt() &&
|
||||
// // Check overall dimensions, not individual triangles.
|
||||
// (scale.mV[0] < SHAPE_BUILDER_USER_MESH_CONVEXIFICATION_SIZE ||
|
||||
// scale.mV[1] < SHAPE_BUILDER_USER_MESH_CONVEXIFICATION_SIZE ||
|
||||
// scale.mV[2] < SHAPE_BUILDER_USER_MESH_CONVEXIFICATION_SIZE
|
||||
// ) )
|
||||
// {
|
||||
// // Server distinguishes between user-specified or default convex mesh, vs server's thin-triangle override, but we don't.
|
||||
// specOut.mType = PhysicsShapeSpecification::PRIM_CONVEX;
|
||||
// }
|
||||
// </FS:Beq>
|
||||
else if ( volume_params.isSculpt() ) // Is a sculpt of any kind (mesh or legacy)
|
||||
else if (volume_params.isMeshSculpt())
|
||||
{
|
||||
//<FS:Beq> [BUG-134006] Viewer code is not aligned to server code when calculating physics shape for thin objects.
|
||||
specOut.mType = PhysicsShapeSpecification::INVALID;
|
||||
// <FS:Beq> FIRE-23053 - add decomp check analysed mesh physics is not correctly displayed for thin meshes
|
||||
// if (volume_params.isMeshSculpt()){
|
||||
if ( (volume_params.isMeshSculpt() && !hasDecomp) &&
|
||||
(scale.mV[0] < SHAPE_BUILDER_USER_MESH_CONVEXIFICATION_SIZE ||
|
||||
scale.mV[1] < SHAPE_BUILDER_USER_MESH_CONVEXIFICATION_SIZE ||
|
||||
scale.mV[2] < SHAPE_BUILDER_USER_MESH_CONVEXIFICATION_SIZE
|
||||
) )
|
||||
// Check overall dimensions, not individual triangles.
|
||||
if (scale.mV[0] < SHAPE_BUILDER_USER_MESH_CONVEXIFICATION_SIZE
|
||||
|| scale.mV[1] < SHAPE_BUILDER_USER_MESH_CONVEXIFICATION_SIZE
|
||||
|| scale.mV[2] < SHAPE_BUILDER_USER_MESH_CONVEXIFICATION_SIZE
|
||||
)
|
||||
{
|
||||
specOut.mType = PhysicsShapeSpecification::PRIM_CONVEX;
|
||||
if (volume_params.hasDecomposition())
|
||||
{
|
||||
specOut.mType = PhysicsShapeSpecification::USER_MESH;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Server distinguishes between user-specified or default convex mesh, vs server's thin-triangle override, but we don't.
|
||||
specOut.mType = PhysicsShapeSpecification::PRIM_CONVEX;
|
||||
}
|
||||
}
|
||||
if (specOut.mType == PhysicsShapeSpecification::INVALID)
|
||||
//</FS:Beq> note: dangling if....(hopefully this will go away with PR sent to LL)
|
||||
specOut.mType = volume_params.isMeshSculpt() ? PhysicsShapeSpecification::USER_MESH : PhysicsShapeSpecification::SCULPT;
|
||||
else
|
||||
{
|
||||
specOut.mType = PhysicsShapeSpecification::USER_MESH;
|
||||
}
|
||||
}
|
||||
else if ( volume_params.isSculpt() )
|
||||
{
|
||||
specOut.mType = PhysicsShapeSpecification::SCULPT;
|
||||
}
|
||||
else // Resort to mesh
|
||||
{
|
||||
|
|
|
|||
|
|
@ -79,6 +79,8 @@ public:
|
|||
|
||||
bool shouldForceConvex() const { return mForceConvex; }
|
||||
|
||||
bool hasDecomposition() const;
|
||||
|
||||
private:
|
||||
bool mForceConvex;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -8539,7 +8539,8 @@ void onCovenantLoadComplete(const LLUUID& asset_uuid,
|
|||
{
|
||||
LL_DEBUGS("Messaging") << "onCovenantLoadComplete()" << LL_ENDL;
|
||||
std::string covenant_text;
|
||||
if(0 == status)
|
||||
std::unique_ptr<LLViewerTextEditor> editorp;
|
||||
if (0 == status)
|
||||
{
|
||||
LLFileSystem file(asset_uuid, type, LLFileSystem::READ);
|
||||
|
||||
|
|
@ -8560,13 +8561,13 @@ void onCovenantLoadComplete(const LLUUID& asset_uuid,
|
|||
{
|
||||
LL_WARNS("Messaging") << "Problem importing estate covenant." << LL_ENDL;
|
||||
covenant_text = "Problem importing estate covenant.";
|
||||
delete editor;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Version 0 (just text, doesn't include version number)
|
||||
covenant_text = editor->getText();
|
||||
editorp.reset(editor); // Use covenant from editorp;
|
||||
}
|
||||
delete editor;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -8592,14 +8593,30 @@ void onCovenantLoadComplete(const LLUUID& asset_uuid,
|
|||
|
||||
LL_WARNS("Messaging") << "Problem loading notecard: " << status << LL_ENDL;
|
||||
}
|
||||
LLPanelEstateCovenant::updateCovenantText(covenant_text, asset_uuid);
|
||||
LLPanelLandCovenant::updateCovenantText(covenant_text);
|
||||
LLFloaterBuyLand::updateCovenantText(covenant_text, asset_uuid);
|
||||
|
||||
LLPanelPlaceProfile* panel = LLFloaterSidePanelContainer::getPanel<LLPanelPlaceProfile>("places", "panel_place_profile");
|
||||
if (panel)
|
||||
if (editorp)
|
||||
{
|
||||
panel->updateCovenantText(covenant_text);
|
||||
LLPanelEstateCovenant::updateCovenant(editorp.get(), asset_uuid);
|
||||
LLPanelLandCovenant::updateCovenant(editorp.get());
|
||||
LLFloaterBuyLand::updateCovenant(editorp.get(), asset_uuid);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLPanelEstateCovenant::updateCovenantText(covenant_text, asset_uuid);
|
||||
LLPanelLandCovenant::updateCovenantText(covenant_text);
|
||||
LLFloaterBuyLand::updateCovenantText(covenant_text, asset_uuid);
|
||||
}
|
||||
|
||||
if (LLPanelPlaceProfile* panel = LLFloaterSidePanelContainer::getPanel<LLPanelPlaceProfile>("places", "panel_place_profile"))
|
||||
{
|
||||
if (editorp)
|
||||
{
|
||||
panel->updateCovenant(editorp.get());
|
||||
}
|
||||
else
|
||||
{
|
||||
panel->updateCovenantText(covenant_text);
|
||||
}
|
||||
}
|
||||
|
||||
// <FS:Ansariel> Standalone location profile floater
|
||||
|
|
@ -8611,7 +8628,6 @@ void onCovenantLoadComplete(const LLUUID& asset_uuid,
|
|||
// </FS:Ansariel>
|
||||
}
|
||||
|
||||
|
||||
void process_feature_disabled_message(LLMessageSystem* msg, void**)
|
||||
{
|
||||
// Handle Blacklisted feature simulator response...
|
||||
|
|
|
|||
|
|
@ -219,6 +219,16 @@ public:
|
|||
mToolTip = inv_item->getName() + '\n' + inv_item->getDescription();
|
||||
}
|
||||
|
||||
/*virtual*/ LLTextSegmentPtr clone(LLTextBase& target) const
|
||||
{
|
||||
LLTextEditor* editor = dynamic_cast<LLTextEditor*>(&target);
|
||||
llassert(editor);
|
||||
if (!editor)
|
||||
return nullptr;
|
||||
|
||||
return new LLEmbeddedItemSegment(mStart, mImage, mItem, *editor);
|
||||
}
|
||||
|
||||
/*virtual*/ bool getDimensionsF32(S32 first_char, S32 num_chars, F32& width, S32& height) const
|
||||
{
|
||||
if (num_chars == 0)
|
||||
|
|
|
|||
Loading…
Reference in New Issue