diff --git a/src/renderer/sw_engine/tvgSwRle.cpp b/src/renderer/sw_engine/tvgSwRle.cpp index a994fcf2..36e67842 100644 --- a/src/renderer/sw_engine/tvgSwRle.cpp +++ b/src/renderer/sw_engine/tvgSwRle.cpp @@ -451,17 +451,17 @@ static bool _setCell(RleWorker& rw, SwPoint pos) min_ex - 1 horizontal position. */ pos -= rw.cellMin; - if (pos.x > rw.cellMax.x) pos.x = rw.cellMax.x; + //exceptions + if (pos.x < 0) pos.x = -1; + else if (pos.x > rw.cellMax.x) pos.x = rw.cellMax.x; //Are we moving to a different cell? if (pos != rw.cellPos) { //Record the current one if it is valid if (!rw.invalid && !_recordCell(rw)) return false; + rw.area = rw.cover = 0; + rw.cellPos = pos; } - - rw.area = 0; - rw.cover = 0; - rw.cellPos = pos; rw.invalid = ((unsigned)pos.y >= (unsigned)rw.cellYCnt || pos.x >= rw.cellXCnt); return true;