Skip to content

Commit 7638cf4

Browse files
committed
Cleanup atlas not in dynamic view checks
Signed-off-by: Tomas Slusny <slusnucky@gmail.com>
1 parent 4646cee commit 7638cf4

File tree

2 files changed

+54
-68
lines changed

2 files changed

+54
-68
lines changed

src/tiled/tilesetmodel.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,8 @@ Qt::ItemFlags TilesetModel::flags(const QModelIndex &index) const
113113
if (!index.isValid())
114114
return defaultFlags;
115115

116-
if (isFixedAtlas())
117-
if (!tileAt(index))
118-
return defaultFlags & ~Qt::ItemIsSelectable;
116+
if (isFixedAtlas() && !tileAt(index))
117+
return defaultFlags & ~Qt::ItemIsSelectable;
119118

120119
defaultFlags |= Qt::ItemIsDropEnabled;
121120
defaultFlags |= Qt::ItemIsDragEnabled;

src/tiled/tilesetview.cpp

Lines changed: 52 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -114,9 +114,10 @@ void TileDelegate::paint(QPainter *painter,
114114
const QModelIndex &index) const
115115
{
116116
const TilesetModel *model = static_cast<const TilesetModel*>(index.model());
117-
const Tileset *tileset = model->tileset();
117+
if (!model)
118+
return;
118119

119-
if (tileset->isAtlas() && !mTilesetView->dynamicWrapping())
120+
if (model->isFixedAtlas())
120121
return;
121122

122123
Tile *tile = model->tileAt(index);
@@ -211,10 +212,9 @@ QSize TileDelegate::sizeHint(const QStyleOptionViewItem & /* option */,
211212
const qreal scale = mTilesetView->scale();
212213
Tileset *tileset = m->tileset();
213214

214-
if (tileset->isAtlas() && !mTilesetView->dynamicWrapping()) {
215+
if (m->isFixedAtlas())
215216
return QSize(tileset->imageWidth() * scale + extra,
216217
tileset->imageHeight() * scale + extra);
217-
}
218218

219219
if (const Tile *tile = m->tileAt(index)) {
220220
if (mTilesetView->dynamicWrapping() && !tileset->isAtlas())
@@ -538,9 +538,10 @@ void TilesetView::setRelocateTiles(bool enabled)
538538

539539
mRelocateTiles = enabled;
540540

541-
if (TilesetModel *m = tilesetModel())
542-
if (m->tileset()->isAtlas())
543-
enabled = false;
541+
if (TilesetModel *m = tilesetModel(); m && m->tileset()->isAtlas()) {
542+
selectionModel()->clear();
543+
enabled = false;
544+
}
544545

545546
if (enabled)
546547
setDragDropMode(QTableView::InternalMove);
@@ -581,13 +582,10 @@ void TilesetView::setWangId(WangId wangId)
581582
mWangId = wangId;
582583
mWangBehavior = AssignWholeId;
583584

584-
if (mEditWangSet) {
585-
const TilesetModel *model = tilesetModel();
586-
if (!model)
587-
return;
588-
if (model->tileset()->isAtlas()) {
585+
if (mEditWangSet && mHoveredIndex.isValid()) {
586+
if (TilesetModel *m = tilesetModel(); m && m->isFixedAtlas()) {
589587
viewport()->update();
590-
} else if (mHoveredIndex.isValid()) {
588+
} else {
591589
update(mHoveredIndex);
592590
}
593591
}
@@ -666,9 +664,14 @@ void TilesetView::mouseMoveEvent(QMouseEvent *event)
666664
return;
667665
}
668666

667+
const TilesetModel *model = tilesetModel();
668+
if (!model)
669+
return;
670+
669671
if (mDraggedIndex.isValid()) {
670672
mSnapToGrid = !(event->modifiers() & Qt::ShiftModifier);
671-
if (Tile *tile = tilesetModel()->tileAt(mDraggedIndex)) {
673+
674+
if (Tile *tile = model->tileAt(mDraggedIndex)) {
672675
QRect newRect = tile->imageRect();
673676
QPoint pos = viewToTile(event->pos());
674677

@@ -692,10 +695,10 @@ void TilesetView::mouseMoveEvent(QMouseEvent *event)
692695
}
693696

694697
if (mSnapToGrid) {
695-
const int margin = tilesetModel()->tileset()->margin();
696-
const int spacing = tilesetModel()->tileset()->tileSpacing();
697-
const int tileWidth = tilesetModel()->tileset()->tileWidth();
698-
const int tileHeight = tilesetModel()->tileset()->tileHeight();
698+
const int margin = model->tileset()->margin();
699+
const int spacing = model->tileset()->tileSpacing();
700+
const int tileWidth = model->tileset()->tileWidth();
701+
const int tileHeight = model->tileset()->tileHeight();
699702

700703
if (mResizingEdge == 0) {
701704
pos.setX((qMax(pos.x() - margin, 0) / (tileWidth + spacing)) * (tileWidth + spacing) + margin);
@@ -726,6 +729,7 @@ void TilesetView::mouseMoveEvent(QMouseEvent *event)
726729

727730
mRubberBand.setGeometry(tileToView(newRect));
728731
}
732+
729733
event->accept();
730734
return;
731735
}
@@ -734,10 +738,6 @@ void TilesetView::mouseMoveEvent(QMouseEvent *event)
734738
if (!mWangSet)
735739
return;
736740

737-
const TilesetModel *model = tilesetModel();
738-
if (!model)
739-
return;
740-
741741
const QPoint pos = event->pos();
742742
const QModelIndex hoveredIndex = indexAt(pos);
743743
const QModelIndex previousHoveredIndex = mHoveredIndex;
@@ -824,23 +824,22 @@ void TilesetView::mouseMoveEvent(QMouseEvent *event)
824824

825825
void TilesetView::mouseReleaseEvent(QMouseEvent *event)
826826
{
827+
const TilesetModel *model = tilesetModel();
828+
if (!model)
829+
return;
830+
827831
if (mDraggedIndex.isValid() && event->button() == Qt::LeftButton) {
828-
if (Tile* tile = tilesetModel()->tileAt(mDraggedIndex)) {
832+
if (Tile* tile = model->tileAt(mDraggedIndex))
829833
mTilesetDocument->undoStack()->push(new ChangeTileImageRect(mTilesetDocument, { tile }, { viewToTile(mRubberBand.geometry()) }));
830-
}
834+
831835
mDraggedIndex = QModelIndex();
832836
mRubberBand.hide();
833837
event->accept();
834838
return;
835839
}
836840

837841
if (mAtlasSelecting && (event->button() == Qt::LeftButton || event->button() == Qt::RightButton)) {
838-
QRect tileRect;
839-
if (mRubberBand.geometry().isEmpty()) {
840-
tileRect = QRect(mSelectionOffset, QSize(1, 1));
841-
} else {
842-
tileRect = viewToTile(mRubberBand.geometry());
843-
}
842+
QRect tileRect = mRubberBand.geometry().isEmpty() ? QRect(mSelectionOffset, QSize(1, 1)) : viewToTile(mRubberBand.geometry());
844843

845844
if (event->button() == Qt::RightButton) {
846845
QList<Tile*> tiles;
@@ -875,14 +874,14 @@ void TilesetView::paintEvent(QPaintEvent *event)
875874
QTableView::paintEvent(event);
876875

877876
TilesetModel *model = tilesetModel();
878-
if (!model || !model->tileset()->isAtlas() || dynamicWrapping())
877+
if (!model || !model->isFixedAtlas())
879878
return;
880879

881880
QPainter painter(viewport());
881+
const Tileset *tileset = model->tileset();
882882

883883
// Draw tileset background image when in relocate mode
884884
if (mRelocateTiles) {
885-
const Tileset *tileset = model->tileset();
886885
if (!tileset->imageSource().isEmpty()) {
887886
const QRect sourceRect(0, 0, tileset->imageWidth(), tileset->imageHeight());
888887
const QRect viewRect = tileToView(sourceRect);
@@ -896,7 +895,7 @@ void TilesetView::paintEvent(QPaintEvent *event)
896895
TileDelegate *delegate = static_cast<TileDelegate*>(itemDelegate());
897896
QItemSelectionModel *s = selectionModel();
898897

899-
for (Tile *tile : model->tileset()->tiles()) {
898+
for (Tile *tile : tileset->tiles()) {
900899
const QRect rect = tileToView(tile->imageRect());
901900
const QModelIndex index = model->tileIndex(tile);
902901
const bool selected = s->isSelected(index) || index == s->currentIndex();
@@ -915,62 +914,52 @@ void TilesetView::paintEvent(QPaintEvent *event)
915914

916915
QModelIndex TilesetView::indexAt(const QPoint &pos) const
917916
{
918-
if (!model())
919-
return QModelIndex();
920-
921-
if (tilesetModel() && tilesetModel()->tileset()->isAtlas() && !dynamicWrapping()) {
917+
if (TilesetModel *m = tilesetModel(); m && m->isFixedAtlas()) {
922918
const QPoint tilesetPos = viewToTile(pos);
923-
924-
// Find tile that contains this position
925-
for (Tile *tile : tilesetModel()->tileset()->tiles()) {
919+
for (Tile *tile : m->tileset()->tiles())
926920
if (tile->imageRect().contains(tilesetPos))
927921
return tilesetModel()->tileIndex(tile);
928-
}
929-
930-
// Return invalid index if no tile found
931922
return QModelIndex();
932923
}
933924

934-
// Use default behavior for non-atlas mode
935925
return QTableView::indexAt(pos);
936926
}
937927

938928
void TilesetView::scrollTo(const QModelIndex &index, ScrollHint hint)
939929
{
940-
if (!tilesetModel() || !tilesetModel()->tileset()->isAtlas() || dynamicWrapping()) {
941-
QTableView::scrollTo(index, hint);
930+
if (TilesetModel *m = tilesetModel(); m && m->isFixedAtlas()) {
942931
return;
943932
}
933+
934+
QTableView::scrollTo(index, hint);
944935
}
945936

946937
void TilesetView::setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags flags)
947938
{
948-
if (!tilesetModel() || !tilesetModel()->tileset()->isAtlas() || dynamicWrapping()) {
939+
const TilesetModel *model = tilesetModel();
940+
941+
if (!model || !model->isFixedAtlas()) {
949942
QTableView::setSelection(rect, flags);
950943
return;
951944
}
952945

953-
// Convert view coordinates to tileset coordinates
946+
// Select tiles based on position in the rect
954947
const QRect tilesetRect = viewToTile(rect);
955-
956-
// Select all tiles that intersect with the rect
957948
QItemSelection selection;
958-
const TilesetModel *model = tilesetModel();
959-
960949
for (Tile *tile : model->tileset()->tiles()) {
961950
if (tile->imageRect().intersects(tilesetRect)) {
962951
const QModelIndex index = model->tileIndex(tile);
963952
selection.select(index, index);
964953
}
965954
}
966-
967955
selectionModel()->select(selection, flags);
968956
}
969957

970958
void TilesetView::selectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
971959
{
972960
QTableView::selectionChanged(selected, deselected);
973-
if (tilesetModel() && tilesetModel()->tileset()->isAtlas())
961+
962+
if (TilesetModel *m = tilesetModel(); m && m->isFixedAtlas())
974963
viewport()->update();
975964
}
976965

@@ -979,11 +968,9 @@ QRect TilesetView::visualRect(const QModelIndex &index) const
979968
if (!index.isValid())
980969
return QRect();
981970

982-
const TilesetModel *m = tilesetModel();
983-
if (m && m->tileset()->isAtlas() && !dynamicWrapping()) {
984-
if (Tile *tile = m->tileAt(index)) {
971+
if (TilesetModel *m = tilesetModel(); m && m->isFixedAtlas()) {
972+
if (Tile *tile = m->tileAt(index))
985973
return tileToView(tile->imageRect());
986-
}
987974
return QRect();
988975
}
989976

@@ -995,8 +982,7 @@ void TilesetView::leaveEvent(QEvent *event)
995982
if (mHoveredIndex.isValid()) {
996983
const QModelIndex previousHoveredIndex = mHoveredIndex;
997984
mHoveredIndex = QModelIndex();
998-
const TilesetModel *model = tilesetModel();
999-
if (model && model->tileset()->isAtlas()) {
985+
if (TilesetModel *m = tilesetModel(); m && m->isFixedAtlas()) {
1000986
viewport()->update();
1001987
} else {
1002988
update(previousHoveredIndex);
@@ -1225,10 +1211,11 @@ void TilesetView::adjustScale()
12251211

12261212
void TilesetView::refreshColumnCount()
12271213
{
1228-
if (!tilesetModel())
1214+
const TilesetModel *model = tilesetModel();
1215+
if (!model)
12291216
return;
12301217

1231-
if (tilesetModel()->tileset()->isAtlas())
1218+
if (model->tileset()->isAtlas())
12321219
viewport()->update();
12331220

12341221
if (!dynamicWrapping()) {
@@ -1239,12 +1226,12 @@ void TilesetView::refreshColumnCount()
12391226
const QSize maxSize = maximumViewportSize();
12401227
const int gridSpace = mDrawGrid ? 1 : 0;
12411228
int tileWidth;
1242-
if (tilesetModel()->tileset()->isAtlas()) {
1229+
if (model->tileset()->isAtlas()) {
12431230
tileWidth = 0;
1244-
for (Tile *tile : tilesetModel()->tileset()->tiles())
1231+
for (Tile *tile : model->tileset()->tiles())
12451232
tileWidth = std::max(tileWidth, tile->imageRect().width());
12461233
} else {
1247-
tileWidth = tilesetModel()->tileset()->tileWidth();
1234+
tileWidth = model->tileset()->tileWidth();
12481235
}
12491236
const int scaledTileSize = std::max<int>(tileWidth * scale(), 1) + gridSpace;
12501237
const int columnCount = std::max(maxSize.width() / scaledTileSize, 1);

0 commit comments

Comments
 (0)