std::list<Block *>::iterator ScreenData::split_out_row_from_block(std::list<Block *>::iterator it, int row_in_block) { int lines = (*it)->lineCount(); if (row_in_block == 0 && lines == 1) return it; if (row_in_block == 0) { auto insert_before = (*it)->takeLine(0); insert_before->setScreenIndex(row_in_block); m_block_count++; return m_screen_blocks.insert(it,insert_before); } else if (row_in_block == lines -1) { auto insert_after = (*it)->takeLine(lines -1); insert_after->setScreenIndex(row_in_block); ++it; m_block_count++; return m_screen_blocks.insert(it, insert_after); } auto half = (*it)->split(row_in_block); ++it; auto it_width_first = m_screen_blocks.insert(it, half); auto the_one = half->takeLine(0); m_block_count+=2; return m_screen_blocks.insert(it_width_first,the_one); }
std::string takeLine( int& lineno ){ lineno = next_line_idx; return takeLine(); }