diff --git a/src/Screen.cpp b/src/Screen.cpp index 117edb00..0944d7a9 100644 --- a/src/Screen.cpp +++ b/src/Screen.cpp @@ -790,6 +790,7 @@ void Screen::displayCharacter(uint c) // ensure current line vector has enough elements if (_screenLines[_cuY].size() < _cuX + w) { + _screenLines[_cuY].reserve(_columns); _screenLines[_cuY].resize(_cuX + w); } @@ -1005,15 +1006,17 @@ void Screen::moveImage(int dest, int sourceBegin, int sourceEnd) //so it matters that we do the copy in the right order - //forwards if dest < sourceBegin or backwards otherwise. //(search the web for 'memmove implementation' for details) + const int destY = dest / _columns; + const int srcY = sourceBegin / _columns; if (dest < sourceBegin) { for (int i = 0; i <= lines; i++) { - _screenLines[(dest / _columns) + i ] = _screenLines[(sourceBegin / _columns) + i ]; - _lineProperties[(dest / _columns) + i] = _lineProperties[(sourceBegin / _columns) + i]; + _screenLines[destY + i] = std::move(_screenLines[srcY + i]); + _lineProperties[destY + i] = _lineProperties[srcY + i]; } } else { for (int i = lines; i >= 0; i--) { - _screenLines[(dest / _columns) + i ] = _screenLines[(sourceBegin / _columns) + i ]; - _lineProperties[(dest / _columns) + i] = _lineProperties[(sourceBegin / _columns) + i]; + _screenLines[destY + i ] = std::move(_screenLines[srcY + i]); + _lineProperties[destY + i] = _lineProperties[srcY + i]; } }