#ifndef LITEHTML_FLOATS_HOLDER_H
#define LITEHTML_FLOATS_HOLDER_H
#include
#include "types.h"
namespace litehtml
{
class formatting_context
{
private:
std::list m_floats_left;
std::list m_floats_right;
int_int_cache m_cache_line_left;
int_int_cache m_cache_line_right;
int m_current_top;
int m_current_left;
public:
formatting_context() : m_current_top(0), m_current_left(0) {}
void push_position(int x, int y)
{
m_current_left += x;
m_current_top += y;
}
void pop_position(int x, int y)
{
m_current_left -= x;
m_current_top -= y;
}
void add_float(const std::shared_ptr &el, int min_width, int context);
void clear_floats(int context);
int find_next_line_top( int top, int width, int def_right );
int get_floats_height(element_float el_float = float_none) const;
int get_left_floats_height() const;
int get_right_floats_height() const;
int get_line_left( int y );
void get_line_left_right( int y, int def_right, int& ln_left, int& ln_right )
{
ln_left = get_line_left(y);
ln_right = get_line_right(y, def_right);
}
int get_line_right( int y, int def_right );
int get_cleared_top(const std::shared_ptr &el, int line_top) const;
void update_floats(int dy, const std::shared_ptr &parent);
void apply_relative_shift(const containing_block_context &containing_block_size);
int find_min_left(int y, int context_idx);
int find_min_right(int y, int right, int context_idx);
};
}
#endif //LITEHTML_FLOATS_HOLDER_H