void CGUIBaseContainer::ProcessItem(float posX, float posY, CGUIListItemPtr& item, bool focused, unsigned int currentTime, CDirtyRegionList &dirtyregions) { if (!m_focusedLayout || !m_layout) return; // set the origin g_graphicsContext.SetOrigin(posX, posY); if (m_bInvalidated) item->SetInvalid(); if (focused) { if (!item->GetFocusedLayout()) { CGUIListItemLayout *layout = new CGUIListItemLayout(*m_focusedLayout); item->SetFocusedLayout(layout); } if (item->GetFocusedLayout()) { if (item != m_lastItem || !HasFocus()) { item->GetFocusedLayout()->SetFocusedItem(0); } if (item != m_lastItem && HasFocus()) { item->GetFocusedLayout()->ResetAnimation(ANIM_TYPE_UNFOCUS); unsigned int subItem = 1; if (m_lastItem && m_lastItem->GetFocusedLayout()) subItem = m_lastItem->GetFocusedLayout()->GetFocusedItem(); item->GetFocusedLayout()->SetFocusedItem(subItem ? subItem : 1); } item->GetFocusedLayout()->Process(item.get(), m_parentID, currentTime, dirtyregions); } m_lastItem = item; } else { if (item->GetFocusedLayout()) item->GetFocusedLayout()->SetFocusedItem(0); // focus is not set if (!item->GetLayout()) { CGUIListItemLayout *layout = new CGUIListItemLayout(*m_layout); item->SetLayout(layout); } if (item->GetFocusedLayout()) item->GetFocusedLayout()->Process(item.get(), m_parentID, currentTime, dirtyregions); if (item->GetLayout()) item->GetLayout()->Process(item.get(), m_parentID, currentTime, dirtyregions); } g_graphicsContext.RestoreOrigin(); }
CGUIListItemLayout *CGUIBaseContainer::GetFocusedLayout() const { CGUIListItemPtr item = GetListItem(0); if (item.get()) return item->GetFocusedLayout(); return NULL; }