Automated merge with ssh://hg.lindenlab.com/richard/viewer-experience
commit
f4a122b6d7
|
|
@ -1192,7 +1192,10 @@ void LLTextBase::reflow()
|
|||
|
||||
// shrink document to minimum size (visible portion of text widget)
|
||||
// to force inlined widgets with follows set to shrink
|
||||
//mDocumentView->reshape(mVisibleTextRect.getWidth(), mDocumentView->getRect().getHeight());
|
||||
if (mWordWrap)
|
||||
{
|
||||
mDocumentView->reshape(mVisibleTextRect.getWidth(), mDocumentView->getRect().getHeight());
|
||||
}
|
||||
|
||||
S32 cur_top = 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -192,6 +192,21 @@ BOOL LLWindow::setSize(LLCoordScreen size)
|
|||
return setSizeImpl(size);
|
||||
}
|
||||
|
||||
BOOL LLWindow::setSize(LLCoordWindow size)
|
||||
{
|
||||
//HACK: we are inconsistently using minimum window dimensions
|
||||
// in this case, we are constraining the inner "client" rect and other times
|
||||
// we constrain the outer "window" rect
|
||||
// There doesn't seem to be a good way to do this consistently without a bunch of platform
|
||||
// specific code
|
||||
if (!getMaximized())
|
||||
{
|
||||
size.mX = llmax(size.mX, mMinWindowWidth);
|
||||
size.mY = llmax(size.mY, mMinWindowHeight);
|
||||
}
|
||||
return setSizeImpl(size);
|
||||
}
|
||||
|
||||
|
||||
// virtual
|
||||
void LLWindow::setMinSize(U32 min_width, U32 min_height, bool enforce_immediately)
|
||||
|
|
|
|||
|
|
@ -73,6 +73,7 @@ public:
|
|||
virtual BOOL getSize(LLCoordWindow *size) = 0;
|
||||
virtual BOOL setPosition(LLCoordScreen position) = 0;
|
||||
BOOL setSize(LLCoordScreen size);
|
||||
BOOL setSize(LLCoordWindow size);
|
||||
virtual void setMinSize(U32 min_width, U32 min_height, bool enforce_immediately = true);
|
||||
virtual BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL) = 0;
|
||||
virtual BOOL setCursorPosition(LLCoordWindow position) = 0;
|
||||
|
|
@ -172,6 +173,7 @@ protected:
|
|||
virtual BOOL canDelete();
|
||||
|
||||
virtual BOOL setSizeImpl(LLCoordScreen size) = 0;
|
||||
virtual BOOL setSizeImpl(LLCoordWindow size) = 0;
|
||||
|
||||
protected:
|
||||
LLWindowCallbacks* mCallbacks;
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ public:
|
|||
/*virtual*/ BOOL getSize(LLCoordWindow *size) {return FALSE;};
|
||||
/*virtual*/ BOOL setPosition(LLCoordScreen position) {return FALSE;};
|
||||
/*virtual*/ BOOL setSizeImpl(LLCoordScreen size) {return FALSE;};
|
||||
/*virtual*/ BOOL setSizeImpl(LLCoordWindow size) {return FALSE;};
|
||||
/*virtual*/ BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL) {return FALSE;};
|
||||
/*virtual*/ BOOL setCursorPosition(LLCoordWindow position) {return FALSE;};
|
||||
/*virtual*/ BOOL getCursorPosition(LLCoordWindow *position) {return FALSE;};
|
||||
|
|
|
|||
|
|
@ -1266,6 +1266,19 @@ BOOL LLWindowMacOSX::setSizeImpl(const LLCoordScreen size)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL LLWindowMacOSX::setSizeImpl(const LLCoordWindow size)
|
||||
{
|
||||
Rect client_rect;
|
||||
if (mWindow && GetWindowBounds(mWindow, kWindowContentRgn, &client_rect) != noErr)
|
||||
{
|
||||
client_rect.right = client_rect.left + size.mX;
|
||||
client_rect.bottom = client_rect.top + size.mY;
|
||||
OSStatus err = SetWindowBounds(mWindow, kWindowContentRgn, &client_rect);
|
||||
return err == noErr;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void LLWindowMacOSX::swapBuffers()
|
||||
{
|
||||
aglSwapBuffers(mContext);
|
||||
|
|
|
|||
|
|
@ -59,6 +59,7 @@ public:
|
|||
/*virtual*/ BOOL getSize(LLCoordWindow *size);
|
||||
/*virtual*/ BOOL setPosition(LLCoordScreen position);
|
||||
/*virtual*/ BOOL setSizeImpl(LLCoordScreen size);
|
||||
/*virtual*/ BOOL setSizeImpl(LLCoordWindow size);
|
||||
/*virtual*/ BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL);
|
||||
/*virtual*/ BOOL setCursorPosition(LLCoordWindow position);
|
||||
/*virtual*/ BOOL getCursorPosition(LLCoordWindow *position);
|
||||
|
|
|
|||
|
|
@ -981,6 +981,25 @@ BOOL LLWindowSDL::setSizeImpl(const LLCoordScreen size)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL LLWindowSDL::setSizeImpl(const LLCoordWindow size)
|
||||
{
|
||||
if(mWindow)
|
||||
{
|
||||
// Push a resize event onto SDL's queue - we'll handle it
|
||||
// when it comes out again.
|
||||
SDL_Event event;
|
||||
event.type = SDL_VIDEORESIZE;
|
||||
event.resize.w = size.mX;
|
||||
event.resize.h = size.mY;
|
||||
SDL_PushEvent(&event); // copied into queue
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
void LLWindowSDL::swapBuffers()
|
||||
{
|
||||
if (mWindow)
|
||||
|
|
|
|||
|
|
@ -64,6 +64,7 @@ public:
|
|||
/*virtual*/ BOOL getSize(LLCoordWindow *size);
|
||||
/*virtual*/ BOOL setPosition(LLCoordScreen position);
|
||||
/*virtual*/ BOOL setSizeImpl(LLCoordScreen size);
|
||||
/*virtual*/ BOOL setSizeImpl(LLCoordWindow size);
|
||||
/*virtual*/ BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL);
|
||||
/*virtual*/ BOOL setCursorPosition(LLCoordWindow position);
|
||||
/*virtual*/ BOOL getCursorPosition(LLCoordWindow *position);
|
||||
|
|
|
|||
|
|
@ -876,6 +876,17 @@ BOOL LLWindowWin32::setSizeImpl(const LLCoordScreen size)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL LLWindowWin32::setSizeImpl(const LLCoordWindow size)
|
||||
{
|
||||
RECT window_rect = {0, 0, size.mX, size.mY };
|
||||
DWORD dw_ex_style = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
|
||||
DWORD dw_style = WS_OVERLAPPEDWINDOW;
|
||||
|
||||
AdjustWindowRectEx(&window_rect, dw_style, FALSE, dw_ex_style);
|
||||
|
||||
return setSizeImpl(LLCoordScreen(window_rect.right - window_rect.left, window_rect.bottom - window_rect.top));
|
||||
}
|
||||
|
||||
// changing fullscreen resolution
|
||||
BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -58,6 +58,7 @@ public:
|
|||
/*virtual*/ BOOL getSize(LLCoordWindow *size);
|
||||
/*virtual*/ BOOL setPosition(LLCoordScreen position);
|
||||
/*virtual*/ BOOL setSizeImpl(LLCoordScreen size);
|
||||
/*virtual*/ BOOL setSizeImpl(LLCoordWindow size);
|
||||
/*virtual*/ BOOL switchContext(BOOL fullscreen, const LLCoordScreen &size, BOOL disable_vsync, const LLCoordScreen * const posp = NULL);
|
||||
/*virtual*/ BOOL setCursorPosition(LLCoordWindow position);
|
||||
/*virtual*/ BOOL getCursorPosition(LLCoordWindow *position);
|
||||
|
|
|
|||
|
|
@ -621,6 +621,28 @@
|
|||
<key>Value</key>
|
||||
<string>http://lecs-viewer-web-components.s3.amazonaws.com/v3.0/[GRID_LOWERCASE]/avatars.html</string>
|
||||
</map>
|
||||
<key>AvatarRotateThresholdSlow</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Angle between avatar facing and camera facing at which avatar turns to face same direction as camera, when moving slowly (degrees)</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<integer>60</integer>
|
||||
</map>
|
||||
<key>AvatarRotateThresholdFast</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Angle between avatar facing and camera facing at which avatar turns to face same direction as camera, when moving fast (degrees)</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<integer>2</integer>
|
||||
</map>
|
||||
<key>AvatarBakedTextureUploadTimeout</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -113,6 +113,13 @@ bool move_task_inventory_callback(const LLSD& notification, const LLSD& response
|
|||
bool confirm_attachment_rez(const LLSD& notification, const LLSD& response);
|
||||
void teleport_via_landmark(const LLUUID& asset_id);
|
||||
static BOOL can_move_to_outfit(LLInventoryItem* inv_item, BOOL move_is_into_current_outfit);
|
||||
static bool check_category(LLInventoryModel* model,
|
||||
const LLUUID& cat_id,
|
||||
LLFolderView* active_folder_view,
|
||||
LLInventoryFilter* filter);
|
||||
static bool check_item(const LLUUID& item_id,
|
||||
LLFolderView* active_folder_view,
|
||||
LLInventoryFilter* filter);
|
||||
|
||||
// Helper functions
|
||||
|
||||
|
|
@ -1960,6 +1967,12 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
|
|||
if (!isAgentAvatarValid()) return FALSE;
|
||||
if (!isAgentInventory()) return FALSE; // cannot drag categories into library
|
||||
|
||||
LLInventoryPanel* destination_panel = mInventoryPanel.get();
|
||||
if (!destination_panel) return false;
|
||||
|
||||
LLInventoryFilter* filter = destination_panel->getFilter();
|
||||
if (!filter) return false;
|
||||
|
||||
const LLUUID &cat_id = inv_cat->getUUID();
|
||||
const LLUUID ¤t_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false);
|
||||
const LLUUID &outbox_id = model->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false);
|
||||
|
|
@ -2147,6 +2160,39 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
|
|||
}
|
||||
}
|
||||
|
||||
if (is_movable)
|
||||
{
|
||||
LLInventoryPanel* active_panel = LLInventoryPanel::getActiveInventoryPanel(FALSE);
|
||||
is_movable = active_panel != NULL;
|
||||
|
||||
// For a folder to pass the filter all its descendants are required to pass.
|
||||
// We make this exception to allow reordering folders within an inventory panel,
|
||||
// which has a filter applied, like Recent tab for example.
|
||||
// There may be folders which are displayed because some of their descendants pass
|
||||
// the filter, but other don't, and thus remain hidden. Without this check,
|
||||
// such folders would not be allowed to be moved within a panel.
|
||||
if (destination_panel == active_panel)
|
||||
{
|
||||
is_movable = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
LLFolderView* active_folder_view = NULL;
|
||||
|
||||
if (is_movable)
|
||||
{
|
||||
active_folder_view = active_panel->getRootFolder();
|
||||
is_movable = active_folder_view != NULL;
|
||||
}
|
||||
|
||||
if (is_movable)
|
||||
{
|
||||
// Check whether the folder being dragged from active inventory panel
|
||||
// passes the filter of the destination panel.
|
||||
is_movable = check_category(model, cat_id, active_folder_view, filter);
|
||||
}
|
||||
}
|
||||
}
|
||||
//
|
||||
//--------------------------------------------------------------------------------
|
||||
|
||||
|
|
@ -2241,7 +2287,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
|
|||
}
|
||||
else
|
||||
{
|
||||
accept = move_inv_category_world_to_agent(cat_id, mUUID, drop);
|
||||
accept = move_inv_category_world_to_agent(cat_id, mUUID, drop, NULL, NULL, filter);
|
||||
}
|
||||
}
|
||||
else if (LLToolDragAndDrop::SOURCE_LIBRARY == source)
|
||||
|
|
@ -2286,7 +2332,8 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id,
|
|||
const LLUUID& category_id,
|
||||
BOOL drop,
|
||||
void (*callback)(S32, void*),
|
||||
void* user_data)
|
||||
void* user_data,
|
||||
LLInventoryFilter* filter)
|
||||
{
|
||||
// Make sure the object exists. If we allowed dragging from
|
||||
// anonymous objects, it would be possible to bypass
|
||||
|
|
@ -2310,7 +2357,7 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL accept = TRUE;
|
||||
BOOL accept = FALSE;
|
||||
BOOL is_move = FALSE;
|
||||
|
||||
// coming from a task. Need to figure out if the person can
|
||||
|
|
@ -2319,9 +2366,16 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id,
|
|||
LLInventoryObject::object_list_t::iterator end = inventory_objects.end();
|
||||
for ( ; it != end; ++it)
|
||||
{
|
||||
LLInventoryItem* item = dynamic_cast<LLInventoryItem*>(it->get());
|
||||
if (!item)
|
||||
{
|
||||
llwarns << "Invalid inventory item for drop" << llendl;
|
||||
continue;
|
||||
}
|
||||
|
||||
// coming from a task. Need to figure out if the person can
|
||||
// move/copy this item.
|
||||
LLPermissions perm(((LLInventoryItem*)((LLInventoryObject*)(*it)))->getPermissions());
|
||||
LLPermissions perm(item->getPermissions());
|
||||
if((perm.allowCopyBy(gAgent.getID(), gAgent.getGroupID())
|
||||
&& perm.allowTransferTo(gAgent.getID())))
|
||||
// || gAgent.isGodlike())
|
||||
|
|
@ -2336,9 +2390,14 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id,
|
|||
is_move = TRUE;
|
||||
accept = TRUE;
|
||||
}
|
||||
else
|
||||
|
||||
if (filter && accept)
|
||||
{
|
||||
accept = filter->check(item);
|
||||
}
|
||||
|
||||
if (!accept)
|
||||
{
|
||||
accept = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -3694,10 +3753,10 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
|
|||
// passes the filter of the destination panel.
|
||||
if (accept && active_panel)
|
||||
{
|
||||
LLFolderView* active_folder_viev = active_panel->getRootFolder();
|
||||
if (!active_folder_viev) return false;
|
||||
LLFolderView* active_folder_view = active_panel->getRootFolder();
|
||||
if (!active_folder_view) return false;
|
||||
|
||||
LLFolderViewItem* fv_item = active_folder_viev->getItemByID(inv_item->getUUID());
|
||||
LLFolderViewItem* fv_item = active_folder_view->getItemByID(inv_item->getUUID());
|
||||
if (!fv_item) return false;
|
||||
|
||||
accept = filter->check(fv_item);
|
||||
|
|
@ -3917,10 +3976,10 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
|
|||
// passes the filter of the destination panel.
|
||||
if (accept && active_panel)
|
||||
{
|
||||
LLFolderView* active_folder_viev = active_panel->getRootFolder();
|
||||
if (!active_folder_viev) return false;
|
||||
LLFolderView* active_folder_view = active_panel->getRootFolder();
|
||||
if (!active_folder_view) return false;
|
||||
|
||||
LLFolderViewItem* fv_item = active_folder_viev->getItemByID(inv_item->getUUID());
|
||||
LLFolderViewItem* fv_item = active_folder_view->getItemByID(inv_item->getUUID());
|
||||
if (!fv_item) return false;
|
||||
|
||||
accept = filter->check(fv_item);
|
||||
|
|
@ -3960,6 +4019,69 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
|
|||
return accept;
|
||||
}
|
||||
|
||||
// static
|
||||
bool check_category(LLInventoryModel* model,
|
||||
const LLUUID& cat_id,
|
||||
LLFolderView* active_folder_view,
|
||||
LLInventoryFilter* filter)
|
||||
{
|
||||
if (!model || !active_folder_view || !filter)
|
||||
return false;
|
||||
|
||||
if (!filter->checkFolder(cat_id))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
LLInventoryModel::cat_array_t descendent_categories;
|
||||
LLInventoryModel::item_array_t descendent_items;
|
||||
model->collectDescendents(cat_id, descendent_categories, descendent_items, TRUE);
|
||||
|
||||
S32 num_descendent_categories = descendent_categories.count();
|
||||
S32 num_descendent_items = descendent_items.count();
|
||||
|
||||
if (num_descendent_categories + num_descendent_items == 0)
|
||||
{
|
||||
// Empty folder should be checked as any other folder view item.
|
||||
// If we are filtering by date the folder should not pass because
|
||||
// it doesn't have its own creation date. See LLInvFVBridge::getCreationDate().
|
||||
return check_item(cat_id, active_folder_view, filter);
|
||||
}
|
||||
|
||||
for (S32 i = 0; i < num_descendent_categories; ++i)
|
||||
{
|
||||
LLInventoryCategory* category = descendent_categories[i];
|
||||
if(!check_category(model, category->getUUID(), active_folder_view, filter))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
for (S32 i = 0; i < num_descendent_items; ++i)
|
||||
{
|
||||
LLViewerInventoryItem* item = descendent_items[i];
|
||||
if(!check_item(item->getUUID(), active_folder_view, filter))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// static
|
||||
bool check_item(const LLUUID& item_id,
|
||||
LLFolderView* active_folder_view,
|
||||
LLInventoryFilter* filter)
|
||||
{
|
||||
if (!active_folder_view || !filter) return false;
|
||||
|
||||
LLFolderViewItem* fv_item = active_folder_view->getItemByID(item_id);
|
||||
if (!fv_item) return false;
|
||||
|
||||
return filter->check(fv_item);
|
||||
}
|
||||
|
||||
// +=================================================+
|
||||
// | LLTextureBridge |
|
||||
// +=================================================+
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@
|
|||
#include "llviewercontrol.h"
|
||||
#include "llwearable.h"
|
||||
|
||||
class LLInventoryFilter;
|
||||
class LLInventoryPanel;
|
||||
class LLInventoryModel;
|
||||
class LLMenuGL;
|
||||
|
|
@ -645,7 +646,8 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id,
|
|||
const LLUUID& category_id,
|
||||
BOOL drop,
|
||||
void (*callback)(S32, void*) = NULL,
|
||||
void* user_data = NULL);
|
||||
void* user_data = NULL,
|
||||
LLInventoryFilter* filter = NULL);
|
||||
|
||||
// Utility function to hide all entries except those in the list
|
||||
// Can be called multiple times on the same menu (e.g. if multiple items
|
||||
|
|
|
|||
|
|
@ -121,7 +121,29 @@ bool LLInventoryFilter::check(const LLInventoryItem* item)
|
|||
return passed;
|
||||
}
|
||||
|
||||
bool LLInventoryFilter::checkFolder(const LLFolderViewFolder* folder)
|
||||
bool LLInventoryFilter::checkFolder(const LLFolderViewFolder* folder) const
|
||||
{
|
||||
if (!folder)
|
||||
{
|
||||
llwarns << "The filter can not be checked on an invalid folder." << llendl;
|
||||
llassert(false); // crash in development builds
|
||||
return false;
|
||||
}
|
||||
|
||||
const LLFolderViewEventListener* listener = folder->getListener();
|
||||
if (!listener)
|
||||
{
|
||||
llwarns << "Folder view event listener not found." << llendl;
|
||||
llassert(false); // crash in development builds
|
||||
return false;
|
||||
}
|
||||
|
||||
const LLUUID folder_id = listener->getUUID();
|
||||
|
||||
return checkFolder(folder_id);
|
||||
}
|
||||
|
||||
bool LLInventoryFilter::checkFolder(const LLUUID& folder_id) const
|
||||
{
|
||||
// we're showing all folders, overriding filter
|
||||
if (mFilterOps.mShowFolderState == LLInventoryFilter::SHOW_ALL_FOLDERS)
|
||||
|
|
@ -129,9 +151,6 @@ bool LLInventoryFilter::checkFolder(const LLFolderViewFolder* folder)
|
|||
return true;
|
||||
}
|
||||
|
||||
const LLFolderViewEventListener* listener = folder->getListener();
|
||||
const LLUUID folder_id = listener->getUUID();
|
||||
|
||||
if (mFilterOps.mFilterTypes & FILTERTYPE_CATEGORY)
|
||||
{
|
||||
// Can only filter categories for items in your inventory
|
||||
|
|
|
|||
|
|
@ -117,7 +117,8 @@ public:
|
|||
// +-------------------------------------------------------------------+
|
||||
BOOL check(const LLFolderViewItem* item);
|
||||
bool check(const LLInventoryItem* item);
|
||||
bool checkFolder(const LLFolderViewFolder* folder);
|
||||
bool checkFolder(const LLFolderViewFolder* folder) const;
|
||||
bool checkFolder(const LLUUID& folder_id) const;
|
||||
BOOL checkAgainstFilterType(const LLFolderViewItem* item) const;
|
||||
bool checkAgainstFilterType(const LLInventoryItem* item) const;
|
||||
BOOL checkAgainstPermissions(const LLFolderViewItem* item) const;
|
||||
|
|
|
|||
|
|
@ -4102,7 +4102,7 @@ void LLViewerWindow::movieSize(S32 new_width, S32 new_height)
|
|||
gViewerWindow->getWindow()->getSize(&size);
|
||||
if ( size != new_size )
|
||||
{
|
||||
gViewerWindow->getWindow()->setSize(new_size.convert());
|
||||
gViewerWindow->getWindow()->setSize(new_size);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -149,10 +149,6 @@ const F32 PELVIS_LAG_WALKING = 0.4f; // ...while walking
|
|||
const F32 PELVIS_LAG_MOUSELOOK = 0.15f;
|
||||
const F32 MOUSELOOK_PELVIS_FOLLOW_FACTOR = 0.5f;
|
||||
const F32 PELVIS_LAG_WHEN_FOLLOW_CAM_IS_ON = 0.0001f; // not zero! - something gets divided by this!
|
||||
|
||||
const F32 PELVIS_ROT_THRESHOLD_SLOW = 60.0f; // amount of deviation allowed between
|
||||
const F32 PELVIS_ROT_THRESHOLD_FAST = 2.0f; // the pelvis and the view direction
|
||||
// when moving fast & slow
|
||||
const F32 TORSO_NOISE_AMOUNT = 1.0f; // Amount of deviation from up-axis, in degrees
|
||||
const F32 TORSO_NOISE_SPEED = 0.2f; // Time scale factor on torso noise.
|
||||
|
||||
|
|
@ -3652,7 +3648,11 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
|
|||
BOOL self_in_mouselook = isSelf() && gAgentCamera.cameraMouselook();
|
||||
|
||||
LLVector3 pelvisDir( mRoot.getWorldMatrix().getFwdRow4().mV );
|
||||
F32 pelvis_rot_threshold = clamp_rescale(speed, 0.1f, 1.0f, PELVIS_ROT_THRESHOLD_SLOW, PELVIS_ROT_THRESHOLD_FAST);
|
||||
|
||||
static LLCachedControl<F32> s_pelvis_rot_threshold_slow(gSavedSettings, "AvatarRotateThresholdSlow");
|
||||
static LLCachedControl<F32> s_pelvis_rot_threshold_fast(gSavedSettings, "AvatarRotateThresholdFast");
|
||||
|
||||
F32 pelvis_rot_threshold = clamp_rescale(speed, 0.1f, 1.0f, s_pelvis_rot_threshold_slow, s_pelvis_rot_threshold_fast);
|
||||
|
||||
if (self_in_mouselook)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue