33#include " imageproviders.h"
44#include < QPainter>
55
6+ MetatileLayersItem::MetatileLayersItem (Metatile *metatile, Tileset *primaryTileset, Tileset *secondaryTileset)
7+ : SelectablePixmapItem(16 , 16 , 2 * projectConfig.getNumLayersInMetatile(), 2),
8+ metatile(metatile),
9+ primaryTileset(primaryTileset),
10+ secondaryTileset(secondaryTileset)
11+ {
12+ clearLastModifiedCoords ();
13+ clearLastHoveredCoords ();
14+ setAcceptHoverEvents (true );
15+ }
16+
617static const QList<QPoint> tilePositions = {
718 QPoint (0 , 0 ),
819 QPoint (1 , 0 ),
@@ -20,23 +31,31 @@ static const QList<QPoint> tilePositions = {
2031
2132void MetatileLayersItem::draw () {
2233 const int numLayers = projectConfig.getNumLayersInMetatile ();
23- QPixmap pixmap (numLayers * 32 , 32 );
34+ const int layerWidth = this ->cellWidth * 2 ;
35+ const int layerHeight = this ->cellHeight * 2 ;
36+ QPixmap pixmap (numLayers * layerWidth, layerHeight);
2437 QPainter painter (&pixmap);
2538
2639 // Draw tile images
2740 int numTiles = qMin (projectConfig.getNumTilesInMetatile (), this ->metatile ? this ->metatile ->tiles .length () : 0 );
2841 for (int i = 0 ; i < numTiles; i++) {
2942 Tile tile = this ->metatile ->tiles .at (i);
30- QImage tileImage = getPalettedTileImage (tile.tileId , this ->primaryTileset , this ->secondaryTileset , tile.palette , true ).scaled (16 , 16 );
43+ QImage tileImage = getPalettedTileImage (tile.tileId ,
44+ this ->primaryTileset ,
45+ this ->secondaryTileset ,
46+ tile.palette ,
47+ true
48+ ).scaled (this ->cellWidth , this ->cellHeight );
3149 tile.flip (&tileImage);
32- painter.drawImage (tilePositions.at (i) * 16 , tileImage);
50+ QPoint pos = tilePositions.at (i);
51+ painter.drawImage (pos.x () * this ->cellWidth , pos.y () * this ->cellHeight , tileImage);
3352 }
3453 if (this ->showGrid ) {
3554 // Draw grid
3655 painter.setPen (Qt::white);
3756 for (int i = 1 ; i < numLayers; i++) {
38- int x = i * 32 ;
39- painter.drawLine (x, 0 , x, 32 );
57+ int x = i * layerWidth ;
58+ painter.drawLine (x, 0 , x, layerHeight );
4059 }
4160 }
4261
@@ -127,13 +146,8 @@ void MetatileLayersItem::clearLastHoveredCoords() {
127146}
128147
129148QPoint MetatileLayersItem::getBoundedPos (const QPointF &pos) {
130- int x, y;
131- int maxX = (projectConfig.getNumLayersInMetatile () * 2 ) - 1 ;
132- x = static_cast <int >(pos.x ()) / 16 ;
133- y = static_cast <int >(pos.y ()) / 16 ;
134- if (x < 0 ) x = 0 ;
135- if (y < 0 ) y = 0 ;
136- if (x > maxX) x = maxX;
137- if (y > 1 ) y = 1 ;
138- return QPoint (x, y);
149+ int x = static_cast <int >(pos.x ()) / this ->cellWidth ;
150+ int y = static_cast <int >(pos.y ()) / this ->cellHeight ;
151+ return QPoint ( qMax (0 , qMin (x, this ->maxSelectionWidth - 1 )),
152+ qMax (0 , qMin (y, this ->maxSelectionHeight - 1 )) );
139153}
0 commit comments