Fix segfault when using magic fill outside map
This commit is contained in:
parent
0c673323a7
commit
22efbc9480
1 changed files with 18 additions and 15 deletions
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue