Merge with viewer-development
commit
ee2cea657a
6
.hgtags
6
.hgtags
|
|
@ -88,8 +88,6 @@ f1827b441e05bf37c68e2c15ebc6d09e9b03f527 2.6.0-start
|
|||
c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-start
|
||||
c5bdef3aaa2744626aef3c217ce29e1900d357b3 DRTVWR-43_2.6.1-beta1
|
||||
c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-beta1
|
||||
9e4641f4a7870c0f565a25a2971368d5a29516a1 DRTVWR-41_2.6.0-beta2
|
||||
9e4641f4a7870c0f565a25a2971368d5a29516a1 2.6.0-beta2
|
||||
c9182ed77d427c759cfacf49a7b71a2e20d522aa DRTVWR-42_2.6.1-release
|
||||
c9182ed77d427c759cfacf49a7b71a2e20d522aa 2.6.1-release
|
||||
56b2778c743c2a964d82e1caf11084d76a87de2c 2.6.2-start
|
||||
|
|
@ -97,8 +95,12 @@ c9182ed77d427c759cfacf49a7b71a2e20d522aa 2.6.1-release
|
|||
42f32494bac475d0737799346f6831558ae8bf5d 2.6.0-release
|
||||
d1203046bb653b763f835b04d184646949d8dd5c DRTVWR-45_2.6.2-beta1
|
||||
d1203046bb653b763f835b04d184646949d8dd5c 2.6.2-beta1
|
||||
214180ad5714ce8392b82bbebcc92f4babd98300 DRTVWR-44_2.6.2-release
|
||||
214180ad5714ce8392b82bbebcc92f4babd98300 2.6.2-release
|
||||
52b2263ab28f0976c689fd0b76c55a9eb027cdbf end-of-develop.py
|
||||
ec32f1045e7c2644015245df3a9933620aa194b8 2.6.3-start
|
||||
d7fcefabdf32bb61a9ea6d6037c1bb26190a85bc DRTVWR-47_2.6.3-beta1
|
||||
d7fcefabdf32bb61a9ea6d6037c1bb26190a85bc 2.6.3-beta1
|
||||
74cd32a06837b0c2cb793b2e8d4d82f5d49462b2 2.6.4-start
|
||||
74cd32a06837b0c2cb793b2e8d4d82f5d49462b2 2.6.4-start
|
||||
f632f87bb71b0f13d21f2f64b0c42cedb008c749 2.6.4-start
|
||||
|
|
|
|||
|
|
@ -157,6 +157,7 @@ LLTextBase::Params::Params()
|
|||
read_only("read_only", false),
|
||||
v_pad("v_pad", 0),
|
||||
h_pad("h_pad", 0),
|
||||
clip("clip", true),
|
||||
clip_partial("clip_partial", true),
|
||||
line_spacing("line_spacing"),
|
||||
max_text_length("max_length", 255),
|
||||
|
|
@ -199,6 +200,7 @@ LLTextBase::LLTextBase(const LLTextBase::Params &p)
|
|||
mVAlign(p.font_valign),
|
||||
mLineSpacingMult(p.line_spacing.multiple),
|
||||
mLineSpacingPixels(p.line_spacing.pixels),
|
||||
mClip(p.clip),
|
||||
mClipPartial(p.clip_partial && !p.allow_scroll),
|
||||
mTrackEnd( p.track_end ),
|
||||
mScrollIndex(-1),
|
||||
|
|
@ -334,7 +336,7 @@ void LLTextBase::drawSelectionBackground()
|
|||
|
||||
// binary search for line that starts before top of visible buffer
|
||||
line_list_t::const_iterator line_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), content_display_rect.mTop, compare_bottom());
|
||||
line_list_t::const_iterator end_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), content_display_rect.mBottom, compare_top());
|
||||
line_list_t::const_iterator end_iter = std::upper_bound(mLineInfoList.begin(), mLineInfoList.end(), content_display_rect.mBottom, compare_top());
|
||||
|
||||
bool done = false;
|
||||
|
||||
|
|
@ -512,7 +514,6 @@ void LLTextBase::drawText()
|
|||
selection_right = llmax( mSelectionStart, mSelectionEnd );
|
||||
}
|
||||
|
||||
LLRect scrolled_view_rect = getVisibleDocumentRect();
|
||||
std::pair<S32, S32> line_range = getVisibleLines(mClipPartial);
|
||||
S32 first_line = line_range.first;
|
||||
S32 last_line = line_range.second;
|
||||
|
|
@ -545,10 +546,10 @@ void LLTextBase::drawText()
|
|||
line_end = next_start;
|
||||
}
|
||||
|
||||
LLRect text_rect(line.mRect.mLeft + mVisibleTextRect.mLeft - scrolled_view_rect.mLeft,
|
||||
line.mRect.mTop - scrolled_view_rect.mBottom + mVisibleTextRect.mBottom,
|
||||
llmin(mDocumentView->getRect().getWidth(), line.mRect.mRight) - scrolled_view_rect.mLeft,
|
||||
line.mRect.mBottom - scrolled_view_rect.mBottom + mVisibleTextRect.mBottom);
|
||||
LLRect text_rect(line.mRect);
|
||||
text_rect.mRight = llmin(mDocumentView->getRect().getWidth(), text_rect.mRight); // clamp right edge to document extents
|
||||
text_rect.translate(mVisibleTextRect.mLeft, mVisibleTextRect.mBottom); // translate into display region of text widget
|
||||
text_rect.translate(mDocumentView->getRect().mLeft, mDocumentView->getRect().mBottom); // adjust by scroll position
|
||||
|
||||
// draw a single line of text
|
||||
S32 seg_start = line_start;
|
||||
|
|
@ -993,14 +994,28 @@ void LLTextBase::draw()
|
|||
updateScrollFromCursor();
|
||||
}
|
||||
|
||||
LLRect doc_rect;
|
||||
LLRect text_rect;
|
||||
if (mScroller)
|
||||
{
|
||||
mScroller->localRectToOtherView(mScroller->getContentWindowRect(), &doc_rect, this);
|
||||
mScroller->localRectToOtherView(mScroller->getContentWindowRect(), &text_rect, this);
|
||||
}
|
||||
else
|
||||
{
|
||||
doc_rect = getLocalRect();
|
||||
LLRect visible_lines_rect;
|
||||
std::pair<S32, S32> line_range = getVisibleLines(mClipPartial);
|
||||
for (S32 i = line_range.first; i < line_range.second; i++)
|
||||
{
|
||||
if (visible_lines_rect.isEmpty())
|
||||
{
|
||||
visible_lines_rect = mLineInfoList[i].mRect;
|
||||
}
|
||||
else
|
||||
{
|
||||
visible_lines_rect.unionWith(mLineInfoList[i].mRect);
|
||||
}
|
||||
}
|
||||
text_rect = visible_lines_rect;
|
||||
text_rect.translate(mDocumentView->getRect().mLeft, mDocumentView->getRect().mBottom);
|
||||
}
|
||||
|
||||
if (mBGVisible)
|
||||
|
|
@ -1010,28 +1025,37 @@ void LLTextBase::draw()
|
|||
LLRect bg_rect = mVisibleTextRect;
|
||||
if (mScroller)
|
||||
{
|
||||
bg_rect.intersectWith(doc_rect);
|
||||
bg_rect.intersectWith(text_rect);
|
||||
}
|
||||
LLColor4 bg_color = mReadOnly
|
||||
? mReadOnlyBgColor.get()
|
||||
: hasFocus()
|
||||
? mFocusBgColor.get()
|
||||
: mWriteableBgColor.get();
|
||||
gl_rect_2d(doc_rect, bg_color % alpha, TRUE);
|
||||
gl_rect_2d(text_rect, bg_color % alpha, TRUE);
|
||||
}
|
||||
|
||||
// draw document view
|
||||
LLUICtrl::draw();
|
||||
|
||||
{
|
||||
// only clip if we support scrolling...
|
||||
// since convention is that text boxes never vertically truncate their contents
|
||||
// regardless of rect bounds
|
||||
LLLocalClipRect clip(doc_rect, mScroller != NULL);
|
||||
bool should_clip = mClip || mScroller != NULL;
|
||||
{ LLLocalClipRect clip(text_rect, should_clip);
|
||||
|
||||
// draw document view
|
||||
if (mScroller)
|
||||
{
|
||||
drawChild(mScroller);
|
||||
}
|
||||
else
|
||||
{
|
||||
drawChild(mDocumentView);
|
||||
}
|
||||
|
||||
drawSelectionBackground();
|
||||
drawText();
|
||||
drawCursor();
|
||||
}
|
||||
|
||||
mDocumentView->setVisible(FALSE);
|
||||
LLUICtrl::draw();
|
||||
mDocumentView->setVisible(TRUE);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1415,7 +1439,7 @@ S32 LLTextBase::getFirstVisibleLine() const
|
|||
return iter - mLineInfoList.begin();
|
||||
}
|
||||
|
||||
std::pair<S32, S32> LLTextBase::getVisibleLines(bool fully_visible)
|
||||
std::pair<S32, S32> LLTextBase::getVisibleLines(bool require_fully_visible)
|
||||
{
|
||||
LLRect visible_region = getVisibleDocumentRect();
|
||||
line_list_t::const_iterator first_iter;
|
||||
|
|
@ -1424,14 +1448,14 @@ std::pair<S32, S32> LLTextBase::getVisibleLines(bool fully_visible)
|
|||
// make sure we have an up-to-date mLineInfoList
|
||||
reflow();
|
||||
|
||||
if (fully_visible)
|
||||
if (require_fully_visible)
|
||||
{
|
||||
first_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), visible_region.mTop, compare_top());
|
||||
last_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), visible_region.mBottom, compare_bottom());
|
||||
last_iter = std::upper_bound(mLineInfoList.begin(), mLineInfoList.end(), visible_region.mBottom, compare_bottom());
|
||||
}
|
||||
else
|
||||
{
|
||||
first_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), visible_region.mTop, compare_bottom());
|
||||
first_iter = std::upper_bound(mLineInfoList.begin(), mLineInfoList.end(), visible_region.mTop, compare_bottom());
|
||||
last_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), visible_region.mBottom, compare_top());
|
||||
}
|
||||
return std::pair<S32, S32>(first_iter - mLineInfoList.begin(), last_iter - mLineInfoList.begin());
|
||||
|
|
@ -2405,14 +2429,41 @@ LLRect LLTextBase::getVisibleDocumentRect() const
|
|||
{
|
||||
return mScroller->getVisibleContentRect();
|
||||
}
|
||||
else
|
||||
else if (mClip)
|
||||
{
|
||||
// entire document rect is visible when not scrolling
|
||||
LLRect visible_text_rect = getVisibleTextRect();
|
||||
LLRect doc_rect = mDocumentView->getRect();
|
||||
visible_text_rect.translate(-doc_rect.mLeft, -doc_rect.mBottom);
|
||||
|
||||
// reject partially visible lines
|
||||
LLRect visible_lines_rect;
|
||||
for (line_list_t::const_iterator it = mLineInfoList.begin(), end_it = mLineInfoList.end();
|
||||
it != end_it;
|
||||
++it)
|
||||
{
|
||||
bool line_visible = mClipPartial ? visible_text_rect.contains(it->mRect) : visible_text_rect.overlaps(it->mRect);
|
||||
if (line_visible)
|
||||
{
|
||||
if (visible_lines_rect.isEmpty())
|
||||
{
|
||||
visible_lines_rect = it->mRect;
|
||||
}
|
||||
else
|
||||
{
|
||||
visible_lines_rect.unionWith(it->mRect);
|
||||
}
|
||||
}
|
||||
}
|
||||
return visible_lines_rect;
|
||||
}
|
||||
else
|
||||
{ // entire document rect is visible
|
||||
// but offset according to height of widget
|
||||
|
||||
LLRect doc_rect = mDocumentView->getLocalRect();
|
||||
doc_rect.mLeft -= mDocumentView->getRect().mLeft;
|
||||
// adjust for height of text above widget baseline
|
||||
doc_rect.mBottom = doc_rect.getHeight() - mVisibleTextRect.getHeight();
|
||||
doc_rect.mBottom = llmin(0, doc_rect.getHeight() - mVisibleTextRect.getHeight());
|
||||
return doc_rect;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -265,6 +265,7 @@ public:
|
|||
use_ellipses,
|
||||
parse_urls,
|
||||
parse_highlights,
|
||||
clip,
|
||||
clip_partial;
|
||||
|
||||
Optional<S32> v_pad,
|
||||
|
|
@ -338,7 +339,7 @@ public:
|
|||
void addDocumentChild(LLView* view);
|
||||
void removeDocumentChild(LLView* view);
|
||||
const LLView* getDocumentView() const { return mDocumentView; }
|
||||
LLRect getVisibleTextRect() { return mVisibleTextRect; }
|
||||
LLRect getVisibleTextRect() const { return mVisibleTextRect; }
|
||||
LLRect getTextBoundingRect();
|
||||
LLRect getVisibleDocumentRect() const;
|
||||
|
||||
|
|
@ -552,6 +553,7 @@ protected:
|
|||
bool mTrackEnd; // if true, keeps scroll position at end of document during resize
|
||||
bool mReadOnly;
|
||||
bool mBGVisible; // render background?
|
||||
bool mClip; // clip text to widget rect
|
||||
bool mClipPartial; // false if we show lines that are partially inside bounding rect
|
||||
bool mPlainText; // didn't use Image or Icon segments
|
||||
S32 mMaxTextByteLength; // Maximum length mText is allowed to be in bytes
|
||||
|
|
|
|||
|
|
@ -4339,8 +4339,8 @@
|
|||
wearable="shape"
|
||||
edit_group="driven"
|
||||
value_default="0"
|
||||
value_min="-2"
|
||||
value_max="2">
|
||||
value_min="-3"
|
||||
value_max="3">
|
||||
<param_morph />
|
||||
</param>
|
||||
|
||||
|
|
@ -4352,8 +4352,8 @@
|
|||
wearable="shape"
|
||||
edit_group="driven"
|
||||
value_default="0"
|
||||
value_min="-1"
|
||||
value_max="1">
|
||||
value_min="-1.5"
|
||||
value_max="1.5">
|
||||
<param_morph />
|
||||
</param>
|
||||
|
||||
|
|
@ -11916,7 +11916,7 @@ render_pass="bump">
|
|||
edit_group="physics_breasts_updown"
|
||||
value_default=".1"
|
||||
value_min="0"
|
||||
value_max="1">
|
||||
value_max="3">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
|
|
@ -11971,7 +11971,7 @@ render_pass="bump">
|
|||
edit_group="physics_breasts_inout"
|
||||
value_default=".1"
|
||||
value_min="0"
|
||||
value_max="1">
|
||||
value_max="3">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
|
|
@ -12058,7 +12058,7 @@ render_pass="bump">
|
|||
edit_group="physics_belly_updown"
|
||||
value_default=".1"
|
||||
value_min="0"
|
||||
value_max="1">
|
||||
value_max="3">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
|
|
@ -12144,7 +12144,7 @@ render_pass="bump">
|
|||
edit_group="physics_butt_updown"
|
||||
value_default=".1"
|
||||
value_min="0"
|
||||
value_max="1">
|
||||
value_max="3">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
|
|
@ -12193,7 +12193,7 @@ render_pass="bump">
|
|||
edit_group="physics_butt_leftright"
|
||||
value_default=".1"
|
||||
value_min="0"
|
||||
value_max="1">
|
||||
value_max="3">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
|
|
@ -12244,7 +12244,7 @@ render_pass="bump">
|
|||
edit_group="physics_breasts_leftright"
|
||||
value_default=".1"
|
||||
value_min="0"
|
||||
value_max="1">
|
||||
value_max="3">
|
||||
<param_driver />
|
||||
</param>
|
||||
<param
|
||||
|
|
|
|||
|
|
@ -2468,6 +2468,14 @@ bool LLAppViewer::initConfiguration()
|
|||
}
|
||||
}
|
||||
|
||||
// If automatic login from command line with --login switch
|
||||
// init StartSLURL location. In interactive login, LLPanelLogin
|
||||
// will take care of it.
|
||||
if ((clp.hasOption("login") || clp.hasOption("autologin")) && !clp.hasOption("url") && !clp.hasOption("slurl"))
|
||||
{
|
||||
LLStartUp::setStartSLURL(LLSLURL(gSavedSettings.getString("LoginLocation")));
|
||||
}
|
||||
|
||||
if (!gSavedSettings.getBOOL("AllowMultipleViewers"))
|
||||
{
|
||||
//
|
||||
|
|
|
|||
|
|
@ -1059,12 +1059,11 @@ void LLInventoryModel::idleNotifyObservers()
|
|||
{
|
||||
return;
|
||||
}
|
||||
notifyObservers("");
|
||||
notifyObservers();
|
||||
}
|
||||
|
||||
// Call this method when it's time to update everyone on a new state.
|
||||
// The optional argument 'service_name' is used by Agent Inventory Service [DEV-20328]
|
||||
void LLInventoryModel::notifyObservers(const std::string service_name)
|
||||
void LLInventoryModel::notifyObservers()
|
||||
{
|
||||
if (mIsNotifyObservers)
|
||||
{
|
||||
|
|
@ -1081,15 +1080,7 @@ void LLInventoryModel::notifyObservers(const std::string service_name)
|
|||
{
|
||||
LLInventoryObserver* observer = *iter;
|
||||
|
||||
if (service_name.empty())
|
||||
{
|
||||
observer->changed(mModifyMask);
|
||||
}
|
||||
else
|
||||
{
|
||||
observer->mMessageName = service_name;
|
||||
observer->changed(mModifyMask);
|
||||
}
|
||||
observer->changed(mModifyMask);
|
||||
|
||||
// safe way to increment since changed may delete entries! (@!##%@!@&*!)
|
||||
iter = mObservers.upper_bound(observer);
|
||||
|
|
@ -1187,7 +1178,7 @@ void LLInventoryModel::fetchInventoryResponder::result(const LLSD& content)
|
|||
{
|
||||
changes |= gInventory.updateItem(*it);
|
||||
}
|
||||
gInventory.notifyObservers("fetchinventory");
|
||||
gInventory.notifyObservers();
|
||||
gViewerWindow->getWindow()->decBusyCount();
|
||||
}
|
||||
|
||||
|
|
@ -1196,7 +1187,7 @@ void LLInventoryModel::fetchInventoryResponder::error(U32 status, const std::str
|
|||
{
|
||||
llinfos << "fetchInventory::error "
|
||||
<< status << ": " << reason << llendl;
|
||||
gInventory.notifyObservers("fetchinventory");
|
||||
gInventory.notifyObservers();
|
||||
}
|
||||
|
||||
bool LLInventoryModel::fetchDescendentsOf(const LLUUID& folder_id) const
|
||||
|
|
|
|||
|
|
@ -425,9 +425,8 @@ public:
|
|||
// has been indicated.
|
||||
void idleNotifyObservers();
|
||||
|
||||
// Call to explicitly update everyone on a new state. The optional argument
|
||||
// 'service_name' is used by Agent Inventory Service [DEV-20328]
|
||||
void notifyObservers(const std::string service_name="");
|
||||
// Call to explicitly update everyone on a new state.
|
||||
void notifyObservers();
|
||||
|
||||
// Allows outsiders to tell the inventory if something has
|
||||
// been changed 'under the hood', but outside the control of the
|
||||
|
|
|
|||
|
|
@ -388,7 +388,7 @@ void LLInventoryModelFetchDescendentsResponder::result(const LLSD& content)
|
|||
titem->setParent(lost_uuid);
|
||||
titem->updateParentOnServer(FALSE);
|
||||
gInventory.updateItem(titem);
|
||||
gInventory.notifyObservers("fetchDescendents");
|
||||
gInventory.notifyObservers();
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -464,7 +464,7 @@ void LLInventoryModelFetchDescendentsResponder::result(const LLSD& content)
|
|||
fetcher->setAllFoldersFetched();
|
||||
}
|
||||
|
||||
gInventory.notifyObservers("fetchDescendents");
|
||||
gInventory.notifyObservers();
|
||||
}
|
||||
|
||||
// If we get back an error (not found, etc...), handle it here.
|
||||
|
|
@ -496,7 +496,7 @@ void LLInventoryModelFetchDescendentsResponder::error(U32 status, const std::str
|
|||
fetcher->setAllFoldersFetched();
|
||||
}
|
||||
}
|
||||
gInventory.notifyObservers("fetchDescendents");
|
||||
gInventory.notifyObservers();
|
||||
}
|
||||
|
||||
BOOL LLInventoryModelFetchDescendentsResponder::getIsRecursive(const LLUUID& cat_id) const
|
||||
|
|
|
|||
|
|
@ -572,16 +572,7 @@ void LLInventoryAddedObserver::changed(U32 mask)
|
|||
// the network, figure out which item was updated.
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
|
||||
std::string msg_name;
|
||||
if (mMessageName.empty())
|
||||
{
|
||||
msg_name = msg->getMessageName();
|
||||
}
|
||||
else
|
||||
{
|
||||
msg_name = mMessageName;
|
||||
}
|
||||
|
||||
std::string msg_name = msg->getMessageName();
|
||||
if (msg_name.empty())
|
||||
{
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -63,7 +63,6 @@ public:
|
|||
LLInventoryObserver();
|
||||
virtual ~LLInventoryObserver();
|
||||
virtual void changed(U32 mask) = 0;
|
||||
std::string mMessageName; // used by Agent Inventory Service only. [DEV-20328]
|
||||
};
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
|
|
|||
|
|
@ -121,7 +121,8 @@ protected:
|
|||
return mCharacter->getVisualParamWeight(param_name.c_str());
|
||||
}
|
||||
void setParamValue(LLViewerVisualParam *param,
|
||||
const F32 new_value_local);
|
||||
const F32 new_value_local,
|
||||
F32 behavior_maxeffect);
|
||||
|
||||
F32 toLocal(const LLVector3 &world);
|
||||
F32 calculateVelocity_local(const F32 time_delta);
|
||||
|
|
@ -472,9 +473,6 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)
|
|||
F32 behavior_maxeffect = getParamValue("MaxEffect");
|
||||
if (physics_test)
|
||||
behavior_maxeffect = 1.0f;
|
||||
// Maximum effect is [0,1] range.
|
||||
const F32 min_val = 0.5f-behavior_maxeffect/2.0;
|
||||
const F32 max_val = 0.5f+behavior_maxeffect/2.0;
|
||||
|
||||
// mPositon_local should be in normalized 0,1 range already. Just making sure...
|
||||
F32 position_current_local = llclamp(mPosition_local,
|
||||
|
|
@ -572,12 +570,12 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)
|
|||
position_new_local = position_user_local;
|
||||
|
||||
// Zero out the velocity if the param is being pushed beyond its limits.
|
||||
if ((position_new_local < min_val && velocity_new_local < 0) ||
|
||||
(position_new_local > max_val && velocity_new_local > 0))
|
||||
if ((position_new_local < 0 && velocity_new_local < 0) ||
|
||||
(position_new_local > 1 && velocity_new_local > 0))
|
||||
{
|
||||
velocity_new_local = 0;
|
||||
}
|
||||
|
||||
|
||||
// Check for NaN values. A NaN value is detected if the variables doesn't equal itself.
|
||||
// If NaN, then reset everything.
|
||||
if ((mPosition_local != mPosition_local) ||
|
||||
|
|
@ -595,8 +593,8 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)
|
|||
}
|
||||
|
||||
const F32 position_new_local_clamped = llclamp(position_new_local,
|
||||
min_val,
|
||||
max_val);
|
||||
0.0f,
|
||||
1.0f);
|
||||
|
||||
LLDriverParam *driver_param = dynamic_cast<LLDriverParam *>(mParamDriver);
|
||||
llassert_always(driver_param);
|
||||
|
|
@ -617,7 +615,7 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)
|
|||
{
|
||||
LLDrivenEntry &entry = (*iter);
|
||||
LLViewerVisualParam *driven_param = entry.mParam;
|
||||
setParamValue(driven_param,position_new_local_clamped);
|
||||
setParamValue(driven_param,position_new_local_clamped, behavior_maxeffect);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -699,12 +697,19 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)
|
|||
|
||||
// Range of new_value_local is assumed to be [0 , 1] normalized.
|
||||
void LLPhysicsMotion::setParamValue(LLViewerVisualParam *param,
|
||||
F32 new_value_normalized)
|
||||
F32 new_value_normalized,
|
||||
F32 behavior_maxeffect)
|
||||
{
|
||||
const F32 value_min_local = param->getMinWeight();
|
||||
const F32 value_max_local = param->getMaxWeight();
|
||||
const F32 min_val = 0.5f-behavior_maxeffect/2.0;
|
||||
const F32 max_val = 0.5f+behavior_maxeffect/2.0;
|
||||
|
||||
const F32 new_value_local = value_min_local + (value_max_local-value_min_local) * new_value_normalized;
|
||||
// Scale from [0,1] to [min_val,max_val]
|
||||
const F32 new_value_rescaled = min_val + (max_val-min_val) * new_value_normalized;
|
||||
|
||||
// Scale from [0,1] to [value_min_local,value_max_local]
|
||||
const F32 new_value_local = value_min_local + (value_max_local-value_min_local) * new_value_rescaled;
|
||||
|
||||
mCharacter->setVisualParamWeight(param,
|
||||
new_value_local,
|
||||
|
|
|
|||
|
|
@ -310,7 +310,7 @@ void LLIMWellWindow::RowPanel::onChicletSizeChanged(LLChiclet* ctrl, const LLSD&
|
|||
S32 new_text_left = mChiclet->getRect().mRight + CHICLET_HPAD;
|
||||
LLRect text_rect = text->getRect();
|
||||
text_rect.mLeft = new_text_left;
|
||||
text->setRect(text_rect);
|
||||
text->setShape(text_rect);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -144,7 +144,7 @@ BOOL LLWearableType::getDisableCameraSwitch(LLWearableType::EType type)
|
|||
{
|
||||
const LLWearableDictionary *dict = LLWearableDictionary::getInstance();
|
||||
const WearableEntry *entry = dict->lookup(type);
|
||||
if (!entry) return FALSE;
|
||||
if (!entry) return FALSE;
|
||||
return entry->mDisableCameraSwitch;
|
||||
}
|
||||
|
||||
|
|
@ -153,7 +153,7 @@ BOOL LLWearableType::getAllowMultiwear(LLWearableType::EType type)
|
|||
{
|
||||
const LLWearableDictionary *dict = LLWearableDictionary::getInstance();
|
||||
const WearableEntry *entry = dict->lookup(type);
|
||||
if (!entry) return FALSE;
|
||||
if (!entry) return FALSE;
|
||||
return entry->mAllowMultiwear;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* $LicenseInfo:firstyear=2008&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
* Copyright (C) 2011, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
|
|
@ -2233,7 +2233,13 @@ void LLMediaPluginTest::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent e
|
|||
case MEDIA_EVENT_LINK_HOVERED:
|
||||
{
|
||||
std::cerr << "Media event: MEDIA_EVENT_LINK_HOVERED, hover text is: " << self->getHoverText() << std::endl;
|
||||
};
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
{
|
||||
std::cerr << "Media event: <unknown>, code is: " << int(event) << std::endl;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue