diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp index 2dbbc8525e..8bab6b5222 100755 --- a/indra/llui/lltabcontainer.cpp +++ b/indra/llui/lltabcontainer.cpp @@ -412,9 +412,30 @@ void LLTabContainer::draw() S32 cur_scroll_pos = getScrollPos(); if (cur_scroll_pos > 0) { - S32 available_width_with_arrows = getRect().getWidth() - mRightTabBtnOffset - 2 * (LLPANEL_BORDER_WIDTH + tabcntr_arrow_btn_size + tabcntr_arrow_btn_size + 1); - if (!mIsVertical) + // Fix vertical tab scrolling + // S32 available_width_with_arrows = getRect().getWidth() - mRightTabBtnOffset - 2 * (LLPANEL_BORDER_WIDTH + tabcntr_arrow_btn_size + tabcntr_arrow_btn_size + 1); + // if (!mIsVertical) + // { + S32 available_space_with_arrows; + if(mIsVertical) { + available_space_with_arrows=mPrevArrowBtn->getRect().mBottom-mNextArrowBtn->getRect().mTop; + } + else + { + available_space_with_arrows=getRect().getWidth()-mRightTabBtnOffset-2*(LLPANEL_BORDER_WIDTH+tabcntr_arrow_btn_size*2+1); + } + + S32 total_tab_pixels=0; + if(mIsVertical) + { + total_tab_pixels=getTabCount()*(BTN_HEIGHT+tabcntrv_pad); + target_pixel_scroll=cur_scroll_pos*(BTN_HEIGHT+tabcntrv_pad); + } + else + { + total_tab_pixels=mTotalTabWidth; + // for(tuple_list_t::iterator iter = mTabList.begin(); iter != mTabList.end(); ++iter) { if (cur_scroll_pos == 0) @@ -427,9 +448,15 @@ void LLTabContainer::draw() // Show part of the tab to the left of what is fully visible target_pixel_scroll -= tabcntr_tab_partial_width; - // clamp so that rightmost tab never leaves right side of screen - target_pixel_scroll = llmin(mTotalTabWidth - available_width_with_arrows, target_pixel_scroll); + // Fix vertical tab scrolling + // // clamp so that rightmost tab never leaves right side of screen + // target_pixel_scroll = llmin(mTotalTabWidth - available_width_with_arrows, target_pixel_scroll); + // } + // Fix vertical tab scrolling + // clamp so that last tab never leaves the side of screen + target_pixel_scroll=llmin(total_tab_pixels-available_space_with_arrows,target_pixel_scroll); + // } setScrollPosPixels((S32)lerp((F32)getScrollPosPixels(), (F32)target_pixel_scroll, LLCriticalDamp::getInterpolant(0.08f))); @@ -516,20 +543,21 @@ void LLTabContainer::draw() idx++; } - - if( mIsVertical && has_scroll_arrows ) - { - // Redraw the arrows so that they appears on top. - gGL.pushUIMatrix(); - gGL.translateUI((F32)mPrevArrowBtn->getRect().mLeft, (F32)mPrevArrowBtn->getRect().mBottom, 0.f); - mPrevArrowBtn->draw(); - gGL.popUIMatrix(); - - gGL.pushUIMatrix(); - gGL.translateUI((F32)mNextArrowBtn->getRect().mLeft, (F32)mNextArrowBtn->getRect().mBottom, 0.f); - mNextArrowBtn->draw(); - gGL.popUIMatrix(); - } + // Fix vertical tab scrolling + // if( mIsVertical && has_scroll_arrows ) + // { + // // Redraw the arrows so that they appears on top. + // gGL.pushUIMatrix(); + // gGL.translateUI((F32)mPrevArrowBtn->getRect().mLeft, (F32)mPrevArrowBtn->getRect().mBottom, 0.f); + // mPrevArrowBtn->draw(); + // gGL.popUIMatrix(); + // + // gGL.pushUIMatrix(); + // gGL.translateUI((F32)mNextArrowBtn->getRect().mLeft, (F32)mNextArrowBtn->getRect().mBottom, 0.f); + // mNextArrowBtn->draw(); + // gGL.popUIMatrix(); + // } + // } mPrevArrowBtn->setFlashing(false); @@ -603,14 +631,6 @@ BOOL LLTabContainer::handleMouseDown( S32 x, S32 y, MASK mask ) gFocusMgr.setMouseCapture(this); tab_button->setFocus(TRUE); } - // Fire-865; Scroll next/prev was not handled in IM tabs - else if (mPrevArrowBtn && mPrevArrowBtn->getRect().pointInRect(x, y)) - { - selectPrevTab(); - } - else if (mNextArrowBtn && mNextArrowBtn->getRect().pointInRect(x, y)) - selectNextTab(); - // } return handled; } @@ -1825,7 +1845,9 @@ void LLTabContainer::onNextBtn( const LLSD& data ) { if (!mScrolled) { - scrollNext(); + // scrollNext(); // Fix vertical tab scrolling + selectNextTab(); + setScrollPos(mCurrentTabIdx); } mScrolled = FALSE; } @@ -1835,7 +1857,9 @@ void LLTabContainer::onNextBtnHeld( const LLSD& data ) if (mScrollTimer.getElapsedTimeF32() > SCROLL_STEP_TIME) { mScrollTimer.reset(); - scrollNext(); + // scrollNext(); // Fix vertical tab scrolling + selectNextTab(); + setScrollPos(mCurrentTabIdx); mScrolled = TRUE; } } @@ -1844,7 +1868,9 @@ void LLTabContainer::onPrevBtn( const LLSD& data ) { if (!mScrolled) { - scrollPrev(); + // scrollPrev(); // Fix vertical tab scrolling + selectPrevTab(); + setScrollPos(mCurrentTabIdx); } mScrolled = FALSE; } @@ -1864,7 +1890,9 @@ void LLTabContainer::onPrevBtnHeld( const LLSD& data ) if (mScrollTimer.getElapsedTimeF32() > SCROLL_STEP_TIME) { mScrollTimer.reset(); - scrollPrev(); + // scrollPrev(); // Fix vertical tab scrolling + selectPrevTab(); + setScrollPos(mCurrentTabIdx); mScrolled = TRUE; } } @@ -1884,7 +1912,10 @@ void LLTabContainer::initButtons() static LLUICachedControl tabcntrv_arrow_btn_size ("UITabCntrvArrowBtnSize", 0); // Left and right scroll arrows (for when there are too many tabs to show all at once). S32 btn_top = getRect().getHeight(); - S32 btn_top_lower = getRect().mBottom+tabcntrv_arrow_btn_size; + // Fix vertical tab scrolling + // S32 btn_top_lower = getRect().mBottom+tabcntrv_arrow_btn_size; + S32 btn_top_lower=tabcntrv_arrow_btn_size; + // LLRect up_arrow_btn_rect; up_arrow_btn_rect.setLeftTopAndSize( mMinTabWidth/2 , btn_top, tabcntrv_arrow_btn_size, tabcntrv_arrow_btn_size ); @@ -1899,6 +1930,9 @@ void LLTabContainer::initButtons() prev_btn_params.image_unselected.name("scrollbutton_up_out_blue.tga"); prev_btn_params.image_selected.name("scrollbutton_up_in_blue.tga"); prev_btn_params.click_callback.function(boost::bind(&LLTabContainer::onPrevBtn, this, _2)); + // Fix vertical tab scrolling + prev_btn_params.mouse_held_callback.function(boost::bind(&LLTabContainer::onPrevBtnHeld, this, _2)); + // // Enable tab flashing prev_btn_params.button_flash_enable(LLUI::sSettingGroups["config"]->getBOOL("EnableButtonFlashing")); @@ -1915,6 +1949,9 @@ void LLTabContainer::initButtons() next_btn_params.image_unselected.name("scrollbutton_down_out_blue.tga"); next_btn_params.image_selected.name("scrollbutton_down_in_blue.tga"); next_btn_params.click_callback.function(boost::bind(&LLTabContainer::onNextBtn, this, _2)); + // Fix vertical tab scrolling + next_btn_params.mouse_held_callback.function(boost::bind(&LLTabContainer::onNextBtnHeld, this, _2)); + // // Enable tab flashing next_btn_params.button_flash_enable(LLUI::sSettingGroups["config"]->getBOOL("EnableButtonFlashing"));