Don't reload the pixmaps every time they are displayed... -.-

--HG--
branch : gsoc2014-dfighter
This commit is contained in:
dfighter1985 2014-08-01 02:34:57 +02:00
parent 1265d6b064
commit 851afcf955
3 changed files with 59 additions and 12 deletions

View file

@ -264,23 +264,71 @@ void TileTypeNode::reindex()
///////////////////////////////////////////////////
class TileItemNodePvt
{
public:
bool loadImage( TileModel::TTileChannel channel, const QString &fn )
{
QPixmap temp;
bool b = temp.load( fn );
if( !b )
return false;
pixmaps[ channel ] = temp;
return true;
}
void clearImage( TileModel::TTileChannel channel )
{
pixmaps[ channel ] = QPixmap();
}
const QPixmap& pixMap( TileModel::TTileChannel channel ) const{
return pixmaps[ channel ];
}
private:
QPixmap pixmaps[ TileModel::TileChannelCount ];
};
TileModel::TTileChannel TileItemNode::s_displayChannel = TileModel::TileDiffuse;
TileItemNode::TileItemNode(int tileId, TileModel::TTileChannel channel, QString filename, Node *parent) : m_tileId(tileId)
{
m_tileFilename[channel] = filename;
m_parentItem = parent;
//nlinfo("dispalying tile %d - %s", m_tileId, m_tileFilename[TileModel::TileDiffuse].toAscii().data());
pvt = new TileItemNodePvt();
setTileFilename( channel, filename );
}
TileItemNode::~TileItemNode()
{
delete pvt;
pvt = NULL;
qDeleteAll(m_childItems);
}
void TileItemNode::setTileFilename(TileModel::TTileChannel channel, QString filename)
bool TileItemNode::setTileFilename(TileModel::TTileChannel channel, QString filename)
{
QString fn = filename;
if( filename.isEmpty() || ( filename == "empty" ) )
fn = ":/placeHolder/images/empty_image.png";
bool b = pvt->loadImage( channel, fn );
if( !b )
return false;
m_tileFilename[channel] = filename;
return true;
}
QString TileItemNode::getTileFilename(TileModel::TTileChannel channel)
@ -295,8 +343,7 @@ QString TileItemNode::getTileFilename(TileModel::TTileChannel channel)
QVariant TileItemNode::data(int column, int role) const
{
// find some way to know which file/bitmap to display
QString tileFilename = m_tileFilename[s_displayChannel];
QString tileFilename = m_tileFilename[ TileItemNode::s_displayChannel ];
if(role == TileModel::TilePixmapRole || role == Qt::DecorationRole)
{
@ -307,18 +354,13 @@ QVariant TileItemNode::data(int column, int role) const
// Retrieve the target tile size.
uint32 tileSize = TileModel::getTileTypeSize(parent->getTileType());
if(tileFilename.isEmpty() || tileFilename == "empty")
tileFilename = ":/placeHolder/images/empty_image.png";
QPixmap pixmap;// = new QPixmap();
if(!pixmap.load(tileFilename))
nlinfo("failed to load %s", tileFilename.toAscii().data());
if(TileModel::CurrentZoomFactor == TileModel::TileZoom200)
tileSize *= 2;
else if(TileModel::CurrentZoomFactor == TileModel::TileZoom50)
tileSize /= 2;
QPixmap pixmap = pvt->pixMap( TileItemNode::s_displayChannel );
pixmap.scaled(tileSize, tileSize);
return pixmap;

View file

@ -104,6 +104,8 @@ private:
TileModel::TNodeTileType m_nodeTileType;
};
class TileItemNodePvt;
class TileItemNode : public Node
{
public:
@ -111,7 +113,7 @@ public:
virtual ~TileItemNode();
QVariant data(int column, int role) const;
int columnCount() const;
void setTileFilename(TileModel::TTileChannel channel, QString filename);
bool setTileFilename(TileModel::TTileChannel channel, QString filename);
QString getTileFilename(TileModel::TTileChannel channel);
void setId( int id ){ m_tileId = id; }
int id() const{ return m_tileId; }
@ -125,6 +127,8 @@ private:
QMap<TileModel::TTileChannel, TileWidget*> m_tileWidget;
static TileModel::TTileChannel s_displayChannel;
TileItemNodePvt *pvt;
};
#endif // TILE_ITEM_H

View file

@ -34,6 +34,7 @@ public:
TileDiffuse = 0,
TileAdditive = 1,
TileAlpha = 2,
TileChannelCount = 3
};
enum TNodeTileType