| #ifndef _RIVE_VIRTUALIZING_COMPONENT_HPP_ |
| #define _RIVE_VIRTUALIZING_COMPONENT_HPP_ |
| #include "rive/math/vec2d.hpp" |
| #include <stdio.h> |
| namespace rive |
| { |
| |
| enum class VirtualizedDirection |
| { |
| horizontal, |
| vertical |
| }; |
| |
| class Virtualizable |
| { |
| public: |
| virtual Component* virtualizableComponent() = 0; |
| }; |
| |
| class VirtualizingComponent |
| { |
| public: |
| static VirtualizingComponent* from(Component* component); |
| virtual bool virtualizationEnabled() = 0; |
| virtual int itemCount() = 0; |
| virtual Virtualizable* item(int index) = 0; |
| virtual Vec2D size() = 0; |
| virtual Vec2D itemSize(int index) = 0; |
| virtual void setItemSize(Vec2D size, int index) = 0; |
| virtual void addVirtualizable(int index) = 0; |
| virtual void virtualizableChanged() = 0; |
| virtual void removeVirtualizable(int index) = 0; |
| // Items on screen. Only these report their measured size back, otherwise |
| // realizing an off screen item would change the sizes the virtualizer |
| // sums to pick this very range. |
| virtual void setVisibleIndices(int start, int end) = 0; |
| // Items that exist: the visible range plus the buffer on either side. |
| // These are the ones that get drawn. |
| virtual void setRealizedIndices(int start, int end) = 0; |
| virtual void setVirtualizablePosition(int index, Vec2D position) = 0; |
| }; |
| } // namespace rive |
| |
| #endif |