Something went wrong. Try again.
art software for the rest of us
drawing paint image sdl art
Something went wrong. Try again.
1.6 kB · 54 lines
C
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455#pragma once
#include "../../Widgets/Widget.h"#include <cstddef>#include <functional>#include <memory>#include <vector>#include "../Engine/Geometry.h"
namespace UI {
enum class VirtualizingStackSizing { Fixed, // use size provider Fill // use available space/page layout};
class VirtualizingStackLayout : public Widget { std::size_t itemCount; float spacing; float overscan; std::function<Size(std::size_t)> itemSizeProvider; std::function<std::unique_ptr<Widget>(std::size_t)> itemFactory; VirtualizingStackSizing sizing; std::vector<Size> itemSizes; std::vector<float> itemOffsets; std::size_t visibleStart = 0; std::size_t visibleEnd = 0; float scrollOffset = 0.0f; bool hasVisibleRange = false; Size metricsSpace{-1.0f, -1.0f}; // available space
Size ViewportExtent() const; Size ResolveAvailableSpace(Size availableSpace) const; void RebuildMetrics(Size availableSpace); bool UpdateVisibleChildren(); std::size_t FindFirstVisibleIndex(float start) const; std::size_t FindLastVisibleIndex(float end) const;
public: VirtualizingStackLayout( std::size_t itemCount, float spacing, float overscan, std::function<Size(std::size_t)> itemSizeProvider, std::function<std::unique_ptr<Widget>(std::size_t)> itemFactory, VirtualizingStackSizing sizing = VirtualizingStackSizing::Fixed );
void Measure(Size availableSpace) override; void Arrange(Rect finalBounds) override; void SetScrollOffset(Point offset) override;};
}