void CACollectionView::loadCollectionCell() { DRect rect = this->getBounds(); rect.origin = getContentOffset(); rect.origin.y -= rect.size.height * 0.1f; rect.size.height *= 1.2f; std::map<CAIndexPath3E, CACollectionViewCell*>::iterator itr; for (itr = m_mpUsedCollectionCells.begin(); itr != m_mpUsedCollectionCells.end(); itr++) { CC_CONTINUE_IF(itr->second != NULL); CAIndexPath3E r = itr->first; DRect cellRect = m_rUsedCollectionCellRects[r]; CC_CONTINUE_IF(!rect.intersectsRect(cellRect)); CACollectionViewCell* cell = m_pCollectionViewDataSource->collectionCellAtIndex(this, cellRect.size, r.section, r.row, r.item); if (cell) { cell->m_nSection = r.section; cell->m_nRow = r.row; cell->m_nItem = r.item; cell->updateDisplayedAlpha(this->getAlpha()); this->addSubview(cell); cell->setFrame(cellRect); itr->second = cell; m_vpUsedCollectionCells.pushBack(cell); if (m_pSelectedCollectionCells.count(r)) { cell->setControlState(CAControlStateSelected); } if (m_pCollectionViewDataSource) { m_pCollectionViewDataSource->collectionViewWillDisplayCellAtIndex(this, cell, r.section, r.row, r.item); } } } }
void CACollectionView::mouseMoved(CATouch* pTouch, CAEvent* pEvent) { if (m_bAllowsSelection) { DPoint point = m_pContainer->convertTouchToNodeSpace(pTouch); std::map<CAIndexPath3E, CACollectionViewCell*>::iterator itr; for (itr = m_mpUsedCollectionCells.begin(); itr != m_mpUsedCollectionCells.end(); ++itr) { CACollectionViewCell* cell = itr->second; CC_CONTINUE_IF(cell == NULL); if (cell->getFrame().containsPoint(point) && cell->isVisible()) { CC_BREAK_IF(cell->getControlState() == CAControlStateDisabled); if (m_pHighlightedCollectionCells) { CAIndexPath3E index = CAIndexPath3E(m_pHighlightedCollectionCells->getSection(), m_pHighlightedCollectionCells->getRow(), m_pHighlightedCollectionCells->getItem()); if (m_pSelectedCollectionCells.count(index)) { m_pHighlightedCollectionCells->setControlState(CAControlStateHighlighted); } else { m_pHighlightedCollectionCells->setControlState(CAControlStateNormal); } } m_pHighlightedCollectionCells = cell; cell->setControlState(CAControlStateHighlighted); break; } } } }