Пример #1
0
void litehtml::line_box::new_width( int left, int right, elements_vector& els )
{
	int add = left - m_box_left;
	if(add)
	{
		m_box_left	= left;
		m_box_right	= right;
		m_width = 0;
		auto remove_begin = m_items.end();
		for (auto i = m_items.begin() + 1; i != m_items.end(); i++)
		{
			element::ptr el = (*i);

			if(!el->m_skip)
			{
				if(m_box_left + m_width + el->width() + el->get_inline_shift_right() + el->get_inline_shift_left() > m_box_right)
				{
					remove_begin = i;
					break;
				} else
				{
					el->m_pos.x += add;
					m_width += el->width() + el->get_inline_shift_right() + el->get_inline_shift_left();
				}
			}
		}
		if(remove_begin != m_items.end())
		{
			els.insert(els.begin(), remove_begin, m_items.end());
			m_items.erase(remove_begin, m_items.end());

			for(const auto& el : els)
			{
				el->m_box = 0;
			}
		}
	}
}
Пример #2
0
void litehtml::line::get_elements( elements_vector& els )
{
	els.insert(els.begin(), m_items.begin(), m_items.end());
}