Ejemplo n.º 1
0
void GridView::updateCellAtIndex(int idx, int row)
{
    if (0 >= _cellCounts) return;
 
    GridViewCell* pCell = GridViewCell::create(Color4B(0, 0, 255, 255));
    pCell->setIdx(idx);
    pCell->setRow(row);
    pCell->setAnchorPoint(Vec2(0, 1));
    pCell->setContentSize(_cellSize);
    pCell->setPosition(cellPosition(idx, row));
    _container->addChild(pCell);
    insertCell(pCell, idx);
//    pCell->retain();
    
    _idxIndices.insert(idx);
}
Ejemplo n.º 2
0
    void Grid::updatePositionsOfAllWidgets()
    {
        sf::Vector2f position;
        sf::Vector2f previousPosition;

        // Calculate m_Size and the available space which will be distributed when widgets will be positionned.
        sf::Vector2f availableSpace;
        m_Size = m_IntendedSize;
        sf::Vector2f minSize = getMinSize();

        if (m_IntendedSize.x > minSize.x)
            availableSpace.x = m_IntendedSize.x - minSize.x;
        else
            m_Size.x = minSize.x;

        if (m_IntendedSize.y > minSize.y)
            availableSpace.y = m_IntendedSize.y - minSize.y;
        else
            m_Size.y = minSize.y;

        sf::Vector2f availSpaceOffset(0.5f * availableSpace.x / m_ColumnWidth.size(),
                                      0.5f * availableSpace.y / m_RowHeight.size());

        // Loop through all rows
        for (unsigned int row = 0; row < m_GridWidgets.size(); ++row)
        {
            // Remember the current position
            previousPosition = position;

            // Loop through all widgets in the row
            for (unsigned int col = 0; col < m_GridWidgets[row].size(); ++col)
            {
                if (m_GridWidgets[row][col].get() == nullptr)
                {
                    position.x += m_ColumnWidth[col] + 2 * availSpaceOffset.x;
                    continue;
                }

                sf::Vector2f cellPosition(position);

                // Place the next widget on the correct position
                switch (m_ObjLayout[row][col])
                {
                case Layout::UpperLeft:
                    cellPosition.x += static_cast<float>(m_ObjBorders[row][col].left) + availSpaceOffset.x;
                    cellPosition.y += static_cast<float>(m_ObjBorders[row][col].top) + availSpaceOffset.y;
                    break;

                case Layout::Up:
                    cellPosition.x += m_ObjBorders[row][col].left + (((m_ColumnWidth[col] - m_ObjBorders[row][col].left - m_ObjBorders[row][col].right) - m_GridWidgets[row][col]->getFullSize().x) / 2.f) + availSpaceOffset.x;
                    cellPosition.y += static_cast<float>(m_ObjBorders[row][col].top) + availSpaceOffset.y;
                    break;

                case Layout::UpperRight:
                    cellPosition.x += m_ColumnWidth[col] - m_ObjBorders[row][col].right - m_GridWidgets[row][col]->getFullSize().x + availSpaceOffset.x;
                    cellPosition.y += static_cast<float>(m_ObjBorders[row][col].top) + availSpaceOffset.y;
                    break;

                case Layout::Right:
                    cellPosition.x += m_ColumnWidth[col] - m_ObjBorders[row][col].right - m_GridWidgets[row][col]->getFullSize().x + availSpaceOffset.x;
                    cellPosition.y += m_ObjBorders[row][col].top + (((m_RowHeight[row] - m_ObjBorders[row][col].top - m_ObjBorders[row][col].bottom) - m_GridWidgets[row][col]->getFullSize().y) / 2.f) + availSpaceOffset.y;
                    break;

                case Layout::BottomRight:
                    cellPosition.x += m_ColumnWidth[col] - m_ObjBorders[row][col].right - m_GridWidgets[row][col]->getFullSize().x + availSpaceOffset.x;
                    cellPosition.y += m_RowHeight[row] - m_ObjBorders[row][col].bottom - m_GridWidgets[row][col]->getFullSize().y + availSpaceOffset.y;
                    break;

                case Layout::Bottom:
                    cellPosition.x += m_ObjBorders[row][col].left + (((m_ColumnWidth[col] - m_ObjBorders[row][col].left - m_ObjBorders[row][col].right) - m_GridWidgets[row][col]->getFullSize().x) / 2.f) + availSpaceOffset.x;
                    cellPosition.y += m_RowHeight[row] - m_ObjBorders[row][col].bottom - m_GridWidgets[row][col]->getFullSize().y + availSpaceOffset.y;
                    break;

                case Layout::BottomLeft:
                    cellPosition.x += static_cast<float>(m_ObjBorders[row][col].left) + availSpaceOffset.x;
                    cellPosition.y += m_RowHeight[row] - m_ObjBorders[row][col].bottom - m_GridWidgets[row][col]->getFullSize().y + availSpaceOffset.y;
                    break;

                case Layout::Left:
                    cellPosition.x += static_cast<float>(m_ObjBorders[row][col].left) + availSpaceOffset.x;
                    cellPosition.y += m_ObjBorders[row][col].top + (((m_RowHeight[row] - m_ObjBorders[row][col].top - m_ObjBorders[row][col].bottom) - m_GridWidgets[row][col]->getFullSize().y) / 2.f) + availSpaceOffset.y;
                    break;

                case Layout::Center:
                    cellPosition.x += m_ObjBorders[row][col].left + (((m_ColumnWidth[col] - m_ObjBorders[row][col].left - m_ObjBorders[row][col].right) - m_GridWidgets[row][col]->getFullSize().x) / 2.f) + availSpaceOffset.x;
                    cellPosition.y += m_ObjBorders[row][col].top + (((m_RowHeight[row] - m_ObjBorders[row][col].top - m_ObjBorders[row][col].bottom) - m_GridWidgets[row][col]->getFullSize().y) / 2.f) + availSpaceOffset.y;
                    break;
                }

                m_GridWidgets[row][col]->setPosition(cellPosition);
                position.x += m_ColumnWidth[col] + 2 * availSpaceOffset.x;
            }

            // Go to the next row
            position = previousPosition;
            position.y += m_RowHeight[row] + 2 * availSpaceOffset.y;
        }
    }