gridviewport.cpp (1176B)
1 #include "gridviewport.h" 2 3 #include "grid.h" 4 5 namespace jucePluginEditorLib::patchManager 6 { 7 GridViewport::GridViewport(Grid& _grid) : m_grid(_grid) 8 { 9 setWantsKeyboardFocus(false); 10 } 11 12 void GridViewport::visibleAreaChanged(const juce::Rectangle<int>& _area) 13 { 14 Viewport::visibleAreaChanged(_area); 15 16 m_grid.setVisibleItemRange(getItemRangeFromArea(_area)); 17 } 18 19 std::pair<int, int> GridViewport::getItemRangeFromArea(const juce::Rectangle<int>& _area) const 20 { 21 const auto xOffset = static_cast<float>(_area.getX()); 22 23 const auto firstColumn = static_cast<int>(xOffset / m_grid.getItemWidth()); 24 const auto lastColumn = static_cast<int>((xOffset + static_cast<float>(_area.getWidth()) + m_grid.getItemWidth() - 1.0f) / m_grid.getItemWidth()); 25 26 const auto rowCount = static_cast<int>(static_cast<float>(_area.getHeight()) / m_grid.getItemHeight()); 27 28 const auto firstItem = firstColumn * rowCount; 29 const auto itemCount = (lastColumn - firstColumn) * rowCount + rowCount; 30 31 return {firstItem, itemCount}; 32 } 33 34 int GridViewport::getVisibleRowCount() const 35 { 36 return static_cast<int>(static_cast<float>(getViewArea().getHeight()) / m_grid.getItemHeight()); 37 } 38 }