Changeset View
Changeset View
Standalone View
Standalone View
ps/trunk/source/gui/ObjectTypes/CList.cpp
Show First 20 Lines • Show All 298 Lines • ▼ Show 20 Lines | |||||
void CList::Draw() | void CList::Draw() | ||||
{ | { | ||||
DrawList(m_Selected, m_Sprite, m_SpriteSelectArea, m_TextColor); | DrawList(m_Selected, m_Sprite, m_SpriteSelectArea, m_TextColor); | ||||
} | } | ||||
void CList::DrawList(const int& selected, const CGUISpriteInstance& sprite, const CGUISpriteInstance& sprite_selectarea, const CGUIColor& textcolor) | void CList::DrawList(const int& selected, const CGUISpriteInstance& sprite, const CGUISpriteInstance& sprite_selectarea, const CGUIColor& textcolor) | ||||
{ | { | ||||
float bz = GetBufferedZ(); | |||||
{ | |||||
CRect rect = GetListRect(); | CRect rect = GetListRect(); | ||||
m_pGUI.DrawSprite(sprite, bz, rect); | m_pGUI.DrawSprite(sprite, rect); | ||||
float scroll = 0.f; | float scroll = 0.f; | ||||
if (m_ScrollBar) | if (m_ScrollBar) | ||||
scroll = GetScrollBar(0).GetPos(); | scroll = GetScrollBar(0).GetPos(); | ||||
if (selected >= 0 && selected+1 < (int)m_ItemsYPositions.size()) | if (selected >= 0 && selected+1 < (int)m_ItemsYPositions.size()) | ||||
{ | { | ||||
// Get rectangle of selection: | // Get rectangle of selection: | ||||
CRect rect_sel(rect.left, rect.top + m_ItemsYPositions[selected] - scroll, | CRect rect_sel( | ||||
rect.left, rect.top + m_ItemsYPositions[selected] - scroll, | |||||
rect.right, rect.top + m_ItemsYPositions[selected+1] - scroll); | rect.right, rect.top + m_ItemsYPositions[selected+1] - scroll); | ||||
if (rect_sel.top <= rect.bottom && | if (rect_sel.top <= rect.bottom && | ||||
rect_sel.bottom >= rect.top) | rect_sel.bottom >= rect.top) | ||||
{ | { | ||||
if (rect_sel.bottom > rect.bottom) | if (rect_sel.bottom > rect.bottom) | ||||
rect_sel.bottom = rect.bottom; | rect_sel.bottom = rect.bottom; | ||||
if (rect_sel.top < rect.top) | if (rect_sel.top < rect.top) | ||||
rect_sel.top = rect.top; | rect_sel.top = rect.top; | ||||
if (m_ScrollBar) | if (m_ScrollBar) | ||||
{ | { | ||||
// Remove any overlapping area of the scrollbar. | // Remove any overlapping area of the scrollbar. | ||||
if (rect_sel.right > GetScrollBar(0).GetOuterRect().left && | if (rect_sel.right > GetScrollBar(0).GetOuterRect().left && | ||||
rect_sel.right <= GetScrollBar(0).GetOuterRect().right) | rect_sel.right <= GetScrollBar(0).GetOuterRect().right) | ||||
rect_sel.right = GetScrollBar(0).GetOuterRect().left; | rect_sel.right = GetScrollBar(0).GetOuterRect().left; | ||||
if (rect_sel.left >= GetScrollBar(0).GetOuterRect().left && | if (rect_sel.left >= GetScrollBar(0).GetOuterRect().left && | ||||
rect_sel.left < GetScrollBar(0).GetOuterRect().right) | rect_sel.left < GetScrollBar(0).GetOuterRect().right) | ||||
rect_sel.left = GetScrollBar(0).GetOuterRect().right; | rect_sel.left = GetScrollBar(0).GetOuterRect().right; | ||||
} | } | ||||
m_pGUI.DrawSprite(sprite_selectarea, bz + 0.05f, rect_sel); | m_pGUI.DrawSprite(sprite_selectarea, rect_sel); | ||||
} | } | ||||
} | } | ||||
for (size_t i = 0; i < m_List->m_Items.size(); ++i) | for (size_t i = 0; i < m_List->m_Items.size(); ++i) | ||||
{ | { | ||||
if (m_ItemsYPositions[i+1] - scroll < 0 || | if (m_ItemsYPositions[i+1] - scroll < 0 || | ||||
m_ItemsYPositions[i] - scroll > rect.GetHeight()) | m_ItemsYPositions[i] - scroll > rect.GetHeight()) | ||||
continue; | continue; | ||||
// Clipping area (we'll have to substract the scrollbar) | // Clipping area (we'll have to substract the scrollbar) | ||||
CRect cliparea = GetListRect(); | CRect cliparea = GetListRect(); | ||||
if (m_ScrollBar) | if (m_ScrollBar) | ||||
{ | { | ||||
if (cliparea.right > GetScrollBar(0).GetOuterRect().left && | if (cliparea.right > GetScrollBar(0).GetOuterRect().left && | ||||
cliparea.right <= GetScrollBar(0).GetOuterRect().right) | cliparea.right <= GetScrollBar(0).GetOuterRect().right) | ||||
cliparea.right = GetScrollBar(0).GetOuterRect().left; | cliparea.right = GetScrollBar(0).GetOuterRect().left; | ||||
if (cliparea.left >= GetScrollBar(0).GetOuterRect().left && | if (cliparea.left >= GetScrollBar(0).GetOuterRect().left && | ||||
cliparea.left < GetScrollBar(0).GetOuterRect().right) | cliparea.left < GetScrollBar(0).GetOuterRect().right) | ||||
cliparea.left = GetScrollBar(0).GetOuterRect().right; | cliparea.left = GetScrollBar(0).GetOuterRect().right; | ||||
} | } | ||||
DrawText(i, textcolor, rect.TopLeft() - CVector2D(0.f, scroll - m_ItemsYPositions[i]), bz + 0.1f, cliparea); | DrawText(i, textcolor, rect.TopLeft() - CVector2D(0.f, scroll - m_ItemsYPositions[i]), cliparea); | ||||
} | |||||
} | } | ||||
if (m_ScrollBar) | if (m_ScrollBar) | ||||
IGUIScrollBarOwner::Draw(); | IGUIScrollBarOwner::Draw(); | ||||
} | } | ||||
void CList::AddItem(const CGUIString& str, const CGUIString& data) | void CList::AddItem(const CGUIString& str, const CGUIString& data) | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 102 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator