SVN commit 600821 by piacentini: Adding TileSprite class, a custom KGameCanvasItem used to compose a tile from clean backgrounds and face data. M +1 -0 CMakeLists.txt A TileSprite.cpp [License: GPL (v2+)] A TileSprite.h [License: GPL (v2+)] M +29 -19 boardwidget.cpp M +2 -1 boardwidget.h --- trunk/KDE/kdegames/kmahjongg/CMakeLists.txt #600820:600821 @@ -18,6 +18,7 @@ GameData.cpp Preview.cpp Editor.cpp + TileSprite.cpp HighScore.cpp ) kde4_automoc(${kmahjongg_SRCS}) --- trunk/KDE/kdegames/kmahjongg/boardwidget.cpp #600820:600821 @@ -184,16 +184,22 @@ if (!Game->tilePresent(z,y,x)) continue; - QPixmap *t; - if (Game->HighlightData(z,y,x)) { + QPixmap *s; + QPixmap *us; + s= theTiles.selectedPixmaps( + Game->BoardData(z,y,x)-TILE_OFFSET); + + us= theTiles.unselectedPixmaps( + Game->BoardData(z,y,x)-TILE_OFFSET); + /*if (Game->HighlightData(z,y,x)) { t= theTiles.selectedPixmaps( Game->BoardData(z,y,x)-TILE_OFFSET); } else { t= theTiles.unselectedPixmaps( Game->BoardData(z,y,x)-TILE_OFFSET); - } + }*/ - KGameCanvasPixmap * thissprite = new KGameCanvasPixmap(*t, this); + TileSprite * thissprite = new TileSprite(this, *us, *s, *s); spriteMap.insert(TileCoord(x,y,z), thissprite); } @@ -225,7 +231,7 @@ if (!Game->tilePresent(z,y,x)) continue; - KGameCanvasPixmap * thissprite =spriteMap.value(TileCoord(x,y,z)); + TileSprite * thissprite =spriteMap.value(TileCoord(x,y,z)); if (thissprite) thissprite->moveTo(sx, sy); if (thissprite) thissprite->show(); @@ -245,8 +251,8 @@ for (int y=Game->m_height-1; y>=0; y--) { if (Game->tilePresent(z,y,x-offset)) { - KGameCanvasPixmap * thissprite =spriteMap.value(TileCoord(x-offset,y,z)); - //KGameCanvasPixmap * thissprite =spriteMap.value(QString("X%1Y%2Z%3").arg(x-offset).arg(y).arg(z)); + TileSprite * thissprite =spriteMap.value(TileCoord(x-offset,y,z)); + //TileSprite * thissprite =spriteMap.value(QString("X%1Y%2Z%3").arg(x-offset).arg(y).arg(z)); if (thissprite) thissprite->raise(); } //at each pass, move one place to the left @@ -752,7 +758,7 @@ void BoardWidget::hilightTile( POSITION& Pos, bool on, bool doRepaint ) { - KGameCanvasPixmap * atile = 0; + TileSprite * atile = 0; TileCoord coord = TileCoord(Pos.x,Pos.y,Pos.e); @@ -763,13 +769,15 @@ if (on) { Game->setHighlightData(Pos.e,Pos.y,Pos.x,1); if (atile) - atile->setPixmap(*(theTiles.selectedPixmaps( - Game->BoardData(Pos.e,Pos.y,Pos.x)-TILE_OFFSET))); + //atile->setPixmap(*(theTiles.selectedPixmaps( + //Game->BoardData(Pos.e,Pos.y,Pos.x)-TILE_OFFSET))); + atile->setSelected(true); } else { Game->setHighlightData(Pos.e,Pos.y,Pos.x,0); if (atile) - atile->setPixmap(*(theTiles.unselectedPixmaps( - Game->BoardData(Pos.e,Pos.y,Pos.x)-TILE_OFFSET))); + //atile->setPixmap(*(theTiles.unselectedPixmaps( + //Game->BoardData(Pos.e,Pos.y,Pos.x)-TILE_OFFSET))); + atile->setSelected(false); } } @@ -793,9 +801,11 @@ Game->putTile( E, Y, X, Pos.f ); Game->setHighlightData(E,Y,X,0); - QPixmap *t; - t= theTiles.unselectedPixmaps(Game->BoardData(E,Y,X)-TILE_OFFSET); - KGameCanvasPixmap * thissprite = new KGameCanvasPixmap(*t, this); + QPixmap *s; + QPixmap *us; + us= theTiles.unselectedPixmaps(Game->BoardData(E,Y,X)-TILE_OFFSET); + s= theTiles.selectedPixmaps(Game->BoardData(E,Y,X)-TILE_OFFSET); + TileSprite * thissprite = new TileSprite(this, *us, *s, *s); //thissprite->moveTo(sx, sy); thissprite->show(); spriteMap.insert(TileCoord(X,Y,E), thissprite); @@ -817,7 +827,7 @@ Game->TileNum--; // Eine Figur weniger Game->setMoveListData(Game->TileNum,Pos); // Position ins Protokoll eintragen - KGameCanvasPixmap * thissprite =spriteMap.value(TileCoord(X,Y,E)); + TileSprite * thissprite =spriteMap.value(TileCoord(X,Y,E)); if (thissprite) delete thissprite; spriteMap.remove(TileCoord(X,Y,E)); // remove tile from game board @@ -872,7 +882,7 @@ // so that we only require 1 screen paint for both actions) Game->setRemovedTilePair(MouseClickPos1, MouseClickPos2); - // now we remove the tiles from the board + // now we remove the tiles from the board*t, removeTile(MouseClickPos1, false); removeTile(MouseClickPos2); @@ -921,8 +931,8 @@ { int E,X,Y; - KGameCanvasPixmap * clickedItem = NULL; - clickedItem = (KGameCanvasPixmap *) itemAt(point); + TileSprite * clickedItem = NULL; + clickedItem = (TileSprite *) itemAt(point); if (!clickedItem) { //no item under mouse qDebug() << "no tile registered"; --- trunk/KDE/kdegames/kmahjongg/boardwidget.h #600820:600821 @@ -35,6 +35,7 @@ #include "BoardLayout.h" #include "GameData.h" #include "TileCoord.h" +#include "TileSprite.h" #define ANIMSPEED 200 @@ -68,7 +69,7 @@ QString &getLayoutName() {return theBoardLayout.getFilename();}; KGameCanvasPixmap * backsprite; - QHash spriteMap; + QHash spriteMap; public slots: void loadSettings();