Something went wrong. Try again.
art software for the rest of us
drawing paint image sdl art
Something went wrong. Try again.
1.4 kB · 49 lines
C
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950#pragma once
#include "../../Widgets/Widget.h"#include <cstddef>#include <functional>#include <memory>#include <vector>
namespace UI {
class VirtualizingGridLayout : public Widget { std::size_t itemCount; float reasonableColumnWidth; float spacing; float maximumRowHeight; float overscan; std::function<Size(std::size_t)> itemSizeProvider; std::function<std::unique_ptr<Widget>(std::size_t)> itemFactory; std::vector<float> rowHeights; std::vector<float> rowOffsets; std::size_t columnCount = 1; std::size_t visibleStartRow = 0; std::size_t visibleEndRow = 0; float scrollOffset = 0.0f; bool hasVisibleRange = false;
std::size_t CalculateColumnCount(float availableWidth) const; float CalculateColumnWidth(float availableWidth) const; void RebuildMetrics(float availableWidth); bool UpdateVisibleChildren(); void ArrangeChildInCell(Widget* child, Rect cellBounds) const;
public: VirtualizingGridLayout( std::size_t itemCount, float reasonableColumnWidth, float spacing, float maximumRowHeight, float overscan, std::function<Size(std::size_t)> itemSizeProvider, std::function<std::unique_ptr<Widget>(std::size_t)> itemFactory );
void Measure(Size availableSpace) override; void Arrange(Rect finalBounds) override; void SetScrollOffset(Point offset) override;};
}