Skip to content

Commit d537614

Browse files
committed
Add support for dynamic wrapping for atlas tileset
Signed-off-by: Tomas Slusny <[email protected]>
1 parent e786491 commit d537614

File tree

2 files changed

+21
-17
lines changed

2 files changed

+21
-17
lines changed

src/tiled/tilesetmodel.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ int TilesetModel::rowCount(const QModelIndex &parent) const
4949
if (parent.isValid())
5050
return 0;
5151

52-
if (tileset()->isAtlas())
52+
if (tileset()->isAtlas() && mColumnCountOverride <= 0)
5353
return 1;
5454

5555
const int tileCount = mTileIds.size();
@@ -82,7 +82,7 @@ int TilesetModel::columnCount(const QModelIndex &parent) const
8282

8383
QModelIndex TilesetModel::index(int row, int column, const QModelIndex &parent) const
8484
{
85-
if (tileset()->isAtlas())
85+
if (tileset()->isAtlas() && mColumnCountOverride <= 0)
8686
return createIndex(row, column);
8787

8888
return QAbstractListModel::index(row, column, parent);
@@ -111,7 +111,7 @@ Qt::ItemFlags TilesetModel::flags(const QModelIndex &index) const
111111
{
112112
Qt::ItemFlags defaultFlags = QAbstractListModel::flags(index);
113113

114-
if (tileset()->isAtlas() && index.column() == 0 && index.row() == 0)
114+
if (tileset()->isAtlas() && mColumnCountOverride <= 0 && index.column() == 0 && index.row() == 0)
115115
return defaultFlags & ~Qt::ItemIsSelectable;
116116

117117
defaultFlags |= Qt::ItemIsDropEnabled;
@@ -207,7 +207,7 @@ Tile *TilesetModel::tileAt(const QModelIndex &index) const
207207
if (!index.isValid())
208208
return nullptr;
209209

210-
if (tileset()->isAtlas()) {
210+
if (tileset()->isAtlas() && mColumnCountOverride <= 0) {
211211
const QPoint gridPos(index.column() - 1, index.row());
212212
for (Tile *tile : tileset()->tiles()) {
213213
const QPoint snappedPos = snapToGrid(tile->imageRect().bottomLeft());
@@ -229,7 +229,7 @@ Tile *TilesetModel::tileAt(const QModelIndex &index) const
229229
QModelIndex TilesetModel::tileIndex(const Tile *tile) const
230230
{
231231
Q_ASSERT(tile->tileset() == tileset());
232-
if (tileset()->isAtlas()) {
232+
if (tileset()->isAtlas() && mColumnCountOverride <= 0) {
233233
const QPoint snappedPos = snapToGrid(tile->imageRect().bottomLeft());
234234
return index(snappedPos.y(), snappedPos.x() + 1);
235235
}

src/tiled/tilesetview.cpp

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ void TileDelegate::paint(QPainter *painter,
116116
const TilesetModel *model = static_cast<const TilesetModel*>(index.model());
117117
const Tileset *tileset = model->tileset();
118118

119-
if (tileset->isAtlas()) {
119+
if (tileset->isAtlas() && !mTilesetView->dynamicWrapping()) {
120120
return;
121121
}
122122

@@ -212,18 +212,26 @@ QSize TileDelegate::sizeHint(const QStyleOptionViewItem & /* option */,
212212
const TilesetModel *m = static_cast<const TilesetModel*>(index.model());
213213
const int extra = mTilesetView->drawGrid() ? 1 : 0;
214214
const qreal scale = mTilesetView->scale();
215+
Tileset *tileset = m->tileset();
216+
217+
if (tileset->isAtlas() && !mTilesetView->dynamicWrapping()) {
218+
return QSize(tileset->imageWidth() * scale + extra,
219+
tileset->imageHeight() * scale + extra);
220+
}
215221

216222
if (const Tile *tile = m->tileAt(index)) {
217223
if (mTilesetView->dynamicWrapping()) {
218-
Tileset *tileset = tile->tileset();
224+
if (tileset->isAtlas()) {
225+
return QSize(tile->imageRect().width() * scale + extra,
226+
tile->imageRect().height() * scale + extra);
227+
}
219228
return QSize(tileset->tileWidth() * scale + extra,
220229
tileset->tileHeight() * scale + extra);
221230
}
222231

223232
QSize tileSize = tile->size();
224233

225234
if (tile->image().isNull()) {
226-
Tileset *tileset = m->tileset();
227235
if (tileset->isCollection()) {
228236
tileSize = QSize(32, 32);
229237
} else {
@@ -383,10 +391,8 @@ int TilesetView::sizeHintForColumn(int column) const
383391
const TilesetModel *model = tilesetModel();
384392
if (!model)
385393
return -1;
386-
if (model->tileset()->isCollection())
394+
if (model->tileset()->isCollection() || model->tileset()->isAtlas())
387395
return QTableView::sizeHintForColumn(column);
388-
if (model->tileset()->isAtlas())
389-
return model->tileset()->image().width() * scale();
390396

391397
const int gridSpace = mDrawGrid ? 1 : 0;
392398
if (dynamicWrapping())
@@ -402,10 +408,8 @@ int TilesetView::sizeHintForRow(int row) const
402408
const TilesetModel *model = tilesetModel();
403409
if (!model)
404410
return -1;
405-
if (model->tileset()->isCollection())
411+
if (model->tileset()->isCollection() || model->tileset()->isAtlas())
406412
return QTableView::sizeHintForRow(row);
407-
if (model->tileset()->isAtlas())
408-
return model->tileset()->image().height() * scale();
409413

410414
const int gridSpace = mDrawGrid ? 1 : 0;
411415
if (dynamicWrapping())
@@ -802,7 +806,7 @@ void TilesetView::paintEvent(QPaintEvent *event)
802806
QTableView::paintEvent(event);
803807

804808
TilesetModel *model = tilesetModel();
805-
if (!model || !model->tileset()->isAtlas())
809+
if (!model || !model->tileset()->isAtlas() || dynamicWrapping())
806810
return;
807811

808812
QPainter painter(viewport());
@@ -844,7 +848,7 @@ QModelIndex TilesetView::indexAt(const QPoint &pos) const
844848
if (!model())
845849
return QModelIndex();
846850

847-
if (tilesetModel() && tilesetModel()->tileset()->isAtlas()) {
851+
if (tilesetModel() && tilesetModel()->tileset()->isAtlas() && !dynamicWrapping()) {
848852
const QPoint tilesetPos = viewToTile(pos);
849853

850854
// Find tile that contains this position
@@ -876,7 +880,7 @@ QRect TilesetView::visualRect(const QModelIndex &index) const
876880
return QRect();
877881

878882
const TilesetModel *m = tilesetModel();
879-
if (m && m->tileset()->isAtlas()) {
883+
if (m && m->tileset()->isAtlas() && !dynamicWrapping()) {
880884
if (Tile *tile = m->tileAt(index)) {
881885
return tileToView(tile->imageRect());
882886
}

0 commit comments

Comments
 (0)