Skip to content

Commit c2674d8

Browse files
committed
Make tileset atlas grid generation optional
Signed-off-by: Tomas Slusny <[email protected]>
1 parent 84abbb3 commit c2674d8

File tree

4 files changed

+24
-10
lines changed

4 files changed

+24
-10
lines changed

src/libtiled/tileset.cpp

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ bool Tileset::loadImage()
246246
return initializeTilesetTiles();
247247
}
248248

249-
bool Tileset::initializeTilesetTiles()
249+
bool Tileset::initializeTilesetTiles(bool forceGeneration)
250250
{
251251
if (mImage.isNull() || mTileWidth <= 0 || mTileHeight <= 0)
252252
return false;
@@ -256,12 +256,7 @@ bool Tileset::initializeTilesetTiles()
256256

257257
bool needsRectGeneration = true;
258258
if (isAtlas()) {
259-
for (Tile *tile : std::as_const(mTiles)) {
260-
if (!tile->imageRect().isNull()) {
261-
needsRectGeneration = false;
262-
break;
263-
}
264-
}
259+
needsRectGeneration = forceGeneration;
265260
}
266261

267262
if (needsRectGeneration) {

src/libtiled/tileset.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ class TILEDSHARED_EXPORT Tileset : public Object, public QEnableSharedFromThis<T
201201
bool loadFromImage(const QImage &image, const QString &source);
202202
bool loadFromImage(const QString &fileName);
203203
bool loadImage();
204-
bool initializeTilesetTiles();
204+
bool initializeTilesetTiles(bool forceGeneration=false);
205205

206206
SharedTileset findSimilarTileset(const QVector<SharedTileset> &tilesets) const;
207207

src/tiled/newtilesetdialog.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ static SessionOption<int> tilesetType { "tileset.type" };
4040
static SessionOption<bool> embedInMap { "tileset.embedInMap" };
4141
static SessionOption<bool> useTransparentColor { "tileset.useTransparentColor" };
4242
static SessionOption<QColor> transparentColor { "tileset.transparentColor", Qt::magenta };
43+
static SessionOption<bool> generateGrid { "tileset.generateGrid", true };
4344
static SessionOption<QSize> tileSize { "tileset.tileSize", QSize(32, 32) };
4445
static SessionOption<int> tilesetSpacing { "tileset.spacing" };
4546
static SessionOption<int> tilesetMargin { "tileset.margin" };
@@ -77,6 +78,7 @@ NewTilesetDialog::NewTilesetDialog(QWidget *parent) :
7778
mUi->embedded->setChecked(session::embedInMap);
7879
mUi->useTransparentColor->setChecked(session::useTransparentColor);
7980
mUi->colorButton->setColor(session::transparentColor);
81+
mUi->generateGrid->setChecked(session::generateGrid);
8082
mUi->tileWidth->setValue(tileSize.width());
8183
mUi->tileHeight->setValue(tileSize.height());
8284
mUi->spacing->setValue(session::tilesetSpacing);
@@ -97,6 +99,7 @@ NewTilesetDialog::NewTilesetDialog(QWidget *parent) :
9799
connect(mUi->buttonBox, &QDialogButtonBox::rejected, this, &NewTilesetDialog::reject);
98100

99101
mUi->imageGroupBox->setVisible(session::tilesetType < 2);
102+
mUi->generateGrid->setVisible(session::tilesetType == 1);
100103
updateOkButton();
101104
}
102105

@@ -202,6 +205,7 @@ void NewTilesetDialog::tryAccept()
202205
const int tileHeight = mUi->tileHeight->value();
203206
const int spacing = mUi->spacing->value();
204207
const int margin = mUi->margin->value();
208+
const bool generateGrid = mUi->generateGrid->isChecked();
205209

206210
tileset = Tileset::create(name,
207211
tileWidth, tileHeight,
@@ -219,7 +223,11 @@ void NewTilesetDialog::tryAccept()
219223
return;
220224
}
221225

222-
if (tileset->tileCount() == 0) {
226+
if (tileset->isAtlas() && generateGrid) {
227+
tileset->initializeTilesetTiles(true);
228+
}
229+
230+
if (tileset->tileCount() == 0 && (!tileset->isAtlas() || generateGrid)) {
223231
QMessageBox::critical(this, tr("Error"),
224232
tr("No tiles found in the tileset image "
225233
"when using the given tile size, "
@@ -287,6 +295,7 @@ void NewTilesetDialog::nameEdited(const QString &name)
287295
void NewTilesetDialog::tilesetTypeChanged(int index)
288296
{
289297
mUi->imageGroupBox->setVisible(index < 2);
298+
mUi->generateGrid->setVisible(index == 1);
290299
updateOkButton();
291300
}
292301

src/tiled/newtilesetdialog.ui

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,17 @@
166166
</property>
167167
</spacer>
168168
</item>
169-
<item row="2" column="0" colspan="6">
169+
<item row="2" column="0">
170+
<widget class="QCheckBox" name="generateGrid">
171+
<property name="text">
172+
<string>Generate grid</string>
173+
</property>
174+
<property name="checked">
175+
<bool>true</bool>
176+
</property>
177+
</widget>
178+
</item>
179+
<item row="3" column="0" colspan="6">
170180
<layout class="QGridLayout" name="gridLayout_3">
171181
<item row="1" column="1">
172182
<widget class="QSpinBox" name="tileHeight">

0 commit comments

Comments
 (0)