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; } } } }
void litehtml::line::get_elements( elements_vector& els ) { els.insert(els.begin(), m_items.begin(), m_items.end()); }
void litehtml::block_box::get_elements( elements_vector& els ) { els.push_back(m_element); }