data driven layout of top-level UI elements

EXT-1219 Side tray slide-out animation
cleaned up some layout of bottom tray contents

reviewed by James
master
richard 2009-11-09 15:29:47 -08:00
parent fac0b6836a
commit 4eb72a12a2
26 changed files with 296 additions and 371 deletions

View File

@ -29,7 +29,6 @@ indra/newview/fmod.dll
indra/newview/mozilla-theme
indra/newview/mozilla-universal-darwin.tgz
indra/newview/res-sdl
indra/newview/skins
indra/newview/vivox-runtime
indra/server-linux-*
indra/test/linden_file.dat

View File

@ -60,6 +60,8 @@ LLConsole* gConsole = NULL; // Created and destroyed in LLViewerWindow.
const F32 FADE_DURATION = 2.f;
const S32 MIN_CONSOLE_WIDTH = 200;
static LLDefaultChildRegistry::Register<LLConsole> r("console");
LLConsole::LLConsole(const LLConsole::Params& p)
: LLUICtrl(p),
LLFixedBuffer(p.max_lines),

View File

@ -137,6 +137,7 @@ LLLayoutStack::LLLayoutStack(const LLLayoutStack::Params& p)
mPanelSpacing(p.border_size),
mOrientation((p.orientation() == "vertical") ? VERTICAL : HORIZONTAL),
mAnimate(p.animate),
mAnimatedThisFrame(false),
mClip(p.clip)
{}
@ -172,6 +173,7 @@ void LLLayoutStack::draw()
// only force drawing invisible children if visible amount is non-zero
drawChild(panelp, 0, 0, !clip_rect.isEmpty());
}
mAnimatedThisFrame = false;
}
void LLLayoutStack::removeChild(LLView* view)
@ -411,8 +413,10 @@ void LLLayoutStack::updatePanelAutoResize(const std::string& panel_name, BOOL au
}
}
static LLFastTimer::DeclareTimer FTM_UPDATE_LAYOUT("Update LayoutStacks");
void LLLayoutStack::updateLayout(BOOL force_resize)
{
LLFastTimer ft(FTM_UPDATE_LAYOUT);
static LLUICachedControl<S32> resize_bar_overlap ("UIResizeBarOverlap", 0);
calcMinExtents();
@ -431,10 +435,13 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
{
if (mAnimate)
{
(*panel_it)->mVisibleAmt = lerp((*panel_it)->mVisibleAmt, 1.f, LLCriticalDamp::getInterpolant(ANIM_OPEN_TIME));
if ((*panel_it)->mVisibleAmt > 0.99f)
if (!mAnimatedThisFrame)
{
(*panel_it)->mVisibleAmt = 1.f;
(*panel_it)->mVisibleAmt = lerp((*panel_it)->mVisibleAmt, 1.f, LLCriticalDamp::getInterpolant(ANIM_OPEN_TIME));
if ((*panel_it)->mVisibleAmt > 0.99f)
{
(*panel_it)->mVisibleAmt = 1.f;
}
}
}
else
@ -446,10 +453,13 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
{
if (mAnimate)
{
(*panel_it)->mVisibleAmt = lerp((*panel_it)->mVisibleAmt, 0.f, LLCriticalDamp::getInterpolant(ANIM_CLOSE_TIME));
if ((*panel_it)->mVisibleAmt < 0.001f)
if (!mAnimatedThisFrame)
{
(*panel_it)->mVisibleAmt = 0.f;
(*panel_it)->mVisibleAmt = lerp((*panel_it)->mVisibleAmt, 0.f, LLCriticalDamp::getInterpolant(ANIM_CLOSE_TIME));
if ((*panel_it)->mVisibleAmt < 0.001f)
{
(*panel_it)->mVisibleAmt = 0.f;
}
}
}
else
@ -631,10 +641,10 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
// adjust running headroom count based on new sizes
shrink_headroom_total += delta_size;
panelp->reshape(new_width, new_height);
panelp->setOrigin(cur_x, cur_y - new_height);
LLRect panel_rect;
panel_rect.setLeftTopAndSize(cur_x, cur_y, new_width, new_height);
panelp->setShape(panel_rect);
LLRect panel_rect = panelp->getRect();
LLRect resize_bar_rect = panel_rect;
if (mOrientation == HORIZONTAL)
{
@ -705,6 +715,8 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
llassert_always(force_resize == FALSE);
updateLayout(TRUE);
}
mAnimatedThisFrame = true;
} // end LLLayoutStack::updateLayout
@ -772,3 +784,16 @@ void LLLayoutStack::calcMinExtents()
}
}
}
// update layout stack animations, etc. once per frame
// NOTE: we use this to size world view based on animating UI, *before* we draw the UI
// we might still need to call updateLayout during UI draw phase, in case UI elements
// are resizing themselves dynamically
//static
void LLLayoutStack::idle()
{
for (LLInstanceTracker::instance_iter it = beginInstances(); it != endInstances(); ++it)
{
(*it)->updateLayout();
}
}

View File

@ -38,7 +38,7 @@
class LLPanel;
class LLLayoutStack : public LLView
class LLLayoutStack : public LLView, LLInstanceTracker<LLLayoutStack>
{
public:
struct Params : public LLInitParam::Block<Params, LLView::Params>
@ -81,6 +81,10 @@ public:
S32 getNumPanels() { return mPanels.size(); }
void updatePanelAutoResize(const std::string& panel_name, BOOL auto_resize);
static void idle();
protected:
LLLayoutStack(const Params&);
friend class LLUICtrlFactory;
@ -105,6 +109,8 @@ private:
S32 mMinHeight; // calculated by calcMinExtents
S32 mPanelSpacing;
// true if we already applied animation this frame
bool mAnimatedThisFrame;
bool mAnimate;
bool mClip;
}; // end class LLLayoutStack

View File

@ -188,7 +188,7 @@ public:
T* widget = new T(params);
widget->initFromParams(params);
if (parent)
widget->setParent(parent);
parent->addChild(widget);
return widget;
}

View File

@ -1698,8 +1698,11 @@ LLView* LLView::getChildView(const std::string& name, BOOL recurse) const
return child;
}
static LLFastTimer::DeclareTimer FTM_FIND_VIEWS("Find Widgets");
LLView* LLView::findChildView(const std::string& name, BOOL recurse) const
{
LLFastTimer ft(FTM_FIND_VIEWS);
//richard: should we allow empty names?
//if(name.empty())
// return NULL;

View File

@ -267,9 +267,6 @@ public:
// remove the specified child from the view, and set it's parent to NULL.
virtual void removeChild(LLView* view);
// helper function for lluictrlfactory.h create<> template
void setParent(LLView* parent) { if (parent) parent->addChild(this); }
virtual BOOL postBuild() { return TRUE; }
child_tab_order_t getCtrlOrder() const { return mCtrlOrder; }

View File

@ -256,7 +256,8 @@ BOOL LLFastTimerView::handleToolTip(S32 x, S32 y, MASK mask)
LLToolTipMgr::instance().show(LLToolTip::Params()
.message(mHoverTimer->getToolTip(LLFastTimer::NamedTimer::HISTORY_NUM - mScrollIndex - mHoverBarIndex))
.sticky_rect(screen_rect));
.sticky_rect(screen_rect)
.delay_time(0.f));
return TRUE;
}

View File

@ -2044,10 +2044,12 @@ BOOL LLFloaterSnapshot::postBuild()
LLSnapshotLivePreview::Params p;
p.rect(full_screen_rect);
LLSnapshotLivePreview* previewp = new LLSnapshotLivePreview(p);
getRootView()->removeChild(gSnapshotFloaterView);
LLView* parent_view = gSnapshotFloaterView->getParent();
parent_view->removeChild(gSnapshotFloaterView);
// make sure preview is below snapshot floater
getRootView()->addChild(previewp);
getRootView()->addChild(gSnapshotFloaterView);
parent_view->addChild(previewp);
parent_view->addChild(gSnapshotFloaterView);
//move snapshot floater to special purpose snapshotfloaterview
gFloaterView->removeChild(this);

View File

@ -677,7 +677,7 @@ void LLPanelStandStopFlying::updatePosition()
//align centers of a button and a floater
S32 x = movement_btn->calcScreenRect().getCenterX() - getRect().getWidth()/2;
S32 y = tray->getRect().getHeight();
S32 y = 0;
LLFloater *move_floater = LLFloaterReg::findInstance("moveview");
if (move_floater)

View File

@ -587,6 +587,8 @@ void LLNavigationBar::showNavigationPanel(BOOL visible)
// this is duplicated in 'else' section because it should be called BEFORE fb->reshape
reshape(nbRect.getWidth(), nbRect.getHeight());
setRect(nbRect);
// propagate size to parent container
getParent()->reshape(nbRect.getWidth(), nbRect.getHeight());
fb->reshape(fbRect.getWidth(), fbRect.getHeight());
fb->setRect(fbRect);
@ -600,6 +602,7 @@ void LLNavigationBar::showNavigationPanel(BOOL visible)
reshape(nbRect.getWidth(), nbRect.getHeight());
setRect(nbRect);
getParent()->reshape(nbRect.getWidth(), nbRect.getHeight());
}
}
else
@ -614,6 +617,7 @@ void LLNavigationBar::showNavigationPanel(BOOL visible)
// this is duplicated in 'else' section because it should be called BEFORE fb->reshape
reshape(nbRect.getWidth(), nbRect.getHeight());
setRect(nbRect);
getParent()->reshape(nbRect.getWidth(), nbRect.getHeight());
fb->reshape(fbRect.getWidth(), fbRect.getHeight());
fb->setRect(fbRect);
@ -626,16 +630,12 @@ void LLNavigationBar::showNavigationPanel(BOOL visible)
reshape(nbRect.getWidth(), nbRect.getHeight());
setRect(nbRect);
getParent()->reshape(nbRect.getWidth(), nbRect.getHeight());
}
}
childSetVisible("bg_icon", fpVisible);
childSetVisible("bg_icon_no_fav", !fpVisible);
if(LLSideTray::instanceCreated())
{
LLSideTray::getInstance()->resetPanelRect();
}
}
void LLNavigationBar::showFavoritesPanel(BOOL visible)
@ -670,6 +670,7 @@ void LLNavigationBar::showFavoritesPanel(BOOL visible)
reshape(nbRect.getWidth(), nbRect.getHeight());
setRect(nbRect);
getParent()->reshape(nbRect.getWidth(), nbRect.getHeight());
fb->reshape(fbRect.getWidth(), fbRect.getHeight());
fb->setRect(fbRect);
@ -694,14 +695,11 @@ void LLNavigationBar::showFavoritesPanel(BOOL visible)
reshape(nbRect.getWidth(), nbRect.getHeight());
setRect(nbRect);
getParent()->reshape(nbRect.getWidth(), nbRect.getHeight());
}
childSetVisible("bg_icon", visible);
childSetVisible("bg_icon_no_fav", !visible);
fb->setVisible(visible);
if(LLSideTray::instanceCreated())
{
LLSideTray::getInstance()->resetPanelRect();
}
}

View File

@ -198,7 +198,8 @@ public:
~LLFriendListUpdater()
{
delete mInvObserver;
// will be deleted by ~LLInventoryModel
//delete mInvObserver;
LLVoiceClient::getInstance()->removeObserver(this);
LLAvatarTracker::instance().removeObserver(this);
}

View File

@ -64,7 +64,6 @@ void ContextMenu::show(LLView* spawning_view, const std::vector<LLUUID>& uuids,
if (parent)
{
parent->removeChild(mMenu);
mMenu->setParent(NULL);
}
delete mMenu;
mMenu = NULL;

View File

@ -694,6 +694,7 @@ bool LLPanelPrimMediaControls::isMouseOver()
LLView* controls_view = NULL;
controls_view = getChild<LLView>("media_controls");
//FIXME: rewrite as LLViewQuery or get hover set from LLViewerWindow?
if(controls_view && controls_view->getVisible())
{
controls_view->screenPointToLocal(cursor_pos_gl.mX, cursor_pos_gl.mY, &x, &y);

View File

@ -163,7 +163,6 @@ void LLTeleportHistoryPanel::ContextMenu::show(LLView* spawning_view, S32 index,
if (parent)
{
parent->removeChild(mMenu);
mMenu->setParent(NULL);
}
delete mMenu;
}
@ -645,7 +644,6 @@ void LLTeleportHistoryPanel::onAccordionTabRightClick(LLView *view, S32 x, S32 y
if (parent)
{
parent->removeChild(mAccordionTabMenu);
mAccordionTabMenu->setParent(NULL);
}
delete mAccordionTabMenu;
}

View File

@ -100,7 +100,7 @@ LLSideTray* LLSideTray::getInstance()
{
if (!sInstance)
{
sInstance = LLUICtrlFactory::createFromFile<LLSideTray>("panel_side_tray.xml",gViewerWindow->getRootView(), LLRootView::child_registry_t::instance());
sInstance = LLUICtrlFactory::createFromFile<LLSideTray>("panel_side_tray.xml",NULL, LLRootView::child_registry_t::instance());
}
return sInstance;
@ -148,7 +148,6 @@ public:
/*virtual*/ bool addChild (LLView* view, S32 tab_group);
void arrange (S32 width, S32 height);
void reshape (S32 width, S32 height, BOOL called_from_parent = TRUE);
static LLSideTrayTab* createInstance ();
@ -156,8 +155,6 @@ public:
const std::string& getDescription () const { return mDescription;}
const std::string& getTabTitle() const { return mTabTitle;}
void draw();
void onOpen (const LLSD& key);
private:
@ -209,60 +206,24 @@ BOOL LLSideTrayTab::postBuild()
static const S32 splitter_margin = 1;
//virtual
void LLSideTrayTab::arrange(S32 width, S32 height )
{
if(!mMainPanel)
return;
S32 offset = 0;
LLView* title_panel = findChildView(TAB_PANEL_CAPTION_NAME, true);
if(title_panel)
{
title_panel->setOrigin( 0, height - title_panel->getRect().getHeight() );
offset = title_panel->getRect().getHeight();
}
LLRect sRect = mMainPanel->getRect();
sRect.setLeftTopAndSize( splitter_margin, height - offset - splitter_margin, width - 2*splitter_margin, height - offset - 2*splitter_margin);
mMainPanel->reshape(sRect.getWidth(),sRect.getHeight());
mMainPanel->setRect(sRect);
}
void LLSideTrayTab::reshape (S32 width, S32 height, BOOL called_from_parent )
{
if(!mMainPanel)
return;
S32 offset = 0;
LLPanel::reshape(width, height, called_from_parent);
LLView* title_panel = findChildView(TAB_PANEL_CAPTION_NAME, true);
if(title_panel)
if (!title_panel)
{
title_panel->setOrigin( 0, height - title_panel->getRect().getHeight() );
title_panel->reshape(width,title_panel->getRect().getHeight());
offset = title_panel->getRect().getHeight();
// not fully constructed yet
return;
}
S32 title_height = title_panel->getRect().getHeight();
title_panel->setOrigin( 0, height - title_height );
title_panel->reshape(width,title_height);
LLRect sRect = mMainPanel->getRect();
sRect.setLeftTopAndSize( splitter_margin, height - offset - splitter_margin, width - 2*splitter_margin, height - offset - 2*splitter_margin);
//mMainPanel->setMaxWidth(sRect.getWidth());
mMainPanel->reshape(sRect.getWidth(), sRect.getHeight());
mMainPanel->setRect(sRect);
}
void LLSideTrayTab::draw()
{
LLPanel::draw();
LLRect sRect;
sRect.setLeftTopAndSize( splitter_margin, height - title_height - splitter_margin,
width - 2*splitter_margin, height - title_height - 2*splitter_margin);
mMainPanel->setShape(sRect);
}
void LLSideTrayTab::onOpen (const LLSD& key)
@ -300,17 +261,20 @@ LLSideTray::LLSideTray(Params& params)
,mActiveTab(0)
,mCollapsed(false)
,mCollapseButton(0)
,mMaxBarWidth(params.rect.width)
{
mCollapsed=params.collapsed;
LLUICtrl::CommitCallbackRegistry::Registrar& commit = LLUICtrl::CommitCallbackRegistry::currentRegistrar();
// register handler function to process data from the xml.
// panel_name should be specified via "parameter" attribute.
commit.add("SideTray.ShowPanel", boost::bind(&LLSideTray::showPanel, this, _2, LLUUID::null));
LLTransientFloaterMgr::getInstance()->addControlView(this);
LLPanel::Params p;
p.name = "buttons_panel";
p.mouse_opaque = false;
mButtonsPanel = LLUICtrlFactory::create<LLPanel>(p);
}
@ -399,7 +363,7 @@ LLButton* LLSideTray::createButton (const std::string& name,const std::string& i
rect.setOriginAndSize(0, 0, sidetray_params.default_button_width, sidetray_params.default_button_height);
bparams.name(name);
bparams.follows.flags (FOLLOWS_LEFT | FOLLOWS_BOTTOM);
bparams.follows.flags (FOLLOWS_LEFT | FOLLOWS_TOP);
bparams.rect (rect);
bparams.tab_stop(false);
bparams.image_unselected.name(sidetray_params.tab_btn_image_normal);
@ -416,7 +380,7 @@ LLButton* LLSideTray::createButton (const std::string& name,const std::string& i
button->setImageOverlay(image);
}
addChildInBack(button);
mButtonsPanel->addChildInBack(button);
return button;
}
@ -500,23 +464,24 @@ void LLSideTray::reflectCollapseChange()
}
else
{
gFloaterView->setSnapOffsetRight(mMaxBarWidth);
gFloaterView->setSnapOffsetRight(getRect().getWidth());
setFocus(TRUE);
}
gFloaterView->refresh();
}
void LLSideTray::arrange ()
void LLSideTray::arrange()
{
static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>());
setPanelRect();
LLRect ctrl_rect;
ctrl_rect.setLeftTopAndSize(0,getRect().getHeight()-sidetray_params.default_button_width
,sidetray_params.default_button_width
,sidetray_params.default_button_height);
ctrl_rect.setLeftTopAndSize(0,
mButtonsPanel->getRect().getHeight() - sidetray_params.default_button_width,
sidetray_params.default_button_width,
sidetray_params.default_button_height);
mCollapseButton->setRect(ctrl_rect);
@ -528,9 +493,10 @@ void LLSideTray::arrange ()
{
LLSideTrayTab* sidebar_tab = *child_it;
ctrl_rect.setLeftTopAndSize(0,getRect().getHeight()-offset
,sidetray_params.default_button_width
,sidetray_params.default_button_height);
ctrl_rect.setLeftTopAndSize(0,
mButtonsPanel->getRect().getHeight()-offset,
sidetray_params.default_button_width,
sidetray_params.default_button_height);
if(mTabButtons.find(sidebar_tab->getName()) == mTabButtons.end())
continue;
@ -544,14 +510,11 @@ void LLSideTray::arrange ()
btn->setVisible(ctrl_rect.mBottom > 0);
}
ctrl_rect.setLeftTopAndSize(sidetray_params.default_button_width,getRect().getHeight(),mMaxBarWidth,getRect().getHeight());
//arrange tabs
for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it)
for ( child_vector_t::iterator child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it)
{
LLSideTrayTab* sidebar_tab = *child_it;
sidebar_tab->setRect(ctrl_rect);
sidebar_tab->arrange(mMaxBarWidth,getRect().getHeight());
sidebar_tab->setShape(getLocalRect());
}
}
@ -580,7 +543,7 @@ void LLSideTray::collapseSideBar()
{
mCollapseButton->setImageOverlay( home_tab->mImage );
}
mActiveTab->setVisible(FALSE);
//mActiveTab->setVisible(FALSE);
reflectCollapseChange();
setFocus( FALSE );
@ -596,7 +559,6 @@ void LLSideTray::expandSideBar()
}
LLSD key;//empty
mActiveTab->onOpen(key);
mActiveTab->setVisible(TRUE);
reflectCollapseChange();
}
@ -612,15 +574,6 @@ void LLSideTray::highlightFocused()
*/
}
BOOL LLSideTray::handleScrollWheel(S32 x, S32 y, S32 mask)
{
BOOL ret = LLPanel::handleScrollWheel(x,y,mask);
if(!ret && childFromPoint(x,y) != 0 )
return TRUE;//mouse wheel over sidetray buttons, eat mouse wheel
return ret;
}
//virtual
BOOL LLSideTray::handleMouseDown (S32 x, S32 y, MASK mask)
{
@ -630,58 +583,13 @@ BOOL LLSideTray::handleMouseDown (S32 x, S32 y, MASK mask)
return ret;
}
void LLSideTray::reshape (S32 width, S32 height, BOOL called_from_parent)
void LLSideTray::reshape(S32 width, S32 height, BOOL called_from_parent)
{
LLPanel::reshape(width, height, called_from_parent);
if(!mActiveTab)
return;
static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>());
setPanelRect();
LLRect ctrl_rect;
ctrl_rect.setLeftTopAndSize(0
,getRect().getHeight()-sidetray_params.default_button_width
,sidetray_params.default_button_width
,sidetray_params.default_button_height);
mCollapseButton->setRect(ctrl_rect);
//arrange tab buttons
child_vector_const_iter_t child_it;
int offset = (sidetray_params.default_button_height+sidetray_params.default_button_margin)*2;
for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it)
{
LLSideTrayTab* sidebar_tab = *child_it;
ctrl_rect.setLeftTopAndSize(0,getRect().getHeight()-offset
,sidetray_params.default_button_width
,sidetray_params.default_button_height);
if(mTabButtons.find(sidebar_tab->getName()) == mTabButtons.end())
continue;
LLButton* btn = mTabButtons[sidebar_tab->getName()];
btn->setRect(ctrl_rect);
offset+=sidetray_params.default_button_height;
offset+=sidetray_params.default_button_margin;
btn->setVisible(ctrl_rect.mBottom > 0);
}
//arrange tabs
for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it)
{
LLSideTrayTab* sidebar_tab = *child_it;
sidebar_tab->reshape(mMaxBarWidth,getRect().getHeight());
ctrl_rect.setLeftTopAndSize(sidetray_params.default_button_width,getRect().getHeight(),mMaxBarWidth,getRect().getHeight());
sidebar_tab->setRect(ctrl_rect);
}
arrange();
}
/**
@ -729,42 +637,12 @@ LLPanel* LLSideTray::showPanel (const std::string& panel_name, const LLSD& para
static const S32 fake_offset = 132;
static const S32 fake_top_offset = 18;
void LLSideTray::resetPanelRect ()
{
const LLRect& parent_rect = gViewerWindow->getRootView()->getRect();
static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>());
S32 panel_width = sidetray_params.default_button_width;
panel_width += mCollapsed ? 0 : mMaxBarWidth;
S32 panel_height = parent_rect.getHeight()-fake_top_offset;
reshape(panel_width,panel_height);
}
void LLSideTray::setPanelRect ()
{
LLNavigationBar* nav_bar = LLNavigationBar::getInstance();
LLRect nav_rect = nav_bar->getRect();
static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>());
const LLRect& parent_rect = gViewerWindow->getRootView()->getRect();
S32 panel_width = sidetray_params.default_button_width;
panel_width += mCollapsed ? 0 : mMaxBarWidth;
S32 panel_height = parent_rect.getHeight()-fake_top_offset - nav_rect.getHeight();
S32 panel_top = parent_rect.mTop-fake_top_offset - nav_rect.getHeight();
LLRect panel_rect;
panel_rect.setLeftTopAndSize( parent_rect.mRight-panel_width, panel_top, panel_width, panel_height);
setRect(panel_rect);
// set visibility of parent container based on collapsed state
if (getParent())
{
getParent()->setVisible(!mCollapsed);
}
}
S32 LLSideTray::getTrayWidth()
{
static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>());
return getRect().getWidth() - (sidetray_params.default_button_width + sidetray_params.default_button_margin);
}

View File

@ -118,6 +118,8 @@ public:
LLPanel::setVisible(visible);
}
LLPanel* getButtonsPanel() { return mButtonsPanel; }
public:
virtual ~LLSideTray(){};
@ -129,10 +131,8 @@ public:
bool addChild (LLView* view, S32 tab_group);
BOOL handleMouseDown (S32 x, S32 y, MASK mask);
BOOL handleScrollWheel(S32 x, S32 y, S32 mask);
void reshape (S32 width, S32 height, BOOL called_from_parent = TRUE);
S32 getTrayWidth();
void resetPanelRect ();
@ -163,15 +163,15 @@ private:
private:
std::map<std::string,LLButton*> mTabButtons;
LLPanel* mButtonsPanel;
typedef std::map<std::string,LLButton*> button_map_t;
button_map_t mTabButtons;
child_vector_t mTabs;
LLSideTrayTab* mActiveTab;
LLButton* mCollapseButton;
bool mCollapsed;
S32 mMaxBarWidth;
static LLSideTray* sInstance;
};

View File

@ -1405,6 +1405,9 @@ void LLViewerWindow::initBase()
main_view->setShape(full_window);
getRootView()->addChild(main_view);
// placeholder widget that controls where "world" is rendered
mWorldViewPlaceholder = main_view->getChildView("world_view_rect");
// Constrain floaters to inside the menu and status bar regions.
gFloaterView = getRootView()->getChild<LLFloaterView>("Floater View");
gSnapshotFloaterView = getRootView()->getChild<LLSnapshotFloaterView>("Snapshot Floater View");
@ -1458,9 +1461,6 @@ void LLViewerWindow::initWorldUI()
gIMMgr = LLIMMgr::getInstance();
// side tray
//getRootView()->addChild(LLSideTray::getInstance());
getRootView()->sendChildToFront(gFloaterView);
getRootView()->sendChildToFront(gSnapshotFloaterView);
@ -1468,7 +1468,7 @@ void LLViewerWindow::initWorldUI()
LLPanel* bottom_tray_container = getRootView()->getChild<LLPanel>("bottom_tray_container");
LLBottomTray* bottom_tray = LLBottomTray::getInstance();
bottom_tray->setShape(bottom_tray_container->getLocalRect());
bottom_tray->setFollows(FOLLOWS_ALL);
bottom_tray->setFollowsAll();
bottom_tray_container->addChild(bottom_tray);
bottom_tray_container->setVisible(TRUE);
@ -1498,7 +1498,8 @@ void LLViewerWindow::initWorldUI()
// Status bar
LLPanel* status_bar_container = getRootView()->getChild<LLPanel>("status_bar_container");
gStatusBar = new LLStatusBar(status_bar_container->getLocalRect());
gStatusBar->setFollows(FOLLOWS_ALL);
gStatusBar->setFollowsAll();
gStatusBar->setShape(status_bar_container->getLocalRect());
// sync bg color with menu bar
gStatusBar->setBackgroundColor( gMenuBarView->getBackgroundColor().get() );
status_bar_container->addChild(gStatusBar);
@ -1559,10 +1560,24 @@ void LLViewerWindow::initWorldUI()
LLPanel* panel_ssf_container = getRootView()->getChild<LLPanel>("stand_stop_flying_container");
LLPanelStandStopFlying* panel_stand_stop_flying = LLPanelStandStopFlying::getInstance();
panel_stand_stop_flying->setShape(panel_ssf_container->getLocalRect());
panel_stand_stop_flying->setFollows(FOLLOWS_ALL);
panel_stand_stop_flying->setFollowsAll();
panel_ssf_container->addChild(panel_stand_stop_flying);
panel_ssf_container->setVisible(TRUE);
// put sidetray in container
LLPanel* side_tray_container = getRootView()->getChild<LLPanel>("side_tray_container");
LLSideTray* sidetrayp = LLSideTray::getInstance();
sidetrayp->setShape(side_tray_container->getLocalRect());
sidetrayp->setFollowsAll();
side_tray_container->addChild(sidetrayp);
side_tray_container->setVisible(FALSE);
// put sidetray buttons in their own panel
LLPanel* buttons_panel = sidetrayp->getButtonsPanel();
LLPanel* buttons_panel_container = getRootView()->getChild<LLPanel>("side_bar_tabs");
buttons_panel->setShape(buttons_panel_container->getLocalRect());
buttons_panel->setFollowsAll();
buttons_panel_container->addChild(buttons_panel);
}
// Destroy the UI
@ -2272,29 +2287,6 @@ void LLViewerWindow::moveCursorToCenter()
LLUI::setMousePositionScreen(x, y);
}
void LLViewerWindow::updateBottomTrayRect()
{
//if(LLBottomTray::instanceExists() && LLSideTray::instanceCreated())
//{
// S32 side_tray_width = 0;
// if(LLSideTray::getInstance()->getVisible())
// {
// side_tray_width = LLSideTray::getInstance()->getTrayWidth();
// }
// LLBottomTray* bottom_tray = LLBottomTray::getInstance();
// S32 right = llround((F32)mWindowRect.mRight / mDisplayScale.mV[VX]) - side_tray_width;
// LLRect rc = bottom_tray->getRect();
// if (right != rc.mRight)
// {
// rc.mRight = right;
// bottom_tray->reshape(rc.getWidth(), rc.getHeight(), FALSE);
// bottom_tray->setRect(rc);
// mOnBottomTrayWidthChanged();
// }
//}
}
//////////////////////////////////////////////////////////////////////
//
@ -2336,9 +2328,10 @@ void LLViewerWindow::updateUI()
{
static std::string last_handle_msg;
updateWorldViewRect();
// animate layout stacks so we have up to date rect for world view
LLLayoutStack::idle();
updateBottomTrayRect();
updateWorldViewRect();
LLView::sMouseHandlerMessage.clear();
@ -2838,32 +2831,20 @@ void LLViewerWindow::updateKeyboardFocus()
LLSideTray::getInstance()->highlightFocused();
}
static LLFastTimer::DeclareTimer FTM_UPDATE_WORLD_VIEW("Update World View");
void LLViewerWindow::updateWorldViewRect(bool use_full_window)
{
if (!LLSideTray::instanceCreated()) return;
LLFastTimer ft(FTM_UPDATE_WORLD_VIEW);
// start off using whole window to render world
LLRect new_world_rect = mWindowRect;
if (use_full_window == false)
{
// pull in right side of world view based on sidetray
LLSideTray* sidetray = LLSideTray::getInstance();
if (sidetray->getVisible())
{
new_world_rect.mRight -= llround((F32)sidetray->getTrayWidth() * mDisplayScale.mV[VX]);
}
// push top of world view below nav bar
if (LLNavigationBar::getInstance()->getVisible())
{
LLNavigationBar* barp = LLNavigationBar::getInstance();
LLRect nav_bar_rect;
if(barp->localRectToOtherView(barp->getLocalRect(), &nav_bar_rect, mRootView))
{
new_world_rect.mTop = llround((F32)LLNavigationBar::getInstance()->getRect().mBottom * mDisplayScale.mV[VY]);
}
}
new_world_rect = mWorldViewPlaceholder->calcScreenRect();
// clamp to at least a 1x1 rect so we don't try to allocate zero width gl buffers
new_world_rect.mTop = llmax(new_world_rect.mTop, new_world_rect.mBottom + 1);
new_world_rect.mRight = llmax(new_world_rect.mRight, new_world_rect.mLeft + 1);
}
if (mWorldViewRect != new_world_rect)

View File

@ -294,7 +294,6 @@ public:
void updateKeyboardFocus();
void updateWorldViewRect(bool use_full_window=false);
void updateBottomTrayRect();
BOOL handleKey(KEY key, MASK mask);
void handleScrollWheel (S32 clicks);
@ -451,6 +450,8 @@ protected:
BOOL mIgnoreActivate;
std::string mInitAlert; // Window / GL initialization requires an alert
LLView* mWorldViewPlaceholder; // widget that spans the portion of screen dedicated to rendering the 3d world
class LLDebugText* mDebugText; // Internal class for debug text

View File

@ -506,8 +506,10 @@ void LLPipeline::destroyGL()
}
}
static LLFastTimer::DeclareTimer FTM_RESIZE_SCREEN_TEXTURE("Resize Screen Texture");
void LLPipeline::resizeScreenTexture()
{
LLFastTimer ft(FTM_RESIZE_SCREEN_TEXTURE);
if (gPipeline.canUseVertexShaders() && assertInitialized())
{
GLuint resX = gViewerWindow->getWorldViewWidth();

View File

@ -1,119 +1,130 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
follows="left|right|top|bottom"
height="768"
height="768"
layout="topleft"
left="0"
mouse_opaque="false"
name="screen"
name="main_view"
width="1024">
<layout_stack border_size="0"
follows="all"
height="768"
mouse_opaque="false"
mouse_opaque="false"
height="772"
name="menu_stack"
orientation="vertical">
<!-- filename="panel_status_bar.xml"-->
orientation="vertical"
top="0">
<layout_panel auto_resize="false"
min_height="19"
mouse_opaque="false"
name="status_bar_container"
height="19"
width="1024"
visible="false"/>
<!--filename="panel_navigation_bar.xml"-->
<layout_panel auto_resize="false"
height="65"
mouse_opaque="false"
height="65"
mouse_opaque="false"
name="nav_bar_container"
width="1024"
visible="false"/>
<layout_stack auto_resize="true"
border_size="0"
follows="all"
height="500"
<panel auto_resize="true"
follows="all"
height="500"
layout="topleft"
mouse_opaque="false"
name="hud_stack"
orientation="horizontal"
name="hud"
width="1024">
<panel auto_resize="true"
follows="all"
height="500"
layout="topleft"
mouse_opaque="false"
name="main_view"
user_resize="true"
width="500">
<layout_stack bottom="500"
follows="all"
height="500"
mouse_opaque="false"
name="hud_stack"
orientation="vertical">
<panel auto_resize="true"
follows="all"
height="500"
layout="topleft"
mouse_opaque="false"
name="hud container"
width="500">
<debug_view follows="all"
left="0"
top="0"
mouse_opaque="false"
height="500"
name="DebugView"
width="500"/>
<panel follows="right|top|bottom"
height="500"
mouse_opaque="false"
name="side_bar_tabs"
right="500"
top="0"
width="32"/>
</panel>
<!--filename="panel_stand_stop_flying.xml"-->
<layout_panel auto_resize="false"
follows="all"
min_height="25"
mouse_opaque="false"
name="stand_stop_flying_container"
visible="false"/>
<!--filename="panel_bottomtray.xml"-->
<layout_panel auto_resize="false"
follows="all"
min_height="33"
mouse_opaque="false"
name="bottom_tray_container"
visible="false"/>
</layout_stack>
<floater_view follows="all"
height="500"
mouse_opaque="false"
name="Floater View"
tab_group="-1"
tab_stop="false"
top="0"/>
<snapshot_floater_view enabled="false"
follows="all"
height="500"
left="0"
mouse_opaque="false"
name="Snapshot Floater View"
tab_stop="false"
top="0"
visible="false"/>
</panel>
<!-- side tray -->
<layout_panel auto_resize="false"
follows="all"
height="500"
min_width="333"
<layout_stack border_size="0"
follows="all"
height="500"
left="0"
mouse_opaque="false"
name="side_tray_container"
user_resize="true"
visible="false"
width="333"/>
</layout_stack>
name="hud_stack"
orientation="horizontal"
top="0"
width="1024">
<panel auto_resize="true"
follows="all"
height="500"
layout="topleft"
mouse_opaque="false"
name="main_view"
user_resize="true"
width="500">
<layout_stack border_size="0"
bottom="500"
follows="all"
height="500"
left="0"
mouse_opaque="false"
name="world_stack"
orientation="vertical">
<panel auto_resize="true"
follows="all"
height="500"
layout="topleft"
mouse_opaque="false"
name="hud container"
width="500">
<view bottom="500"
follows="all"
height="500"
left="0"
mouse_opaque="false"
name="world_view_rect"
width="500"/>
<panel follows="right|top|bottom"
height="500"
mouse_opaque="false"
name="side_bar_tabs"
right="500"
top="0"
width="32"/>
<panel bottom="500"
follows="left|right|bottom"
height="25"
left="0"
mouse_opaque="false"
name="stand_stop_flying_container"
visible="false"
width="500"/>
</panel>
<layout_panel auto_resize="false"
follows="all"
min_height="33"
mouse_opaque="false"
name="bottom_tray_container"
visible="false"/>
</layout_stack>
</panel>
<!-- side tray -->
<layout_panel auto_resize="false"
follows="all"
height="500"
min_width="333"
mouse_opaque="false"
name="side_tray_container"
user_resize="true"
visible="false"
width="333"/>
</layout_stack>
<floater_view follows="all"
height="500"
left="0"
mouse_opaque="false"
name="Floater View"
tab_group="-1"
tab_stop="false"
top="0"
width="1024"/>
<debug_view follows="all"
left="0"
top="0"
mouse_opaque="false"
height="500"
name="DebugView"
width="1024"/>
</panel>
</layout_stack>
<notify_box_view top="0"
follows="all"
@ -128,6 +139,16 @@
mouse_opaque="false"
name="Menu Holder"
width="1024"/>
<snapshot_floater_view enabled="false"
follows="all"
height="768"
left="0"
mouse_opaque="false"
name="Snapshot Floater View"
tab_stop="false"
top="0"
visible="false"
width="1024"/>
<tooltip_view top="0"
follows="all"
height="768"

View File

@ -31,6 +31,7 @@
height="10"
image_name="spacer24.tga"
layout="topleft"
min_width="4"
left="0"
top="0"
width="4" />
@ -44,7 +45,7 @@
min_height="23"
width="310"
top="0"
min_width="300"
min_width="310"
name="chat_bar"
user_resize="false"
filename="panel_nearby_chat_bar.xml" />
@ -57,30 +58,31 @@
min_height="28"
width="100"
top_delta="0"
min_width="96"
min_width="100"
name="speak_panel"
user_resize="false">
<talk_button
follows="right"
height="23"
speak_button.tab_stop="true"
show_button.tab_stop="true"
layout="topleft"
left="0"
name="talk"
top="3"
width="100" />
<talk_button
follows="right"
height="23"
speak_button.tab_stop="true"
show_button.tab_stop="true"
layout="topleft"
left="0"
name="talk"
top="3"
width="100" />
</layout_panel>
<icon
auto_resize="false"
follows="left|right"
height="10"
image_name="spacer24.tga"
layout="topleft"
left="0"
name="DUMMY"
top="0"
width="4"/>
<icon
auto_resize="false"
follows="left|right"
height="10"
image_name="spacer24.tga"
layout="topleft"
left="0"
name="DUMMY"
min_width="4"
top="0"
width="4"/>
<layout_panel
mouse_opaque="false"
auto_resize="false"
@ -112,6 +114,7 @@
image_name="spacer24.tga"
layout="topleft"
left="0"
min_width="4"
name="DUMMY"
top="0"
width="4"/>
@ -149,6 +152,7 @@
image_name="spacer24.tga"
layout="topleft"
left="0"
min_width="4"
name="DUMMY"
top="0"
width="4"/>
@ -188,6 +192,7 @@
image_name="spacer24.tga"
layout="topleft"
left="0"
min_width="4"
name="DUMMY"
top="0"
width="4"/>
@ -243,6 +248,7 @@
image_name="spacer24.tga"
layout="topleft"
left="0"
min_width="4"
top="0"
width="5"/>
<layout_panel
@ -288,6 +294,7 @@
height="10"
image_name="spacer24.tga"
layout="topleft"
min_width="4"
right="-1"
top="0"
width="26"/>

View File

@ -3,7 +3,7 @@
background_opaque="true"
background_visible="true"
bg_opaque_color="MouseGray"
follows="top|left|right"
follows="all"
height="19"
layout="topleft"
left="0"

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<context_menu visible="false"/>

View File

@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<side_tray tab_btn_image="TaskPanel_Tab_Off"
tab_btn_image_selected="TaskPanel_Tab_Selected"
tab_btn_width="32"
tab_btn_height="40"
tab_btn_margin="1"
>
tab_btn_image_selected="TaskPanel_Tab_Selected"
tab_btn_width="32"
tab_btn_height="40"
tab_btn_margin="1">
</side_tray>

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<toggleable_menu visible="false"/>