void CGUIListGroup::SelectItemFromPoint(const CPoint &point) { CPoint controlCoords(point); m_transform.InverseTransformPosition(controlCoords.x, controlCoords.y); for (iControls it = m_children.begin(); it != m_children.end(); ++it) { CGUIControl *child = *it; if (child->GetControlType() == CGUIControl::GUICONTROL_LISTGROUP) static_cast<CGUIListGroup*>(child)->SelectItemFromPoint(point); } }
void CGUIControlGroup::UnfocusFromPoint(const CPoint &point) { CPoint controlCoords(point); m_transform.InverseTransformPosition(controlCoords.x, controlCoords.y); controlCoords -= GetPosition(); for (iControls it = m_children.begin(); it != m_children.end(); ++it) { CGUIControl *child = *it; child->UnfocusFromPoint(controlCoords); } CGUIControl::UnfocusFromPoint(point); }
void CGUIListGroup::SelectItemFromPoint(const CPoint &point) { CPoint controlCoords(point); m_transform.InverseTransformPosition(controlCoords.x, controlCoords.y); for (iControls it = m_children.begin(); it != m_children.end(); ++it) { CGUIControl *child = *it; if (child->GetControlType() == CGUIControl::GUICONTROL_MULTISELECT) ((CGUIMultiSelectTextControl *)child)->SelectItemFromPoint(point); else if (child->GetControlType() == CGUIControl::GUICONTROL_LISTGROUP) ((CGUIListGroup *)child)->SelectItemFromPoint(point); } }
void CGUIControlGroupList::UnfocusFromPoint(const CPoint &point) { float pos = 0; CPoint controlCoords(point); m_transform.InverseTransformPosition(controlCoords.x, controlCoords.y); for (iControls it = m_children.begin(); it != m_children.end(); ++it) { CGUIControl *child = *it; if (child->IsVisible()) { if (pos + Size(child) > m_offset && pos < m_offset + Size()) { // we're on screen CPoint offset = (m_orientation == VERTICAL) ? CPoint(m_posX, m_posY + pos - m_offset) : CPoint(m_posX + pos - m_offset, m_posY); child->UnfocusFromPoint(controlCoords - offset); } pos += Size(child) + m_itemGap; } } CGUIControl::UnfocusFromPoint(point); }
bool CGUIControlGroupList::CanFocusFromPoint(const CPoint &point, CGUIControl **control, CPoint &controlPoint) const { if (!CGUIControl::CanFocus()) return false; float pos = 0; CPoint controlCoords(point); m_transform.InverseTransformPosition(controlCoords.x, controlCoords.y); for (ciControls it = m_children.begin(); it != m_children.end(); ++it) { const CGUIControl *child = *it; if (child->IsVisible()) { if (pos + Size(child) > m_offset && pos < m_offset + Size()) { // we're on screen float offsetX = m_orientation == VERTICAL ? m_posX : m_posX + pos - m_offset; float offsetY = m_orientation == VERTICAL ? m_posY + pos - m_offset : m_posY; if (child->CanFocusFromPoint(controlCoords - CPoint(offsetX, offsetY), control, controlPoint)) return true; } pos += Size(child) + m_itemGap; } } *control = NULL; return false; }