From fac0b6836a59681443fb2bbd13e6b5eb9c07cef5 Mon Sep 17 00:00:00 2001 From: richard Date: Thu, 5 Nov 2009 20:36:15 -0800 Subject: refactored top level ui into main_view.xml --- indra/newview/llbottomtray.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview/llbottomtray.cpp') diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index a17ba79078..4c15fdd1a2 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -71,7 +71,7 @@ LLBottomTray::LLBottomTray(const LLSD&) //this is to fix a crash that occurs because LLBottomTray is a singleton //and thus is deleted at the end of the viewers lifetime, but to be cleanly //destroyed LLBottomTray requires some subsystems that are long gone - LLUI::getRootView()->addChild(this); + //LLUI::getRootView()->addChild(this); // Necessary for focus movement among child controls setFocusRoot(TRUE); -- cgit v1.2.3 From 3eafbeaac57c952b674fb134124354036c9bb967 Mon Sep 17 00:00:00 2001 From: Mike Antipov Date: Tue, 10 Nov 2009 15:02:42 +0200 Subject: Work on major sub-task EXT-991 (Update bottom bar behavior on resize) Initial refactoring of functionality: - Re-Fixed bug with visibility of chiclet panel of the min size - updated bottomtray xml to make buttons identical to each other - Imroved logic while resizing of bottom tray (changing width of chiclet & nearby panels, hide/show buttons) --HG-- branch : product-engine --- indra/newview/llbottomtray.cpp | 419 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 392 insertions(+), 27 deletions(-) (limited to 'indra/newview/llbottomtray.cpp') diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index a17ba79078..d0fdf24403 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -50,6 +50,8 @@ LLBottomTray::LLBottomTray(const LLSD&) mSpeakBtn(NULL), mNearbyChatBar(NULL), mToolbarStack(NULL) +, mMovementButton(NULL) +// Add more members { mFactoryMap["chat_bar"] = LLCallbackMap(LLBottomTray::createNearbyChatBar, NULL); @@ -253,12 +255,28 @@ void LLBottomTray::showSnapshotButton(BOOL visible) mSnapshotPanel->setVisible(visible); } +typedef enum e_resize_status_type +{ + RS_NORESIZE = 0x0000 + , RS_CHICLET_PANEL = 0x0001 + , RS_CHATBAR_INPUT = 0x0002 + , RS_BUTTON_SNAPSHOT = 0x0004 + , RS_BUTTON_CAMERA = 0x0008 + , RS_BUTTON_MOVEMENT = 0x0010 + , RS_BUTTON_GESTURES = 0x0020 + , RS_BUTTON_SPEAK = 0x0040 + , RS_RESIZABLE_BUTTONS = /*RS_BUTTON_SNAPSHOT | */RS_BUTTON_CAMERA | RS_BUTTON_MOVEMENT | RS_BUTTON_GESTURES +}EResizeState; + + + namespace { - const std::string& PANEL_CHICLET_NAME = "chiclet_list_panel"; - const std::string& PANEL_CHATBAR_NAME = "chat_bar"; - const std::string& PANEL_MOVEMENT_NAME = "movement_panel"; - const std::string& PANEL_CAMERA_NAME = "cam_panel"; + const std::string& PANEL_CHICLET_NAME = "chiclet_list_panel"; + const std::string& PANEL_CHATBAR_NAME = "chat_bar"; + const std::string& PANEL_MOVEMENT_NAME = "movement_panel"; + const std::string& PANEL_CAMERA_NAME = "cam_panel"; + const std::string& PANEL_GESTURE_NAME = "gesture_panel"; } BOOL LLBottomTray::postBuild() @@ -284,63 +302,133 @@ BOOL LLBottomTray::postBuild() return TRUE; } +void LLBottomTray::log(LLView* panel, const std::string& descr) +{ + if (NULL == panel) return; + LLView* layout = panel->getParent(); + llwarns << descr << ": " + << "panel: " << panel->getName() + << ", rect: " << panel->getRect() + + + << "layout: " << layout->getName() + << ", rect: " << layout->getRect() + << llendl + ; +} + void LLBottomTray::verifyChildControlsSizes() { LLRect rect = mChicletPanel->getRect(); if (rect.getWidth() < mChicletPanel->getMinWidth()) { + llwarns << "QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ: chiclet panel less then min" << llendl; mChicletPanel->reshape(mChicletPanel->getMinWidth(), rect.getHeight()); } rect = mNearbyChatBar->getRect(); if (rect.getWidth() < mNearbyChatBar->getMinWidth()) { + llwarns << "WWWWWWWWWWWWWWWWWWWWWWWWWWWWW: near chat panel less then min" << llendl; mNearbyChatBar->reshape(mNearbyChatBar->getMinWidth(), rect.getHeight()); } - else if (rect.getWidth() > mNearbyChatBar->getMaxWidth()) + else + if (rect.getWidth() > mNearbyChatBar->getMaxWidth()) { rect.setLeftTopAndSize(rect.mLeft, rect.mTop, mNearbyChatBar->getMaxWidth(), rect.getHeight()); mNearbyChatBar->reshape(mNearbyChatBar->getMaxWidth(), rect.getHeight()); mNearbyChatBar->setRect(rect); } } - +#define __FEATURE_EXT_991 void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent) { + static S32 depth = 0; +if (0 == depth) lldebugs << "" << llendl; + + lldebugs << "Reshaping: depth: " << ++depth + << ", width: " << width + << ", height: " << height + << ", called_from_parent" << called_from_parent + << ", cur width: " << getRect().getWidth() + << ", cur height: " << getRect().getHeight() + << llendl; + + if (mNearbyChatBar) log(mNearbyChatBar, "before"); + if (mChicletPanel) log(mChicletPanel, "before"); if (mChicletPanel && mToolbarStack && mNearbyChatBar) { -#ifdef __FEATURE_EXT_991__ +// S32 delta_width = width - getRect().getWidth(); BOOL shrink = width < getRect().getWidth(); +#ifdef __FEATURE_EXT_991__ const S32 MIN_RENDERED_CHARS = 3; #endif - verifyChildControlsSizes(); - updateResizeState(width, height); + + + verifyChildControlsSizes(); + updateResizeState(width, height); + if (RS_NORESIZE == mResizeState && !called_from_parent) + { + // this can be in case nearby + lldebugs << "width was not changed & !called_from_parent" << llendl; + + } + + + + + if (RS_NORESIZE != mResizeState) + { + +// mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, mResizeState & RS_CHICLET_PANEL); + mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, TRUE); + +// mToolbarStack->updatePanelAutoResize(PANEL_CHATBAR_NAME, mResizeState & RS_CHATBAR_INPUT); + +/* + mToolbarStack->updatePanelAutoResize(PANEL_GESTURE_NAME, mResizeState & RS_BUTTON_GESTURES); + mToolbarStack->updatePanelAutoResize(PANEL_CAMERA_NAME, mResizeState & RS_BUTTON_CAMERA); + mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, mResizeState & RS_BUTTON_MOVEMENT); +*/ + + bool show_button = !shrink; + if (width != getRect().getWidth() && show_button) + { + if (mResizeState & RS_BUTTON_SNAPSHOT) showSnapshotButton(show_button); + if (mResizeState & RS_BUTTON_CAMERA) showCameraButton(show_button); + if (mResizeState & RS_BUTTON_MOVEMENT) showMoveButton(show_button); + if (mResizeState & RS_BUTTON_GESTURES) showGestureButton(show_button); + } switch (mResizeState) { - case STATE_CHICLET_PANEL: + case RS_CHICLET_PANEL: +/* mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, TRUE); mToolbarStack->updatePanelAutoResize(PANEL_CHATBAR_NAME, FALSE); mToolbarStack->updatePanelAutoResize(PANEL_CAMERA_NAME, FALSE); mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, FALSE); +*/ break; - case STATE_CHATBAR_INPUT: + case RS_CHATBAR_INPUT: +/* mToolbarStack->updatePanelAutoResize(PANEL_CHATBAR_NAME, TRUE); mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, FALSE); mToolbarStack->updatePanelAutoResize(PANEL_CAMERA_NAME, FALSE); mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, FALSE); +*/ break; #ifdef __FEATURE_EXT_991__ - case STATE_BUTTONS: - mToolbarStack->updatePanelAutoResize(PANEL_CAMERA_NAME, TRUE); + case RS_RESIZABLE_BUTTONS: +// mToolbarStack->updatePanelAutoResize(PANEL_CAMERA_NAME, TRUE); mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, TRUE); mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, FALSE); @@ -352,6 +440,8 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent) if (mSnapshotPanel->getVisible()) { showSnapshotButton(FALSE); +// mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, TRUE); +// mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, FALSE); } if (mCamPanel->getVisible() && mCamButton->getLastDrawCharsCount() < MIN_RENDERED_CHARS) @@ -368,6 +458,12 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent) else { showMoveButton(TRUE); + S32 button_delta = delta_width / 4; + + LLRect panel_rect = mMovementPanel->getRect(); +// panel_rect.mRight += button_delta; + mMovementPanel->reshape(panel_rect.getWidth() + button_delta, panel_rect.getHeight()/*, FALSE*/); + mMovementPanel->draw(); if (mMovementButton->getLastDrawCharsCount() >= MIN_RENDERED_CHARS) @@ -378,6 +474,7 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent) { showMoveButton(FALSE); } + mMovementPanel->reshape(panel_rect.getWidth() , panel_rect.getHeight()/*, FALSE*/); } break; #endif @@ -385,58 +482,326 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent) default: break; } + } + else + { + lldebugs << "Nothing changed" << llendl; + } + } LLPanel::reshape(width, height, called_from_parent); + + // *TODO: проверить ширину nearby после ресайза на предмет выхода за максимальный предел + +// if (mMovementButton) log(mMovementButton, "after"); + if (mNearbyChatBar) log(mNearbyChatBar, "after"); + if (mChicletPanel) log(mChicletPanel, "after"); + + if (mToolbarStack) + { +/* + mToolbarStack->updatePanelAutoResize(PANEL_CAMERA_NAME, FALSE); + mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, FALSE); +*/ + } + --depth; } void LLBottomTray::updateResizeState(S32 width, S32 height) { - mResizeState = STATE_BUTTONS; + mResizeState = RS_NORESIZE; + static MASK prev_resize_state = mResizeState; + MASK compensative_view_item_mask = RS_CHATBAR_INPUT; + LLPanel* compansative_view = mNearbyChatBar; + S32 compensative_delta_width = 0; - const S32 chiclet_panel_width = mChicletPanel->getRect().getWidth(); + S32 delta_width = width - getRect().getWidth(); +// if (delta_width == 0) return; + + const S32 chiclet_panel_width = mChicletPanel->getParent()->getRect().getWidth(); const S32 chiclet_panel_min_width = mChicletPanel->getMinWidth(); const S32 chatbar_panel_width = mNearbyChatBar->getRect().getWidth(); const S32 chatbar_panel_min_width = mNearbyChatBar->getMinWidth(); const S32 chatbar_panel_max_width = mNearbyChatBar->getMaxWidth(); + lldebugs << "chatbar_panel_width: " << chatbar_panel_width + << llendl; + + bool still_should_be_processed = true; // bottom tray is narrowed if (width < getRect().getWidth()) { if (chiclet_panel_width > chiclet_panel_min_width) { - mResizeState = STATE_CHICLET_PANEL; + // we have some space to decrease chiclet panel + S32 panel_delta_min = chiclet_panel_width - chiclet_panel_min_width; + mResizeState |= RS_CHICLET_PANEL; + + S32 delta_panel = llmin(-delta_width, panel_delta_min); + + lldebugs << "delta_width: " << delta_width + << ", panel_delta_min: " << panel_delta_min + << ", delta_panel: " << delta_panel + << llendl; + + // is chiclet panel width enough to process resizing? + delta_width += panel_delta_min; + + still_should_be_processed = delta_width < 0; + + mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - delta_panel, mChicletPanel->getParent()->getRect().getHeight()); + log(mChicletPanel, "after processing panel decreasing via chiclet panel"); + + lldebugs << "RS_CHICLET_PANEL" + << ", delta_width: " << delta_width + << llendl; } - else if (chatbar_panel_width > chatbar_panel_min_width) + + if (still_should_be_processed && chatbar_panel_width > chatbar_panel_min_width) { - mResizeState = STATE_CHATBAR_INPUT; + // we have some space to decrease chatbar panel + S32 panel_delta_min = chatbar_panel_width - chatbar_panel_min_width; + mResizeState |= RS_CHATBAR_INPUT; + + S32 delta_panel = llmin(-delta_width, panel_delta_min); + + // is chatbar panel width enough to process resizing? + delta_width += panel_delta_min; + + + still_should_be_processed = delta_width < 0; + + mNearbyChatBar->reshape(mNearbyChatBar->getRect().getWidth() - delta_panel, mNearbyChatBar->getRect().getHeight()); + + lldebugs << "RS_CHATBAR_INPUT" + << ", delta_panel: " << delta_panel + << ", delta_width: " << delta_width + << llendl; + + log(mChicletPanel, "after nearby was processed"); + } - else + if (still_should_be_processed) { - mResizeState = STATE_BUTTONS; + mResizeState |= compensative_view_item_mask; + + if (mSnapshotPanel->getVisible()) + { + mResizeState |= RS_BUTTON_SNAPSHOT; + delta_width += mSnapshotPanel->getRect().getWidth(); + compensative_delta_width += mSnapshotPanel->getRect().getWidth(); + lldebugs << "RS_BUTTON_SNAPSHOT" + << ", compensative_delta_width: " << compensative_delta_width + << ", delta_width: " << delta_width + << llendl; + showSnapshotButton(false); + } + + if (delta_width < 0 && mCamPanel->getVisible()) + { + mResizeState |= RS_BUTTON_CAMERA; + delta_width += mCamPanel->getRect().getWidth(); + compensative_delta_width += mCamPanel->getRect().getWidth(); + lldebugs << "RS_BUTTON_CAMERA" + << ", compensative_delta_width: " << compensative_delta_width + << ", delta_width: " << delta_width + << llendl; + showCameraButton(false); + } + + if (delta_width < 0 && mMovementPanel->getVisible()) + { + mResizeState |= RS_BUTTON_MOVEMENT; + delta_width += mMovementPanel->getRect().getWidth(); + compensative_delta_width += mMovementPanel->getRect().getWidth(); + lldebugs << "RS_BUTTON_MOVEMENT" + << ", compensative_delta_width: " << compensative_delta_width + << ", delta_width: " << delta_width + << llendl; + showMoveButton(false); + } + + if (delta_width < 0 && mGesturePanel->getVisible()) + { + mResizeState |= RS_BUTTON_GESTURES; + delta_width += mGesturePanel->getRect().getWidth(); + compensative_delta_width += mGesturePanel->getRect().getWidth(); + lldebugs << "RS_BUTTON_GESTURES" + << ", compensative_delta_width: " << compensative_delta_width + << ", delta_width: " << delta_width + << llendl; + showGestureButton(false); + } + + if (delta_width < 0) + { + llwarns << "WARNING: there is no enough room for bottom tray, resizing still should be processed" << llendl; + } + + if (compensative_delta_width != 0) + { + if (compansative_view) log(compansative_view, "before applying compensative width: "); + compansative_view->reshape(compansative_view->getRect().getWidth() + compensative_delta_width, compansative_view->getRect().getHeight() ); + if (compansative_view) log(compansative_view, "after applying compensative width: "); + lldebugs << compensative_delta_width << llendl; + + } + +/* + switch (mResizeState) + { + case: + } +*/ + +// mResizeState = RS_RESIZABLE_BUTTONS; } } // bottom tray is widen else { +// const S32 chatbar_panel_width = mNearbyChatBar->getRect().getWidth(); +// const S32 chatbar_panel_min_width = mNearbyChatBar->getMinWidth(); +// // const S32 chatbar_panel_max_width = mNearbyChatBar->getMaxWidth(); + S32 available_width_chat = chatbar_panel_width - chatbar_panel_min_width; + S32 available_width_chiclet = chiclet_panel_width - chiclet_panel_min_width; + S32 available_width = delta_width + available_width_chat + available_width_chiclet; + + if (available_width > 0 && processShowButton(mGesturePanel, &available_width)) + { + mResizeState |= RS_BUTTON_GESTURES | compensative_view_item_mask; + delta_width -= mGesturePanel->getRect().getWidth(); + compensative_delta_width -= mGesturePanel->getRect().getWidth(); + lldebugs << "RS_BUTTON_GESTURES" + << ", compensative_delta_width: " << compensative_delta_width + << ", delta_width: " << delta_width + << llendl; + } + + if (available_width > 0 && processShowButton(mMovementPanel, &available_width)) + { + mResizeState |= RS_BUTTON_MOVEMENT | compensative_view_item_mask; + delta_width -= mMovementPanel->getRect().getWidth(); + compensative_delta_width -= mMovementPanel->getRect().getWidth(); + + lldebugs << "RS_BUTTON_MOVEMENT" + << ", compensative_delta_width: " << compensative_delta_width + << ", delta_width: " << delta_width + << llendl; + } + + if (available_width > 0 && processShowButton(mCamPanel, &available_width)) + { + mResizeState |= RS_BUTTON_CAMERA | compensative_view_item_mask; + delta_width -= mCamPanel->getRect().getWidth(); + compensative_delta_width -= mCamPanel->getRect().getWidth(); + + lldebugs << "RS_BUTTON_CAMERA " + << ", compensative_delta_width: " << compensative_delta_width + << ", delta_width: " << delta_width + << llendl; + } + + if (available_width > 0 && processShowButton(mSnapshotPanel, &available_width)) + { + mResizeState |= RS_BUTTON_SNAPSHOT | compensative_view_item_mask; + delta_width -= mSnapshotPanel->getRect().getWidth(); + compensative_delta_width -= mSnapshotPanel->getRect().getWidth(); + + lldebugs << "RS_BUTTON_SNAPSHOT" + << ", compensative_delta_width: " << compensative_delta_width + << ", delta_width: " << delta_width + << llendl; + } + + if (compensative_delta_width != 0) + { + S32 required_to_process_width = -compensative_delta_width; + S32 total_delta_width = width - getRect().getWidth(); + + // 1. use delta width of resizing + required_to_process_width -= total_delta_width; + + // 2. use delta width of chatbar + + + S32 chatbar_compensative_delta_width = required_to_process_width; + if (available_width_chat < chatbar_compensative_delta_width) + { + chatbar_compensative_delta_width = available_width_chat; + } + + log(compansative_view, "increase width: before applying compensative width: "); + compansative_view->reshape(compansative_view->getRect().getWidth() - chatbar_compensative_delta_width, compansative_view->getRect().getHeight() ); + if (compansative_view) log(compansative_view, "after applying compensative width: "); + lldebugs << chatbar_compensative_delta_width << llendl; + + // 3. use delta width of chiclet panel + required_to_process_width -= chatbar_compensative_delta_width; + + mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - required_to_process_width, mChicletPanel->getParent()->getRect().getHeight()); + log(mChicletPanel, "after applying compensative width for chiclets: "); + lldebugs << required_to_process_width << llendl; + + } + + #ifdef __FEATURE_EXT_991__ - if (!mMovementPanel->getVisible()) + //S32 LLFontGL::maxDrawableChars(const llwchar* wchars, F32 max_pixels, S32 max_chars, BOOL end_on_word_boundary) const + static S32 DEFAULT_BUTTON_WIDTH = 80; + if (!mMovementPanel->getVisible() || mMovementPanel->getRect().getWidth() < DEFAULT_BUTTON_WIDTH) { - mResizeState = STATE_BUTTONS; + mResizeState = RS_RESIZABLE_BUTTONS; } else #endif - if (chatbar_panel_width < chatbar_panel_max_width) + if (delta_width > 0 && chatbar_panel_width < chatbar_panel_max_width) { - mResizeState = STATE_CHATBAR_INPUT; + mResizeState |= RS_CHATBAR_INPUT; + // how many space can nearby chat take? + S32 chatbar_panel_width_ = mNearbyChatBar->getRect().getWidth(); + S32 delta_panel_max = chatbar_panel_max_width - chatbar_panel_width_; + S32 delta_panel = llmin(delta_width, delta_panel_max); + delta_width -= delta_panel_max; + mNearbyChatBar->reshape(chatbar_panel_width_ + delta_panel, mNearbyChatBar->getRect().getHeight()); } - else + + if (delta_width > 0) { - mResizeState = STATE_CHICLET_PANEL; + mResizeState |= RS_CHICLET_PANEL; } } + prev_resize_state = mResizeState; + lldebugs << "New resize state: " << mResizeState << llendl; +} - // TODO: finish implementation +bool LLBottomTray::processShowButton(LLPanel* panel, S32* available_width) +{ + bool can_be_shown = canButtonBeShown(panel); + if (can_be_shown) + { + //validate if we have enough room to show this button + const S32 required_width = panel->getRect().getWidth(); + can_be_shown = *available_width >= required_width; + if (can_be_shown) + { + *available_width -= required_width; + } + + } + return can_be_shown; +} + +bool LLBottomTray::canButtonBeShown(LLPanel* panel) const +{ + bool can_be_shown = !panel->getVisible(); + if (can_be_shown) + { + // *TODO: mantipov: synchronize with situation when button was hidden via context menu; + } + return can_be_shown; } +//EOF -- cgit v1.2.3 From 729df1aa330a50fa4f4b887e46c32a94a01880d7 Mon Sep 17 00:00:00 2001 From: Mike Antipov Date: Tue, 10 Nov 2009 16:13:20 +0200 Subject: Work on major sub-task EXT-991 (Update bottom bar behavior on resize) Initial refactoring of functionality: - cleaning - Imroved logic while resizing of bottom tray --HG-- branch : product-engine --- indra/newview/llbottomtray.cpp | 155 ++++++----------------------------------- 1 file changed, 23 insertions(+), 132 deletions(-) (limited to 'indra/newview/llbottomtray.cpp') diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index d0fdf24403..b74b1d900b 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -344,12 +344,12 @@ void LLBottomTray::verifyChildControlsSizes() void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent) { static S32 depth = 0; -if (0 == depth) lldebugs << "" << llendl; +if (0 == depth) lldebugs << "****************************************" << llendl; lldebugs << "Reshaping: depth: " << ++depth << ", width: " << width << ", height: " << height - << ", called_from_parent" << called_from_parent + << ", called_from_parent: " << called_from_parent << ", cur width: " << getRect().getWidth() << ", cur height: " << getRect().getHeight() << llendl; @@ -361,9 +361,6 @@ if (0 == depth) lldebugs << "" << llendl; { // S32 delta_width = width - getRect().getWidth(); BOOL shrink = width < getRect().getWidth(); -#ifdef __FEATURE_EXT_991__ - const S32 MIN_RENDERED_CHARS = 3; -#endif @@ -376,9 +373,6 @@ if (0 == depth) lldebugs << "" << llendl; } - - - if (RS_NORESIZE != mResizeState) { @@ -387,11 +381,6 @@ if (0 == depth) lldebugs << "" << llendl; // mToolbarStack->updatePanelAutoResize(PANEL_CHATBAR_NAME, mResizeState & RS_CHATBAR_INPUT); -/* - mToolbarStack->updatePanelAutoResize(PANEL_GESTURE_NAME, mResizeState & RS_BUTTON_GESTURES); - mToolbarStack->updatePanelAutoResize(PANEL_CAMERA_NAME, mResizeState & RS_BUTTON_CAMERA); - mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, mResizeState & RS_BUTTON_MOVEMENT); -*/ bool show_button = !shrink; if (width != getRect().getWidth() && show_button) @@ -402,109 +391,16 @@ if (0 == depth) lldebugs << "" << llendl; if (mResizeState & RS_BUTTON_GESTURES) showGestureButton(show_button); } - switch (mResizeState) - { - case RS_CHICLET_PANEL: -/* - mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, TRUE); - - mToolbarStack->updatePanelAutoResize(PANEL_CHATBAR_NAME, FALSE); - mToolbarStack->updatePanelAutoResize(PANEL_CAMERA_NAME, FALSE); - mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, FALSE); -*/ - - break; - case RS_CHATBAR_INPUT: -/* - mToolbarStack->updatePanelAutoResize(PANEL_CHATBAR_NAME, TRUE); - - mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, FALSE); - mToolbarStack->updatePanelAutoResize(PANEL_CAMERA_NAME, FALSE); - mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, FALSE); - -*/ - break; - -#ifdef __FEATURE_EXT_991__ - - case RS_RESIZABLE_BUTTONS: -// mToolbarStack->updatePanelAutoResize(PANEL_CAMERA_NAME, TRUE); - mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, TRUE); - - mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, FALSE); - mToolbarStack->updatePanelAutoResize(PANEL_CHATBAR_NAME, FALSE); - - if (shrink) - { - - if (mSnapshotPanel->getVisible()) - { - showSnapshotButton(FALSE); -// mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, TRUE); -// mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, FALSE); - } - - if (mCamPanel->getVisible() && mCamButton->getLastDrawCharsCount() < MIN_RENDERED_CHARS) - { - showCameraButton(FALSE); - } - - if (mMovementPanel->getVisible() && mMovementButton->getLastDrawCharsCount() < MIN_RENDERED_CHARS) - { - showMoveButton(FALSE); - } - - } - else - { - showMoveButton(TRUE); - S32 button_delta = delta_width / 4; - - LLRect panel_rect = mMovementPanel->getRect(); -// panel_rect.mRight += button_delta; - mMovementPanel->reshape(panel_rect.getWidth() + button_delta, panel_rect.getHeight()/*, FALSE*/); - - mMovementPanel->draw(); - - if (mMovementButton->getLastDrawCharsCount() >= MIN_RENDERED_CHARS) - { - showMoveButton(TRUE); - } - else - { - showMoveButton(FALSE); - } - mMovementPanel->reshape(panel_rect.getWidth() , panel_rect.getHeight()/*, FALSE*/); - } - break; -#endif - - default: - break; - } } - else - { - lldebugs << "Nothing changed" << llendl; - } - } LLPanel::reshape(width, height, called_from_parent); // *TODO: проверить ширину nearby после ресайза на предмет выхода за максимальный предел -// if (mMovementButton) log(mMovementButton, "after"); if (mNearbyChatBar) log(mNearbyChatBar, "after"); if (mChicletPanel) log(mChicletPanel, "after"); - if (mToolbarStack) - { -/* - mToolbarStack->updatePanelAutoResize(PANEL_CAMERA_NAME, FALSE); - mToolbarStack->updatePanelAutoResize(PANEL_MOVEMENT_NAME, FALSE); -*/ - } --depth; } @@ -527,6 +423,10 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) const S32 chatbar_panel_max_width = mNearbyChatBar->getMaxWidth(); lldebugs << "chatbar_panel_width: " << chatbar_panel_width + << ", chatbar_panel_min_width: " << chatbar_panel_min_width + << ", chatbar_panel_max_width: " << chatbar_panel_max_width + << ", chiclet_panel_width: " << chiclet_panel_width + << ", chiclet_panel_min_width: " << chiclet_panel_min_width << llendl; bool still_should_be_processed = true; @@ -591,7 +491,11 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) { mResizeState |= RS_BUTTON_SNAPSHOT; delta_width += mSnapshotPanel->getRect().getWidth(); - compensative_delta_width += mSnapshotPanel->getRect().getWidth(); + + if (delta_width > 0) + { + compensative_delta_width += delta_width; + } lldebugs << "RS_BUTTON_SNAPSHOT" << ", compensative_delta_width: " << compensative_delta_width << ", delta_width: " << delta_width @@ -603,7 +507,10 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) { mResizeState |= RS_BUTTON_CAMERA; delta_width += mCamPanel->getRect().getWidth(); - compensative_delta_width += mCamPanel->getRect().getWidth(); + if (delta_width > 0) + { + compensative_delta_width += delta_width; + } lldebugs << "RS_BUTTON_CAMERA" << ", compensative_delta_width: " << compensative_delta_width << ", delta_width: " << delta_width @@ -615,7 +522,10 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) { mResizeState |= RS_BUTTON_MOVEMENT; delta_width += mMovementPanel->getRect().getWidth(); - compensative_delta_width += mMovementPanel->getRect().getWidth(); + if (delta_width > 0) + { + compensative_delta_width += delta_width; + } lldebugs << "RS_BUTTON_MOVEMENT" << ", compensative_delta_width: " << compensative_delta_width << ", delta_width: " << delta_width @@ -627,7 +537,10 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) { mResizeState |= RS_BUTTON_GESTURES; delta_width += mGesturePanel->getRect().getWidth(); - compensative_delta_width += mGesturePanel->getRect().getWidth(); + if (delta_width > 0) + { + compensative_delta_width += delta_width; + } lldebugs << "RS_BUTTON_GESTURES" << ", compensative_delta_width: " << compensative_delta_width << ", delta_width: " << delta_width @@ -648,23 +561,11 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) lldebugs << compensative_delta_width << llendl; } - -/* - switch (mResizeState) - { - case: - } -*/ - -// mResizeState = RS_RESIZABLE_BUTTONS; } } // bottom tray is widen else { -// const S32 chatbar_panel_width = mNearbyChatBar->getRect().getWidth(); -// const S32 chatbar_panel_min_width = mNearbyChatBar->getMinWidth(); -// // const S32 chatbar_panel_max_width = mNearbyChatBar->getMaxWidth(); S32 available_width_chat = chatbar_panel_width - chatbar_panel_min_width; S32 available_width_chiclet = chiclet_panel_width - chiclet_panel_min_width; S32 available_width = delta_width + available_width_chat + available_width_chiclet; @@ -747,16 +648,6 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) } - -#ifdef __FEATURE_EXT_991__ - //S32 LLFontGL::maxDrawableChars(const llwchar* wchars, F32 max_pixels, S32 max_chars, BOOL end_on_word_boundary) const - static S32 DEFAULT_BUTTON_WIDTH = 80; - if (!mMovementPanel->getVisible() || mMovementPanel->getRect().getWidth() < DEFAULT_BUTTON_WIDTH) - { - mResizeState = RS_RESIZABLE_BUTTONS; - } - else -#endif if (delta_width > 0 && chatbar_panel_width < chatbar_panel_max_width) { mResizeState |= RS_CHATBAR_INPUT; -- cgit v1.2.3 From eb05116e2b3339648a1458fd3be5c502583053ea Mon Sep 17 00:00:00 2001 From: Mike Antipov Date: Tue, 10 Nov 2009 18:07:19 +0200 Subject: Work on major sub-task EXT-991 (Update bottom bar behavior on resize) - update min width for chiclet panel - move showing of hidden buttons to place where resize strategy is determined --HG-- branch : product-engine --- indra/newview/llbottomtray.cpp | 45 +++++++++++++++--------------------------- 1 file changed, 16 insertions(+), 29 deletions(-) (limited to 'indra/newview/llbottomtray.cpp') diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index b74b1d900b..c33d667e0b 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -320,21 +320,26 @@ void LLBottomTray::log(LLView* panel, const std::string& descr) void LLBottomTray::verifyChildControlsSizes() { LLRect rect = mChicletPanel->getRect(); + /* if (rect.getWidth() < mChicletPanel->getMinWidth()) { llwarns << "QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ: chiclet panel less then min" << llendl; mChicletPanel->reshape(mChicletPanel->getMinWidth(), rect.getHeight()); } - +*/ rect = mNearbyChatBar->getRect(); +/* if (rect.getWidth() < mNearbyChatBar->getMinWidth()) { llwarns << "WWWWWWWWWWWWWWWWWWWWWWWWWWWWW: near chat panel less then min" << llendl; mNearbyChatBar->reshape(mNearbyChatBar->getMinWidth(), rect.getHeight()); } else +*/ if (rect.getWidth() > mNearbyChatBar->getMaxWidth()) { + llerrs << "WWWWWWWWWWWWWWWWWWWWWWWWWWWWW: near chat panel more then max width" << llendl; + rect.setLeftTopAndSize(rect.mLeft, rect.mTop, mNearbyChatBar->getMaxWidth(), rect.getHeight()); mNearbyChatBar->reshape(mNearbyChatBar->getMaxWidth(), rect.getHeight()); mNearbyChatBar->setRect(rect); @@ -346,11 +351,12 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent) static S32 depth = 0; if (0 == depth) lldebugs << "****************************************" << llendl; + S32 prev_width = getRect().getWidth(); lldebugs << "Reshaping: depth: " << ++depth << ", width: " << width << ", height: " << height << ", called_from_parent: " << called_from_parent - << ", cur width: " << getRect().getWidth() + << ", cur width: " << prev_width << ", cur height: " << getRect().getHeight() << llendl; @@ -359,19 +365,8 @@ if (0 == depth) lldebugs << "****************************************" << llendl if (mChicletPanel && mToolbarStack && mNearbyChatBar) { -// S32 delta_width = width - getRect().getWidth(); - BOOL shrink = width < getRect().getWidth(); - - - verifyChildControlsSizes(); - updateResizeState(width, height); - if (RS_NORESIZE == mResizeState && !called_from_parent) - { - // this can be in case nearby - lldebugs << "width was not changed & !called_from_parent" << llendl; - - } + updateResizeState(width, prev_width); if (RS_NORESIZE != mResizeState) { @@ -380,23 +375,11 @@ if (0 == depth) lldebugs << "****************************************" << llendl mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, TRUE); // mToolbarStack->updatePanelAutoResize(PANEL_CHATBAR_NAME, mResizeState & RS_CHATBAR_INPUT); - - - bool show_button = !shrink; - if (width != getRect().getWidth() && show_button) - { - if (mResizeState & RS_BUTTON_SNAPSHOT) showSnapshotButton(show_button); - if (mResizeState & RS_BUTTON_CAMERA) showCameraButton(show_button); - if (mResizeState & RS_BUTTON_MOVEMENT) showMoveButton(show_button); - if (mResizeState & RS_BUTTON_GESTURES) showGestureButton(show_button); - } - } } LLPanel::reshape(width, height, called_from_parent); - // *TODO: проверить ширину nearby после ресайза на предмет выхода за максимальный предел if (mNearbyChatBar) log(mNearbyChatBar, "after"); if (mChicletPanel) log(mChicletPanel, "after"); @@ -412,7 +395,7 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) LLPanel* compansative_view = mNearbyChatBar; S32 compensative_delta_width = 0; - S32 delta_width = width - getRect().getWidth(); + S32 delta_width = width - height; // if (delta_width == 0) return; const S32 chiclet_panel_width = mChicletPanel->getParent()->getRect().getWidth(); @@ -431,7 +414,7 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) bool still_should_be_processed = true; // bottom tray is narrowed - if (width < getRect().getWidth()) + if (width < height) { if (chiclet_panel_width > chiclet_panel_min_width) { @@ -579,6 +562,7 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) << ", compensative_delta_width: " << compensative_delta_width << ", delta_width: " << delta_width << llendl; + showGestureButton(true); } if (available_width > 0 && processShowButton(mMovementPanel, &available_width)) @@ -591,6 +575,7 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) << ", compensative_delta_width: " << compensative_delta_width << ", delta_width: " << delta_width << llendl; + showMoveButton(true); } if (available_width > 0 && processShowButton(mCamPanel, &available_width)) @@ -603,6 +588,7 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) << ", compensative_delta_width: " << compensative_delta_width << ", delta_width: " << delta_width << llendl; + showCameraButton(true); } if (available_width > 0 && processShowButton(mSnapshotPanel, &available_width)) @@ -615,12 +601,13 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) << ", compensative_delta_width: " << compensative_delta_width << ", delta_width: " << delta_width << llendl; + showSnapshotButton(true); } if (compensative_delta_width != 0) { S32 required_to_process_width = -compensative_delta_width; - S32 total_delta_width = width - getRect().getWidth(); + S32 total_delta_width = width - height; // 1. use delta width of resizing required_to_process_width -= total_delta_width; -- cgit v1.2.3 From cff807dfaf2bfdbe58a007dd16b36ea29e57bd5b Mon Sep 17 00:00:00 2001 From: Mike Antipov Date: Wed, 11 Nov 2009 13:13:34 +0200 Subject: Work on major sub-task EXT-991 (Update bottom bar behavior on resize) - refactored logic increasing of width - fixed bug with incorrect work in some cases --HG-- branch : product-engine --- indra/newview/llbottomtray.cpp | 71 ++++++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 33 deletions(-) (limited to 'indra/newview/llbottomtray.cpp') diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index c33d667e0b..908fe15be6 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -393,10 +393,10 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) static MASK prev_resize_state = mResizeState; MASK compensative_view_item_mask = RS_CHATBAR_INPUT; LLPanel* compansative_view = mNearbyChatBar; - S32 compensative_delta_width = 0; S32 delta_width = width - height; // if (delta_width == 0) return; + bool shrink = width < height; const S32 chiclet_panel_width = mChicletPanel->getParent()->getRect().getWidth(); const S32 chiclet_panel_min_width = mChicletPanel->getMinWidth(); @@ -414,8 +414,9 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) bool still_should_be_processed = true; // bottom tray is narrowed - if (width < height) + if (shrink) { + S32 compensative_delta_width = 0; if (chiclet_panel_width > chiclet_panel_min_width) { // we have some space to decrease chiclet panel @@ -549,17 +550,17 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) // bottom tray is widen else { - S32 available_width_chat = chatbar_panel_width - chatbar_panel_min_width; + S32 chatbar_available_shrink_width = chatbar_panel_width - chatbar_panel_min_width; S32 available_width_chiclet = chiclet_panel_width - chiclet_panel_min_width; - S32 available_width = delta_width + available_width_chat + available_width_chiclet; - + S32 available_width = delta_width + chatbar_available_shrink_width + available_width_chiclet; + S32 buttons_required_width = 0; //How many room will take shown buttons if (available_width > 0 && processShowButton(mGesturePanel, &available_width)) { mResizeState |= RS_BUTTON_GESTURES | compensative_view_item_mask; delta_width -= mGesturePanel->getRect().getWidth(); - compensative_delta_width -= mGesturePanel->getRect().getWidth(); + buttons_required_width += mGesturePanel->getRect().getWidth(); lldebugs << "RS_BUTTON_GESTURES" - << ", compensative_delta_width: " << compensative_delta_width + << ", buttons_required_width: " << buttons_required_width << ", delta_width: " << delta_width << llendl; showGestureButton(true); @@ -569,10 +570,10 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) { mResizeState |= RS_BUTTON_MOVEMENT | compensative_view_item_mask; delta_width -= mMovementPanel->getRect().getWidth(); - compensative_delta_width -= mMovementPanel->getRect().getWidth(); + buttons_required_width += mMovementPanel->getRect().getWidth(); lldebugs << "RS_BUTTON_MOVEMENT" - << ", compensative_delta_width: " << compensative_delta_width + << ", buttons_required_width: " << buttons_required_width << ", delta_width: " << delta_width << llendl; showMoveButton(true); @@ -582,10 +583,10 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) { mResizeState |= RS_BUTTON_CAMERA | compensative_view_item_mask; delta_width -= mCamPanel->getRect().getWidth(); - compensative_delta_width -= mCamPanel->getRect().getWidth(); + buttons_required_width += mCamPanel->getRect().getWidth(); lldebugs << "RS_BUTTON_CAMERA " - << ", compensative_delta_width: " << compensative_delta_width + << ", buttons_required_width: " << buttons_required_width << ", delta_width: " << delta_width << llendl; showCameraButton(true); @@ -595,51 +596,55 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) { mResizeState |= RS_BUTTON_SNAPSHOT | compensative_view_item_mask; delta_width -= mSnapshotPanel->getRect().getWidth(); - compensative_delta_width -= mSnapshotPanel->getRect().getWidth(); + buttons_required_width += mSnapshotPanel->getRect().getWidth(); lldebugs << "RS_BUTTON_SNAPSHOT" - << ", compensative_delta_width: " << compensative_delta_width + << ", buttons_required_width: " << buttons_required_width << ", delta_width: " << delta_width << llendl; showSnapshotButton(true); } - if (compensative_delta_width != 0) + S32 total_delta_width = width - height; + + // if we have to show some buttons but whidth increasing is not enough... + if (buttons_required_width > 0 && total_delta_width < buttons_required_width) { - S32 required_to_process_width = -compensative_delta_width; - S32 total_delta_width = width - height; + // ... let's shrink nearby chat & chiclet panels + S32 required_to_process_width = buttons_required_width; // 1. use delta width of resizing required_to_process_width -= total_delta_width; - // 2. use delta width of chatbar - - - S32 chatbar_compensative_delta_width = required_to_process_width; - if (available_width_chat < chatbar_compensative_delta_width) + // 2. use delta width available via decreasing of nearby chat panel + S32 chatbar_shrink_width = required_to_process_width; + if (chatbar_available_shrink_width < chatbar_shrink_width) { - chatbar_compensative_delta_width = available_width_chat; + chatbar_shrink_width = chatbar_available_shrink_width; } log(compansative_view, "increase width: before applying compensative width: "); - compansative_view->reshape(compansative_view->getRect().getWidth() - chatbar_compensative_delta_width, compansative_view->getRect().getHeight() ); + compansative_view->reshape(compansative_view->getRect().getWidth() - chatbar_shrink_width, compansative_view->getRect().getHeight() ); if (compansative_view) log(compansative_view, "after applying compensative width: "); - lldebugs << chatbar_compensative_delta_width << llendl; + lldebugs << chatbar_shrink_width << llendl; - // 3. use delta width of chiclet panel - required_to_process_width -= chatbar_compensative_delta_width; + // 3. use delta width available via decreasing of chiclet panel + required_to_process_width -= chatbar_shrink_width; - mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - required_to_process_width, mChicletPanel->getParent()->getRect().getHeight()); - log(mChicletPanel, "after applying compensative width for chiclets: "); - lldebugs << required_to_process_width << llendl; + if (required_to_process_width > 0) + { + mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - required_to_process_width, mChicletPanel->getParent()->getRect().getHeight()); + log(mChicletPanel, "after applying compensative width for chiclets: "); + lldebugs << required_to_process_width << llendl; + } } - - if (delta_width > 0 && chatbar_panel_width < chatbar_panel_max_width) +// TODO: mantipov: probably need delta_width -= buttons_required_width & remove calculating from the buttons processing + // how many space can nearby chat take? + S32 chatbar_panel_width_ = mNearbyChatBar->getRect().getWidth(); + if (delta_width > 0 && chatbar_panel_width_ < chatbar_panel_max_width) { mResizeState |= RS_CHATBAR_INPUT; - // how many space can nearby chat take? - S32 chatbar_panel_width_ = mNearbyChatBar->getRect().getWidth(); S32 delta_panel_max = chatbar_panel_max_width - chatbar_panel_width_; S32 delta_panel = llmin(delta_width, delta_panel_max); delta_width -= delta_panel_max; -- cgit v1.2.3 From 9ab02a68bbb735f89d4c633697a7917ca2fa3839 Mon Sep 17 00:00:00 2001 From: Mike Antipov Date: Wed, 11 Nov 2009 13:53:04 +0200 Subject: Work on major sub-task EXT-991 (Update bottom bar behavior on resize) Code refactored: - move calculating of buttons_required_width inside processShowButton(); - remove changing of delta_width out of processing each button while increasing width --HG-- branch : product-engine --- indra/newview/llbottomtray.cpp | 61 +++++++++++++++--------------------------- 1 file changed, 21 insertions(+), 40 deletions(-) (limited to 'indra/newview/llbottomtray.cpp') diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index 908fe15be6..0ebf9947e3 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -348,15 +348,14 @@ void LLBottomTray::verifyChildControlsSizes() #define __FEATURE_EXT_991 void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent) { - static S32 depth = 0; -if (0 == depth) lldebugs << "****************************************" << llendl; + lldebugs << "****************************************" << llendl; - S32 prev_width = getRect().getWidth(); - lldebugs << "Reshaping: depth: " << ++depth + S32 current_width = getRect().getWidth(); + lldebugs << "Reshaping: " << ", width: " << width << ", height: " << height << ", called_from_parent: " << called_from_parent - << ", cur width: " << prev_width + << ", cur width: " << current_width << ", cur height: " << getRect().getHeight() << llendl; @@ -365,17 +364,9 @@ if (0 == depth) lldebugs << "****************************************" << llendl if (mChicletPanel && mToolbarStack && mNearbyChatBar) { - verifyChildControlsSizes(); - updateResizeState(width, prev_width); - - if (RS_NORESIZE != mResizeState) - { - -// mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, mResizeState & RS_CHICLET_PANEL); mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, TRUE); - -// mToolbarStack->updatePanelAutoResize(PANEL_CHATBAR_NAME, mResizeState & RS_CHATBAR_INPUT); - } + verifyChildControlsSizes(); + updateResizeState(width, current_width); } LLPanel::reshape(width, height, called_from_parent); @@ -383,20 +374,18 @@ if (0 == depth) lldebugs << "****************************************" << llendl if (mNearbyChatBar) log(mNearbyChatBar, "after"); if (mChicletPanel) log(mChicletPanel, "after"); - - --depth; } -void LLBottomTray::updateResizeState(S32 width, S32 height) +void LLBottomTray::updateResizeState(S32 new_width, S32 cur_width) { mResizeState = RS_NORESIZE; static MASK prev_resize_state = mResizeState; MASK compensative_view_item_mask = RS_CHATBAR_INPUT; LLPanel* compansative_view = mNearbyChatBar; - S32 delta_width = width - height; + S32 delta_width = new_width - cur_width; // if (delta_width == 0) return; - bool shrink = width < height; + bool shrink = new_width < cur_width; const S32 chiclet_panel_width = mChicletPanel->getParent()->getRect().getWidth(); const S32 chiclet_panel_min_width = mChicletPanel->getMinWidth(); @@ -554,58 +543,46 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) S32 available_width_chiclet = chiclet_panel_width - chiclet_panel_min_width; S32 available_width = delta_width + chatbar_available_shrink_width + available_width_chiclet; S32 buttons_required_width = 0; //How many room will take shown buttons - if (available_width > 0 && processShowButton(mGesturePanel, &available_width)) + if (available_width > 0 && processShowButton(mGesturePanel, &available_width, &buttons_required_width)) { mResizeState |= RS_BUTTON_GESTURES | compensative_view_item_mask; - delta_width -= mGesturePanel->getRect().getWidth(); - buttons_required_width += mGesturePanel->getRect().getWidth(); lldebugs << "RS_BUTTON_GESTURES" << ", buttons_required_width: " << buttons_required_width - << ", delta_width: " << delta_width << llendl; showGestureButton(true); } - if (available_width > 0 && processShowButton(mMovementPanel, &available_width)) + if (available_width > 0 && processShowButton(mMovementPanel, &available_width, &buttons_required_width)) { mResizeState |= RS_BUTTON_MOVEMENT | compensative_view_item_mask; - delta_width -= mMovementPanel->getRect().getWidth(); - buttons_required_width += mMovementPanel->getRect().getWidth(); lldebugs << "RS_BUTTON_MOVEMENT" << ", buttons_required_width: " << buttons_required_width - << ", delta_width: " << delta_width << llendl; showMoveButton(true); } - if (available_width > 0 && processShowButton(mCamPanel, &available_width)) + if (available_width > 0 && processShowButton(mCamPanel, &available_width, &buttons_required_width)) { mResizeState |= RS_BUTTON_CAMERA | compensative_view_item_mask; - delta_width -= mCamPanel->getRect().getWidth(); - buttons_required_width += mCamPanel->getRect().getWidth(); lldebugs << "RS_BUTTON_CAMERA " << ", buttons_required_width: " << buttons_required_width - << ", delta_width: " << delta_width << llendl; showCameraButton(true); } - if (available_width > 0 && processShowButton(mSnapshotPanel, &available_width)) + if (available_width > 0 && processShowButton(mSnapshotPanel, &available_width, &buttons_required_width)) { mResizeState |= RS_BUTTON_SNAPSHOT | compensative_view_item_mask; - delta_width -= mSnapshotPanel->getRect().getWidth(); - buttons_required_width += mSnapshotPanel->getRect().getWidth(); lldebugs << "RS_BUTTON_SNAPSHOT" << ", buttons_required_width: " << buttons_required_width - << ", delta_width: " << delta_width << llendl; showSnapshotButton(true); } - S32 total_delta_width = width - height; + S32 total_delta_width = new_width - cur_width; // if we have to show some buttons but whidth increasing is not enough... if (buttons_required_width > 0 && total_delta_width < buttons_required_width) @@ -639,8 +616,11 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) } } -// TODO: mantipov: probably need delta_width -= buttons_required_width & remove calculating from the buttons processing - // how many space can nearby chat take? + + // shown buttons take some space, rest should be processed by nearby chatbar & chiclet panels + delta_width -= buttons_required_width; + + // how many space can nearby chatbar take? S32 chatbar_panel_width_ = mNearbyChatBar->getRect().getWidth(); if (delta_width > 0 && chatbar_panel_width_ < chatbar_panel_max_width) { @@ -661,7 +641,7 @@ void LLBottomTray::updateResizeState(S32 width, S32 height) lldebugs << "New resize state: " << mResizeState << llendl; } -bool LLBottomTray::processShowButton(LLPanel* panel, S32* available_width) +bool LLBottomTray::processShowButton(LLPanel* panel, S32* available_width, S32* buttons_required_width) { bool can_be_shown = canButtonBeShown(panel); if (can_be_shown) @@ -672,6 +652,7 @@ bool LLBottomTray::processShowButton(LLPanel* panel, S32* available_width) if (can_be_shown) { *available_width -= required_width; + *buttons_required_width += required_width; } } -- cgit v1.2.3 From 3862e9721906d2bbdf61cfcc4d6970a24ce7e6e0 Mon Sep 17 00:00:00 2001 From: Mike Antipov Date: Wed, 11 Nov 2009 16:17:29 +0200 Subject: Work on major sub-task EXT-991 (Update bottom bar behavior on resize) Code refactored: - processShowButton() now gets type of buttons should be shown instead of object - removed unnecessary code --HG-- branch : product-engine --- indra/newview/llbottomtray.cpp | 98 ++++++++++++++++++++---------------------- 1 file changed, 46 insertions(+), 52 deletions(-) (limited to 'indra/newview/llbottomtray.cpp') diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index 0ebf9947e3..08b1847887 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -75,6 +75,8 @@ LLBottomTray::LLBottomTray(const LLSD&) //destroyed LLBottomTray requires some subsystems that are long gone LLUI::getRootView()->addChild(this); + initStateProcessedObjectMap(); + // Necessary for focus movement among child controls setFocusRoot(TRUE); } @@ -255,21 +257,6 @@ void LLBottomTray::showSnapshotButton(BOOL visible) mSnapshotPanel->setVisible(visible); } -typedef enum e_resize_status_type -{ - RS_NORESIZE = 0x0000 - , RS_CHICLET_PANEL = 0x0001 - , RS_CHATBAR_INPUT = 0x0002 - , RS_BUTTON_SNAPSHOT = 0x0004 - , RS_BUTTON_CAMERA = 0x0008 - , RS_BUTTON_MOVEMENT = 0x0010 - , RS_BUTTON_GESTURES = 0x0020 - , RS_BUTTON_SPEAK = 0x0040 - , RS_RESIZABLE_BUTTONS = /*RS_BUTTON_SNAPSHOT | */RS_BUTTON_CAMERA | RS_BUTTON_MOVEMENT | RS_BUTTON_GESTURES -}EResizeState; - - - namespace { const std::string& PANEL_CHICLET_NAME = "chiclet_list_panel"; @@ -306,7 +293,7 @@ void LLBottomTray::log(LLView* panel, const std::string& descr) { if (NULL == panel) return; LLView* layout = panel->getParent(); - llwarns << descr << ": " + lldebugs << descr << ": " << "panel: " << panel->getName() << ", rect: " << panel->getRect() @@ -379,7 +366,6 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent) void LLBottomTray::updateResizeState(S32 new_width, S32 cur_width) { mResizeState = RS_NORESIZE; - static MASK prev_resize_state = mResizeState; MASK compensative_view_item_mask = RS_CHATBAR_INPUT; LLPanel* compansative_view = mNearbyChatBar; @@ -543,43 +529,28 @@ void LLBottomTray::updateResizeState(S32 new_width, S32 cur_width) S32 available_width_chiclet = chiclet_panel_width - chiclet_panel_min_width; S32 available_width = delta_width + chatbar_available_shrink_width + available_width_chiclet; S32 buttons_required_width = 0; //How many room will take shown buttons - if (available_width > 0 && processShowButton(mGesturePanel, &available_width, &buttons_required_width)) + if (available_width > 0) { - mResizeState |= RS_BUTTON_GESTURES | compensative_view_item_mask; - lldebugs << "RS_BUTTON_GESTURES" - << ", buttons_required_width: " << buttons_required_width - << llendl; - showGestureButton(true); + lldebugs << "Trying to process: RS_BUTTON_GESTURES" << llendl; + processShowButton(RS_BUTTON_GESTURES, &available_width, &buttons_required_width); } - if (available_width > 0 && processShowButton(mMovementPanel, &available_width, &buttons_required_width)) + if (available_width > 0) { - mResizeState |= RS_BUTTON_MOVEMENT | compensative_view_item_mask; - - lldebugs << "RS_BUTTON_MOVEMENT" - << ", buttons_required_width: " << buttons_required_width - << llendl; - showMoveButton(true); + lldebugs << "Trying to process: RS_BUTTON_MOVEMENT" << llendl; + processShowButton(RS_BUTTON_MOVEMENT, &available_width, &buttons_required_width); } - if (available_width > 0 && processShowButton(mCamPanel, &available_width, &buttons_required_width)) + if (available_width > 0) { - mResizeState |= RS_BUTTON_CAMERA | compensative_view_item_mask; - - lldebugs << "RS_BUTTON_CAMERA " - << ", buttons_required_width: " << buttons_required_width - << llendl; - showCameraButton(true); + lldebugs << "Trying to process: RS_BUTTON_CAMERA" << llendl; + processShowButton(RS_BUTTON_CAMERA, &available_width, &buttons_required_width); } - if (available_width > 0 && processShowButton(mSnapshotPanel, &available_width, &buttons_required_width)) + if (available_width > 0) { - mResizeState |= RS_BUTTON_SNAPSHOT | compensative_view_item_mask; - - lldebugs << "RS_BUTTON_SNAPSHOT" - << ", buttons_required_width: " << buttons_required_width - << llendl; - showSnapshotButton(true); + lldebugs << "Trying to process: RS_BUTTON_SNAPSHOT" << llendl; + processShowButton(RS_BUTTON_SNAPSHOT, &available_width, &buttons_required_width); } S32 total_delta_width = new_width - cur_width; @@ -587,6 +558,8 @@ void LLBottomTray::updateResizeState(S32 new_width, S32 cur_width) // if we have to show some buttons but whidth increasing is not enough... if (buttons_required_width > 0 && total_delta_width < buttons_required_width) { + mResizeState |= compensative_view_item_mask; + // ... let's shrink nearby chat & chiclet panels S32 required_to_process_width = buttons_required_width; @@ -630,19 +603,19 @@ void LLBottomTray::updateResizeState(S32 new_width, S32 cur_width) delta_width -= delta_panel_max; mNearbyChatBar->reshape(chatbar_panel_width_ + delta_panel, mNearbyChatBar->getRect().getHeight()); } - - if (delta_width > 0) - { - mResizeState |= RS_CHICLET_PANEL; - } } - prev_resize_state = mResizeState; lldebugs << "New resize state: " << mResizeState << llendl; } -bool LLBottomTray::processShowButton(LLPanel* panel, S32* available_width, S32* buttons_required_width) +bool LLBottomTray::processShowButton(EResizeState shown_object_type, S32* available_width, S32* buttons_required_width) { + LLPanel* panel = mStateProcessedObjectMap[shown_object_type]; + if (NULL == panel) + { + lldebugs << "There is no object to process for state: " << shown_object_type << llendl; + return false; + } bool can_be_shown = canButtonBeShown(panel); if (can_be_shown) { @@ -653,8 +626,21 @@ bool LLBottomTray::processShowButton(LLPanel* panel, S32* available_width, S32* { *available_width -= required_width; *buttons_required_width += required_width; - } + switch (shown_object_type) + { + case RS_BUTTON_GESTURES: showGestureButton(true); break; + case RS_BUTTON_MOVEMENT: showMoveButton(true); break; + case RS_BUTTON_CAMERA: showCameraButton(true); break; + case RS_BUTTON_SNAPSHOT: showSnapshotButton(true); break; + default: + llwarns << "Unexpected type of button to be shown: " << shown_object_type << llendl; + } + + lldebugs << "processing object type: " << shown_object_type + << ", buttons_required_width: " << buttons_required_width + << llendl; + } } return can_be_shown; } @@ -668,4 +654,12 @@ bool LLBottomTray::canButtonBeShown(LLPanel* panel) const } return can_be_shown; } + +void LLBottomTray::initStateProcessedObjectMap() +{ + mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_GESTURES, mGesturePanel)); + mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_MOVEMENT, mMovementPanel)); + mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_CAMERA, mCamPanel)); + mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_SNAPSHOT, mSnapshotPanel)); +} //EOF -- cgit v1.2.3 From 454c02102c71e39fc0d844a1ae8bd70873de01a1 Mon Sep 17 00:00:00 2001 From: Mike Antipov Date: Wed, 11 Nov 2009 16:42:18 +0200 Subject: Work on major sub-task EXT-991 (Update bottom bar behavior on resize) Code refactored: - moved code to process width increasing into separate method --HG-- branch : product-engine --- indra/newview/llbottomtray.cpp | 140 +++++++++++++++++++++++------------------ 1 file changed, 78 insertions(+), 62 deletions(-) (limited to 'indra/newview/llbottomtray.cpp') diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index 08b1847887..9ff6c05acc 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -525,87 +525,103 @@ void LLBottomTray::updateResizeState(S32 new_width, S32 cur_width) // bottom tray is widen else { - S32 chatbar_available_shrink_width = chatbar_panel_width - chatbar_panel_min_width; - S32 available_width_chiclet = chiclet_panel_width - chiclet_panel_min_width; - S32 available_width = delta_width + chatbar_available_shrink_width + available_width_chiclet; - S32 buttons_required_width = 0; //How many room will take shown buttons - if (available_width > 0) - { - lldebugs << "Trying to process: RS_BUTTON_GESTURES" << llendl; - processShowButton(RS_BUTTON_GESTURES, &available_width, &buttons_required_width); - } + processWidthIncreased(delta_width); + } - if (available_width > 0) - { - lldebugs << "Trying to process: RS_BUTTON_MOVEMENT" << llendl; - processShowButton(RS_BUTTON_MOVEMENT, &available_width, &buttons_required_width); - } + lldebugs << "New resize state: " << mResizeState << llendl; +} - if (available_width > 0) - { - lldebugs << "Trying to process: RS_BUTTON_CAMERA" << llendl; - processShowButton(RS_BUTTON_CAMERA, &available_width, &buttons_required_width); - } +void LLBottomTray::processWidthDecreased(S32 delta_width) +{ - if (available_width > 0) - { - lldebugs << "Trying to process: RS_BUTTON_SNAPSHOT" << llendl; - processShowButton(RS_BUTTON_SNAPSHOT, &available_width, &buttons_required_width); - } +} - S32 total_delta_width = new_width - cur_width; +void LLBottomTray::processWidthIncreased(S32 delta_width) +{ + const S32 chiclet_panel_width = mChicletPanel->getParent()->getRect().getWidth(); + const S32 chiclet_panel_min_width = mChicletPanel->getMinWidth(); - // if we have to show some buttons but whidth increasing is not enough... - if (buttons_required_width > 0 && total_delta_width < buttons_required_width) - { - mResizeState |= compensative_view_item_mask; + const S32 chatbar_panel_width = mNearbyChatBar->getRect().getWidth(); + const S32 chatbar_panel_min_width = mNearbyChatBar->getMinWidth(); + const S32 chatbar_panel_max_width = mNearbyChatBar->getMaxWidth(); - // ... let's shrink nearby chat & chiclet panels - S32 required_to_process_width = buttons_required_width; + const S32 chatbar_available_shrink_width = chatbar_panel_width - chatbar_panel_min_width; + const S32 available_width_chiclet = chiclet_panel_width - chiclet_panel_min_width; - // 1. use delta width of resizing - required_to_process_width -= total_delta_width; + // how many room we have to show hidden buttons + S32 available_width = delta_width + chatbar_available_shrink_width + available_width_chiclet; + S32 buttons_required_width = 0; //How many room will take shown buttons - // 2. use delta width available via decreasing of nearby chat panel - S32 chatbar_shrink_width = required_to_process_width; - if (chatbar_available_shrink_width < chatbar_shrink_width) - { - chatbar_shrink_width = chatbar_available_shrink_width; - } + if (available_width > 0) + { + lldebugs << "Trying to process: RS_BUTTON_GESTURES" << llendl; + processShowButton(RS_BUTTON_GESTURES, &available_width, &buttons_required_width); + } - log(compansative_view, "increase width: before applying compensative width: "); - compansative_view->reshape(compansative_view->getRect().getWidth() - chatbar_shrink_width, compansative_view->getRect().getHeight() ); - if (compansative_view) log(compansative_view, "after applying compensative width: "); - lldebugs << chatbar_shrink_width << llendl; + if (available_width > 0) + { + lldebugs << "Trying to process: RS_BUTTON_MOVEMENT" << llendl; + processShowButton(RS_BUTTON_MOVEMENT, &available_width, &buttons_required_width); + } - // 3. use delta width available via decreasing of chiclet panel - required_to_process_width -= chatbar_shrink_width; + if (available_width > 0) + { + lldebugs << "Trying to process: RS_BUTTON_CAMERA" << llendl; + processShowButton(RS_BUTTON_CAMERA, &available_width, &buttons_required_width); + } - if (required_to_process_width > 0) - { - mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - required_to_process_width, mChicletPanel->getParent()->getRect().getHeight()); - log(mChicletPanel, "after applying compensative width for chiclets: "); - lldebugs << required_to_process_width << llendl; - } + if (available_width > 0) + { + lldebugs << "Trying to process: RS_BUTTON_SNAPSHOT" << llendl; + processShowButton(RS_BUTTON_SNAPSHOT, &available_width, &buttons_required_width); + } + // if we have to show some buttons but whidth increasing is not enough... + if (buttons_required_width > 0 && delta_width < buttons_required_width) + { + // ... let's shrink nearby chat & chiclet panels + S32 required_to_process_width = buttons_required_width; + + // 1. use delta width of resizing + required_to_process_width -= delta_width; + + // 2. use width available via decreasing of nearby chat panel + S32 chatbar_shrink_width = required_to_process_width; + if (chatbar_available_shrink_width < chatbar_shrink_width) + { + chatbar_shrink_width = chatbar_available_shrink_width; } - // shown buttons take some space, rest should be processed by nearby chatbar & chiclet panels - delta_width -= buttons_required_width; + log(mNearbyChatBar, "increase width: before applying compensative width: "); + mNearbyChatBar->reshape(mNearbyChatBar->getRect().getWidth() - chatbar_shrink_width, mNearbyChatBar->getRect().getHeight() ); + if (mNearbyChatBar) log(mNearbyChatBar, "after applying compensative width: "); + lldebugs << chatbar_shrink_width << llendl; + + // 3. use width available via decreasing of chiclet panel + required_to_process_width -= chatbar_shrink_width; - // how many space can nearby chatbar take? - S32 chatbar_panel_width_ = mNearbyChatBar->getRect().getWidth(); - if (delta_width > 0 && chatbar_panel_width_ < chatbar_panel_max_width) + if (required_to_process_width > 0) { - mResizeState |= RS_CHATBAR_INPUT; - S32 delta_panel_max = chatbar_panel_max_width - chatbar_panel_width_; - S32 delta_panel = llmin(delta_width, delta_panel_max); - delta_width -= delta_panel_max; - mNearbyChatBar->reshape(chatbar_panel_width_ + delta_panel, mNearbyChatBar->getRect().getHeight()); + mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - required_to_process_width, mChicletPanel->getParent()->getRect().getHeight()); + log(mChicletPanel, "after applying compensative width for chiclets: "); + lldebugs << required_to_process_width << llendl; } + } - lldebugs << "New resize state: " << mResizeState << llendl; + // shown buttons take some space, rest should be processed by nearby chatbar & chiclet panels + delta_width -= buttons_required_width; + + // how many space can nearby chatbar take? + S32 chatbar_panel_width_ = mNearbyChatBar->getRect().getWidth(); + if (delta_width > 0 && chatbar_panel_width_ < chatbar_panel_max_width) + { + mResizeState |= RS_CHATBAR_INPUT; + S32 delta_panel_max = chatbar_panel_max_width - chatbar_panel_width_; + S32 delta_panel = llmin(delta_width, delta_panel_max); + delta_width -= delta_panel_max; + mNearbyChatBar->reshape(chatbar_panel_width_ + delta_panel, mNearbyChatBar->getRect().getHeight()); + } } bool LLBottomTray::processShowButton(EResizeState shown_object_type, S32* available_width, S32* buttons_required_width) -- cgit v1.2.3 From fcb99c30407d6ccbae17ea4c3d17a65037ca6a5c Mon Sep 17 00:00:00 2001 From: Mike Antipov Date: Thu, 12 Nov 2009 17:43:23 +0200 Subject: Work on major sub-task EXT-991 (Update bottom bar behavior on resize) Code refuctored: - moved code to process Borrom Bar shrinking into separate method - unified code to process a hiding of the Bottom Tray's buttons Code is ready to process shrink after min width is reached & be synchronized with user hidden buttons --HG-- branch : product-engine --- indra/newview/llbottomtray.cpp | 264 ++++++++++++++++++++--------------------- 1 file changed, 126 insertions(+), 138 deletions(-) (limited to 'indra/newview/llbottomtray.cpp') diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index 204d7d23fa..291f645ea2 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -238,22 +238,22 @@ void LLBottomTray::showBottomTrayContextMenu(S32 x, S32 y, MASK mask) void LLBottomTray::showGestureButton(BOOL visible) { - mGesturePanel->setVisible(visible); + showTrayButton(RS_BUTTON_GESTURES, visible); } void LLBottomTray::showMoveButton(BOOL visible) { - mMovementPanel->setVisible(visible); + showTrayButton(RS_BUTTON_MOVEMENT, visible); } void LLBottomTray::showCameraButton(BOOL visible) { - mCamPanel->setVisible(visible); + showTrayButton(RS_BUTTON_CAMERA, visible); } void LLBottomTray::showSnapshotButton(BOOL visible) { - mSnapshotPanel->setVisible(visible); + showTrayButton(RS_BUTTON_SNAPSHOT, visible); } namespace @@ -365,8 +365,6 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent) void LLBottomTray::updateResizeState(S32 new_width, S32 cur_width) { mResizeState = RS_NORESIZE; - MASK compensative_view_item_mask = RS_CHATBAR_INPUT; - LLPanel* compansative_view = mNearbyChatBar; S32 delta_width = new_width - cur_width; // if (delta_width == 0) return; @@ -386,153 +384,113 @@ void LLBottomTray::updateResizeState(S32 new_width, S32 cur_width) << ", chiclet_panel_min_width: " << chiclet_panel_min_width << llendl; - bool still_should_be_processed = true; // bottom tray is narrowed if (shrink) { - S32 compensative_delta_width = 0; - if (chiclet_panel_width > chiclet_panel_min_width) - { - // we have some space to decrease chiclet panel - S32 panel_delta_min = chiclet_panel_width - chiclet_panel_min_width; - mResizeState |= RS_CHICLET_PANEL; - - S32 delta_panel = llmin(-delta_width, panel_delta_min); + processWidthDecreased(delta_width); + } + // bottom tray is widen + else + { + processWidthIncreased(delta_width); + } - lldebugs << "delta_width: " << delta_width - << ", panel_delta_min: " << panel_delta_min - << ", delta_panel: " << delta_panel - << llendl; + lldebugs << "New resize state: " << mResizeState << llendl; +} - // is chiclet panel width enough to process resizing? - delta_width += panel_delta_min; +void LLBottomTray::processWidthDecreased(S32 delta_width) +{ + bool still_should_be_processed = true; - still_should_be_processed = delta_width < 0; + const S32 chiclet_panel_width = mChicletPanel->getParent()->getRect().getWidth(); + const S32 chiclet_panel_min_width = mChicletPanel->getMinWidth(); - mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - delta_panel, mChicletPanel->getParent()->getRect().getHeight()); - log(mChicletPanel, "after processing panel decreasing via chiclet panel"); + if (chiclet_panel_width > chiclet_panel_min_width) + { + // we have some space to decrease chiclet panel + S32 panel_delta_min = chiclet_panel_width - chiclet_panel_min_width; + mResizeState |= RS_CHICLET_PANEL; - lldebugs << "RS_CHICLET_PANEL" - << ", delta_width: " << delta_width - << llendl; - } - - if (still_should_be_processed && chatbar_panel_width > chatbar_panel_min_width) - { - // we have some space to decrease chatbar panel - S32 panel_delta_min = chatbar_panel_width - chatbar_panel_min_width; - mResizeState |= RS_CHATBAR_INPUT; + S32 delta_panel = llmin(-delta_width, panel_delta_min); - S32 delta_panel = llmin(-delta_width, panel_delta_min); + lldebugs << "delta_width: " << delta_width + << ", panel_delta_min: " << panel_delta_min + << ", delta_panel: " << delta_panel + << llendl; - // is chatbar panel width enough to process resizing? - delta_width += panel_delta_min; - + // is chiclet panel width enough to process resizing? + delta_width += panel_delta_min; - still_should_be_processed = delta_width < 0; + still_should_be_processed = delta_width < 0; - mNearbyChatBar->reshape(mNearbyChatBar->getRect().getWidth() - delta_panel, mNearbyChatBar->getRect().getHeight()); + mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - delta_panel, mChicletPanel->getParent()->getRect().getHeight()); + log(mChicletPanel, "after processing panel decreasing via chiclet panel"); - lldebugs << "RS_CHATBAR_INPUT" - << ", delta_panel: " << delta_panel - << ", delta_width: " << delta_width - << llendl; + lldebugs << "RS_CHICLET_PANEL" + << ", delta_width: " << delta_width + << llendl; + } - log(mChicletPanel, "after nearby was processed"); + const S32 chatbar_panel_width = mNearbyChatBar->getRect().getWidth(); + const S32 chatbar_panel_min_width = mNearbyChatBar->getMinWidth(); + if (still_should_be_processed && chatbar_panel_width > chatbar_panel_min_width) + { + // we have some space to decrease chatbar panel + S32 panel_delta_min = chatbar_panel_width - chatbar_panel_min_width; + mResizeState |= RS_CHATBAR_INPUT; - } - if (still_should_be_processed) - { - mResizeState |= compensative_view_item_mask; + S32 delta_panel = llmin(-delta_width, panel_delta_min); - if (mSnapshotPanel->getVisible()) - { - mResizeState |= RS_BUTTON_SNAPSHOT; - delta_width += mSnapshotPanel->getRect().getWidth(); - - if (delta_width > 0) - { - compensative_delta_width += delta_width; - } - lldebugs << "RS_BUTTON_SNAPSHOT" - << ", compensative_delta_width: " << compensative_delta_width - << ", delta_width: " << delta_width - << llendl; - showSnapshotButton(false); - } + // is chatbar panel width enough to process resizing? + delta_width += panel_delta_min; - if (delta_width < 0 && mCamPanel->getVisible()) - { - mResizeState |= RS_BUTTON_CAMERA; - delta_width += mCamPanel->getRect().getWidth(); - if (delta_width > 0) - { - compensative_delta_width += delta_width; - } - lldebugs << "RS_BUTTON_CAMERA" - << ", compensative_delta_width: " << compensative_delta_width - << ", delta_width: " << delta_width - << llendl; - showCameraButton(false); - } - if (delta_width < 0 && mMovementPanel->getVisible()) - { - mResizeState |= RS_BUTTON_MOVEMENT; - delta_width += mMovementPanel->getRect().getWidth(); - if (delta_width > 0) - { - compensative_delta_width += delta_width; - } - lldebugs << "RS_BUTTON_MOVEMENT" - << ", compensative_delta_width: " << compensative_delta_width - << ", delta_width: " << delta_width - << llendl; - showMoveButton(false); - } + still_should_be_processed = delta_width < 0; - if (delta_width < 0 && mGesturePanel->getVisible()) - { - mResizeState |= RS_BUTTON_GESTURES; - delta_width += mGesturePanel->getRect().getWidth(); - if (delta_width > 0) - { - compensative_delta_width += delta_width; - } - lldebugs << "RS_BUTTON_GESTURES" - << ", compensative_delta_width: " << compensative_delta_width - << ", delta_width: " << delta_width - << llendl; - showGestureButton(false); - } + mNearbyChatBar->reshape(mNearbyChatBar->getRect().getWidth() - delta_panel, mNearbyChatBar->getRect().getHeight()); - if (delta_width < 0) - { - llwarns << "WARNING: there is no enough room for bottom tray, resizing still should be processed" << llendl; - } + lldebugs << "RS_CHATBAR_INPUT" + << ", delta_panel: " << delta_panel + << ", delta_width: " << delta_width + << llendl; - if (compensative_delta_width != 0) - { - if (compansative_view) log(compansative_view, "before applying compensative width: "); - compansative_view->reshape(compansative_view->getRect().getWidth() + compensative_delta_width, compansative_view->getRect().getHeight() ); - if (compansative_view) log(compansative_view, "after applying compensative width: "); - lldebugs << compensative_delta_width << llendl; + log(mChicletPanel, "after nearby was processed"); - } - } } - // bottom tray is widen - else + + S32 buttons_freed_width = 0; + if (still_should_be_processed) { - processWidthIncreased(delta_width); - } + processHideButton(RS_BUTTON_SNAPSHOT, &delta_width, &buttons_freed_width); - lldebugs << "New resize state: " << mResizeState << llendl; -} + if (delta_width < 0) + { + processHideButton(RS_BUTTON_CAMERA, &delta_width, &buttons_freed_width); + } -void LLBottomTray::processWidthDecreased(S32 delta_width) -{ + if (delta_width < 0) + { + processHideButton(RS_BUTTON_MOVEMENT, &delta_width, &buttons_freed_width); + } + if (delta_width < 0) + { + processHideButton(RS_BUTTON_GESTURES, &delta_width, &buttons_freed_width); + } + + if (delta_width < 0) + { + llwarns << "WARNING: there is no enough room for bottom tray, resizing still should be processed" << llendl; + } + + if (buttons_freed_width > 0) + { + log(mNearbyChatBar, "before applying compensative width"); + mNearbyChatBar->reshape(mNearbyChatBar->getRect().getWidth() + buttons_freed_width, mNearbyChatBar->getRect().getHeight() ); + log(mNearbyChatBar, "after applying compensative width"); + lldebugs << buttons_freed_width << llendl; + } + } } void LLBottomTray::processWidthIncreased(S32 delta_width) @@ -591,9 +549,9 @@ void LLBottomTray::processWidthIncreased(S32 delta_width) chatbar_shrink_width = chatbar_available_shrink_width; } - log(mNearbyChatBar, "increase width: before applying compensative width: "); + log(mNearbyChatBar, "increase width: before applying compensative width"); mNearbyChatBar->reshape(mNearbyChatBar->getRect().getWidth() - chatbar_shrink_width, mNearbyChatBar->getRect().getHeight() ); - if (mNearbyChatBar) log(mNearbyChatBar, "after applying compensative width: "); + if (mNearbyChatBar) log(mNearbyChatBar, "after applying compensative width"); lldebugs << chatbar_shrink_width << llendl; // 3. use width available via decreasing of chiclet panel @@ -642,24 +600,42 @@ bool LLBottomTray::processShowButton(EResizeState shown_object_type, S32* availa *available_width -= required_width; *buttons_required_width += required_width; - switch (shown_object_type) - { - case RS_BUTTON_GESTURES: showGestureButton(true); break; - case RS_BUTTON_MOVEMENT: showMoveButton(true); break; - case RS_BUTTON_CAMERA: showCameraButton(true); break; - case RS_BUTTON_SNAPSHOT: showSnapshotButton(true); break; - default: - llwarns << "Unexpected type of button to be shown: " << shown_object_type << llendl; - } + showTrayButton(shown_object_type, true); lldebugs << "processing object type: " << shown_object_type - << ", buttons_required_width: " << buttons_required_width + << ", buttons_required_width: " << *buttons_required_width << llendl; } } return can_be_shown; } +void LLBottomTray::processHideButton(EResizeState shown_object_type, S32* required_width, S32* buttons_freed_width) +{ + LLPanel* panel = mStateProcessedObjectMap[shown_object_type]; + if (NULL == panel) + { + lldebugs << "There is no object to process for state: " << shown_object_type << llendl; + return; + } + + if (panel->getVisible()) + { + *required_width += panel->getRect().getWidth(); + + if (*required_width > 0) + { + *buttons_freed_width += *required_width; + } + + showTrayButton(shown_object_type, false); + + lldebugs << "processing object type: " << shown_object_type + << ", buttons_freed_width: " << *buttons_freed_width + << llendl; + } +} + bool LLBottomTray::canButtonBeShown(LLPanel* panel) const { bool can_be_shown = !panel->getVisible(); @@ -677,4 +653,16 @@ void LLBottomTray::initStateProcessedObjectMap() mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_CAMERA, mCamPanel)); mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_SNAPSHOT, mSnapshotPanel)); } + +void LLBottomTray::showTrayButton(EResizeState shown_object_type, bool visible) +{ + LLPanel* panel = mStateProcessedObjectMap[shown_object_type]; + if (NULL == panel) + { + lldebugs << "There is no object to show for state: " << shown_object_type << llendl; + return; + } + + panel->setVisible(visible); +} //EOF -- cgit v1.2.3