bool CGUITextBox::OnMessage(CGUIMessage& message) { if (message.GetControlId() == GetID()) { if (message.GetMessage() == GUI_MSG_LABEL_SET) { m_offset = 0; m_scrollOffset = 0; ResetAutoScrolling(); CGUITextLayout::Reset(); m_info.SetLabel(message.GetLabel(), "", GetParentID()); } if (message.GetMessage() == GUI_MSG_LABEL_RESET) { m_offset = 0; m_scrollOffset = 0; ResetAutoScrolling(); CGUITextLayout::Reset(); UpdatePageControl(); SetInvalid(); } if (message.GetMessage() == GUI_MSG_PAGE_CHANGE) { if (message.GetSenderId() == m_pageControl) { // update our page Scroll(message.GetParam1()); return true; } } } return CGUIControl::OnMessage(message); }
void CGUIBaseContainer::Reset() { m_wasReset = true; m_items.clear(); m_lastItem.reset(); ResetAutoScrolling(); }
void CGUITextBox::Scroll(unsigned int offset) { ResetAutoScrolling(); if (m_lines.size() <= m_itemsPerPage) return; // no need to scroll if (offset > m_lines.size() - m_itemsPerPage) offset = m_lines.size() - m_itemsPerPage; // on last page ScrollToOffset(offset); }
void CGUIBaseContainer::DoProcess(unsigned int currentTime, CDirtyRegionList &dirtyregions) { CGUIControl::DoProcess(currentTime, dirtyregions); if (m_pageChangeTimer.IsRunning() && m_pageChangeTimer.GetElapsedMilliseconds() > 200) m_pageChangeTimer.Stop(); m_wasReset = false; // if not visible, we reset the autoscroll timer if (!IsVisible() && m_autoScrollMoveTime) { ResetAutoScrolling(); } }
void CGUITextBox::DoProcess(unsigned int currentTime, CDirtyRegionList &dirtyregions) { CGUIControl::DoProcess(currentTime, dirtyregions); // if not visible, we reset the autoscroll timer and positioning if (!IsVisible() && m_autoScrollTime) { ResetAutoScrolling(); m_lastRenderTime = 0; m_offset = 0; m_scrollOffset = 0; m_scrollSpeed = 0; } }
void CGUIBaseContainer::UpdateAutoScrolling(unsigned int currentTime) { if (m_autoScrollCondition && m_autoScrollCondition->Get()) { if (m_lastRenderTime) m_autoScrollDelayTime += currentTime - m_lastRenderTime; if (m_autoScrollDelayTime > (unsigned int)m_autoScrollMoveTime && !m_scroller.IsScrolling()) { // delay is finished - start moving m_autoScrollDelayTime = 0; // Move up or down whether reversed moving is true or false m_autoScrollIsReversed ? MoveUp(true) : MoveDown(true); } } else ResetAutoScrolling(); }
void CGUITextBox::UpdateInfo(const CGUIListItem *item) { m_textColor = m_label.textColor; if (!CGUITextLayout::Update(item ? m_info.GetItemLabel(item) : m_info.GetLabel(m_parentID), m_width)) return; // nothing changed // needed update, so reset to the top of the textbox and update our sizing/page control SetInvalid(); m_offset = 0; m_scrollOffset = 0; ResetAutoScrolling(); m_itemHeight = m_font ? m_font->GetLineHeight() : 10; float textHeight = m_font ? m_font->GetTextHeight(m_lines.size()) : m_itemHeight * m_lines.size(); float maxHeight = m_height ? m_height : textHeight; m_renderHeight = m_minHeight ? CLAMP(textHeight, m_minHeight, maxHeight) : m_height; m_itemsPerPage = (unsigned int)(m_renderHeight / m_itemHeight); UpdatePageControl(); }
// scrolls the said amount void CGUIBaseContainer::Scroll(int amount) { ResetAutoScrolling(); ScrollToOffset(GetOffset() + amount); }
void CGUITextBox::Process(unsigned int currentTime, CDirtyRegionList &dirtyregions) { // update our auto-scrolling as necessary if (m_autoScrollTime && m_lines.size() > m_itemsPerPage) { if ((!m_autoScrollCondition || m_autoScrollCondition->Get()) && !g_application.ScreenSaverDisablesAutoScrolling()) { if (m_lastRenderTime) m_autoScrollDelayTime += currentTime - m_lastRenderTime; if (m_autoScrollDelayTime > (unsigned int)m_autoScrollDelay && m_scrollSpeed == 0) { // delay is finished - start scrolling MarkDirtyRegion(); if (m_offset < (int)m_lines.size() - m_itemsPerPage) ScrollToOffset(m_offset + 1, true); else { // at the end, run a delay and restart if (m_autoScrollRepeatAnim) { if (m_autoScrollRepeatAnim->GetState() == ANIM_STATE_NONE) m_autoScrollRepeatAnim->QueueAnimation(ANIM_PROCESS_NORMAL); else if (m_autoScrollRepeatAnim->GetState() == ANIM_STATE_APPLIED) { // reset to the start of the list and start the scrolling again m_offset = 0; m_scrollOffset = 0; ResetAutoScrolling(); } } } } } else if (m_autoScrollCondition) ResetAutoScrolling(); // conditional is false, so reset the autoscrolling } // render the repeat anim as appropriate if (m_autoScrollRepeatAnim) { if (m_autoScrollRepeatAnim->GetProcess() != ANIM_PROCESS_NONE) MarkDirtyRegion(); m_autoScrollRepeatAnim->Animate(currentTime, true); TransformMatrix matrix; m_autoScrollRepeatAnim->RenderAnimation(matrix); m_cachedTextMatrix = g_graphicsContext.AddTransform(matrix); } // update our scroll position as necessary if (m_scrollSpeed != 0) MarkDirtyRegion(); if (m_lastRenderTime) m_scrollOffset += m_scrollSpeed * (currentTime - m_lastRenderTime); if ((m_scrollSpeed < 0 && m_scrollOffset < m_offset * m_itemHeight) || (m_scrollSpeed > 0 && m_scrollOffset > m_offset * m_itemHeight)) { m_scrollOffset = m_offset * m_itemHeight; m_scrollSpeed = 0; } m_lastRenderTime = currentTime; if (m_pageControl) { CGUIMessage msg(GUI_MSG_ITEM_SELECT, GetID(), m_pageControl, MathUtils::round_int(m_scrollOffset / m_itemHeight)); SendWindowMessage(msg); } CGUIControl::Process(currentTime, dirtyregions); if (m_autoScrollRepeatAnim) g_graphicsContext.RemoveTransform(); }