Fix segfault when using magic fill outside map

This commit is contained in:
Diegoisawesome 2019-01-06 12:31:58 -06:00
parent 0c673323a7
commit 22efbc9480

View file

@ -260,22 +260,25 @@ void MapPixmapItem::magicFill(QGraphicsSceneMouseEvent *event) {
int initialX = static_cast<int>(pos.x()) / 16; int initialX = static_cast<int>(pos.x()) / 16;
int initialY = static_cast<int>(pos.y()) / 16; int initialY = static_cast<int>(pos.y()) / 16;
Block *block = map->getBlock(initialX, initialY); Block *block = map->getBlock(initialX, initialY);
QList<uint16_t> *selectedMetatiles = this->metatileSelector->getSelectedMetatiles();
QPoint selectionDimensions = this->metatileSelector->getSelectionDimensions();
uint16_t tile = block->tile;
for (int y = 0; y < map->getHeight(); y++) { if (block) {
for (int x = 0; x < map->getWidth(); x++) { QList<uint16_t> *selectedMetatiles = this->metatileSelector->getSelectedMetatiles();
block = map->getBlock(x, y); QPoint selectionDimensions = this->metatileSelector->getSelectionDimensions();
if (block && block->tile == tile) { uint16_t tile = block->tile;
int xDiff = x - initialX;
int yDiff = y - initialY; for (int y = 0; y < map->getHeight(); y++) {
int i = xDiff % selectionDimensions.x(); for (int x = 0; x < map->getWidth(); x++) {
int j = yDiff % selectionDimensions.y(); block = map->getBlock(x, y);
if (i < 0) i = selectionDimensions.x() + i; if (block && block->tile == tile) {
if (j < 0) j = selectionDimensions.y() + j; int xDiff = x - initialX;
block->tile = selectedMetatiles->at(j * selectionDimensions.x() + i); int yDiff = y - initialY;
map->_setBlock(x, y, *block); int i = xDiff % selectionDimensions.x();
int j = yDiff % selectionDimensions.y();
if (i < 0) i = selectionDimensions.x() + i;
if (j < 0) j = selectionDimensions.y() + j;
block->tile = selectedMetatiles->at(j * selectionDimensions.x() + i);
map->_setBlock(x, y, *block);
}
} }
} }
} }