#pragma once
#include <vector>
#include "taitank_flex.h"
namespace taitank {
class TaitankNode;
typedef TaitankNode* TaitankNodeRef;
enum FlexSign {
PositiveFlexibility,
NegativeFlexibility,
};
class FlexLine {
public:
explicit FlexLine(TaitankNodeRef container);
void AddItem(TaitankNodeRef item);
bool IsEmpty();
FlexSign Sign() const {
return sum_hypothetical_main_size_ < container_main_inner_size_ ? PositiveFlexibility
: NegativeFlexibility;
}
void SetContainerMainInnerSize(float size) { container_main_inner_size_ = size; }
void FreezeViolations(std::vector<TaitankNode*>& violations);
void FreezeInflexibleItems(FlexLayoutAction layoutAction);
bool ResolveFlexibleLengths();
void AlignItems();
public:
std::vector<TaitankNodeRef> items_;
TaitankNodeRef flex_container_;
float container_main_inner_size_;
float sum_hypothetical_main_size_;
float total_flex_grow_;
float total_flex_shrink_;
float total_weighted_flex_shrink_;
float line_cross_size_;
float initial_free_space_;
float remaining_free_space_;
};
}