Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Donald Haase
Cockatrice
Commits
133693d9
Commit
133693d9
authored
Jan 23, 2016
by
Fabio Bas
Browse files
Fix pixmap usage in pictureloader
fix #1765
parent
f7f9827b
Changes
2
Hide whitespace changes
Inline
Side-by-side
cockatrice/src/pictureloader.cpp
View file @
133693d9
...
...
@@ -88,10 +88,10 @@ CardSet *PictureToLoad::getCurrentSet() const
return
0
;
}
QStringList
PictureLoader
::
md5Blacklist
=
QStringList
()
QStringList
PictureLoader
Worker
::
md5Blacklist
=
QStringList
()
<<
"db0c48db407a907c16ade38de048a441"
;
// card back returned by gatherer when card is not found
PictureLoader
::
PictureLoader
()
PictureLoader
Worker
::
PictureLoader
Worker
()
:
QObject
(
0
),
downloadRunning
(
false
),
loadQueueRunning
(
false
)
{
...
...
@@ -110,12 +110,12 @@ PictureLoader::PictureLoader()
moveToThread
(
pictureLoaderThread
);
}
PictureLoader
::~
PictureLoader
()
PictureLoader
Worker
::~
PictureLoader
Worker
()
{
pictureLoaderThread
->
deleteLater
();
}
void
PictureLoader
::
processLoadQueue
()
void
PictureLoader
Worker
::
processLoadQueue
()
{
if
(
loadQueueRunning
)
return
;
...
...
@@ -160,7 +160,7 @@ void PictureLoader::processLoadQueue()
}
}
bool
PictureLoader
::
cardImageExistsOnDisk
(
QString
&
setName
,
QString
&
correctedCardname
)
bool
PictureLoader
Worker
::
cardImageExistsOnDisk
(
QString
&
setName
,
QString
&
correctedCardname
)
{
QImage
image
;
QImageReader
imgReader
;
...
...
@@ -194,7 +194,7 @@ bool PictureLoader::cardImageExistsOnDisk(QString & setName, QString & corrected
return
false
;
}
QString
PictureLoader
::
getPicUrl
()
QString
PictureLoader
Worker
::
getPicUrl
()
{
if
(
!
picDownload
)
return
QString
(
""
);
...
...
@@ -242,7 +242,7 @@ QString PictureLoader::getPicUrl()
return
picUrl
;
}
void
PictureLoader
::
startNextPicDownload
()
void
PictureLoader
Worker
::
startNextPicDownload
()
{
if
(
cardsToDownload
.
isEmpty
())
{
cardBeingDownloaded
=
0
;
...
...
@@ -267,7 +267,7 @@ void PictureLoader::startNextPicDownload()
}
}
void
PictureLoader
::
picDownloadFailed
()
void
PictureLoader
Worker
::
picDownloadFailed
()
{
if
(
cardBeingDownloaded
.
nextSet
())
{
...
...
@@ -283,13 +283,13 @@ void PictureLoader::picDownloadFailed()
}
}
bool
PictureLoader
::
imageIsBlackListed
(
const
QByteArray
&
picData
)
bool
PictureLoader
Worker
::
imageIsBlackListed
(
const
QByteArray
&
picData
)
{
QString
md5sum
=
QCryptographicHash
::
hash
(
picData
,
QCryptographicHash
::
Md5
).
toHex
();
return
md5Blacklist
.
contains
(
md5sum
);
}
void
PictureLoader
::
picDownloadFinished
(
QNetworkReply
*
reply
)
void
PictureLoader
Worker
::
picDownloadFinished
(
QNetworkReply
*
reply
)
{
if
(
reply
->
error
())
{
qDebug
()
<<
"Download failed:"
<<
reply
->
errorString
();
...
...
@@ -349,7 +349,7 @@ void PictureLoader::picDownloadFinished(QNetworkReply *reply)
startNextPicDownload
();
}
void
PictureLoader
::
enqueueImageLoad
(
CardInfo
*
card
)
void
PictureLoader
Worker
::
enqueueImageLoad
(
CardInfo
*
card
)
{
QMutexLocker
locker
(
&
mutex
);
...
...
@@ -367,20 +367,31 @@ void PictureLoader::enqueueImageLoad(CardInfo *card)
emit
startLoadQueue
();
}
void
PictureLoader
::
picDownloadChanged
()
void
PictureLoader
Worker
::
picDownloadChanged
()
{
QMutexLocker
locker
(
&
mutex
);
picDownload
=
settingsCache
->
getPicDownload
();
QPixmapCache
::
clear
();
}
void
PictureLoader
::
picsPathChanged
()
void
PictureLoader
Worker
::
picsPathChanged
()
{
QMutexLocker
locker
(
&
mutex
);
picsPath
=
settingsCache
->
getPicsPath
();
}
QPixmapCache
::
clear
();
PictureLoader
::
PictureLoader
()
:
QObject
(
0
)
{
worker
=
new
PictureLoaderWorker
;
connect
(
settingsCache
,
SIGNAL
(
picsPathChanged
()),
this
,
SLOT
(
picsPathChanged
()));
connect
(
settingsCache
,
SIGNAL
(
picDownloadChanged
()),
this
,
SLOT
(
picDownloadChanged
()));
connect
(
worker
,
SIGNAL
(
imageLoaded
(
CardInfo
*
,
const
QImage
&
)),
this
,
SLOT
(
imageLoaded
(
CardInfo
*
,
const
QImage
&
)));
}
PictureLoader
::~
PictureLoader
()
{
worker
->
deleteLater
();
}
void
PictureLoader
::
internalGetCardBackPixmap
(
QPixmap
&
pixmap
,
QSize
size
)
...
...
@@ -388,7 +399,7 @@ void PictureLoader::internalGetCardBackPixmap(QPixmap &pixmap, QSize size)
QString
backCacheKey
=
"_trice_card_back_"
+
QString
::
number
(
size
.
width
())
+
QString
::
number
(
size
.
height
());
if
(
!
QPixmapCache
::
find
(
backCacheKey
,
&
pixmap
))
{
qDebug
()
<<
"cache fail for"
<<
backCacheKey
;
qDebug
()
<<
"cache fail for"
<<
backCacheKey
;
pixmap
=
QPixmap
(
"theme:cardback"
).
scaled
(
size
,
Qt
::
KeepAspectRatio
,
Qt
::
SmoothTransformation
);
QPixmapCache
::
insert
(
backCacheKey
,
pixmap
);
}
...
...
@@ -425,7 +436,7 @@ void PictureLoader::getPixmap(QPixmap &pixmap, CardInfo *card, QSize size)
if
(
card
)
{
// add the card to the load queue
getInstance
().
enqueueImageLoad
(
card
);
getInstance
().
worker
->
enqueueImageLoad
(
card
);
}
}
...
...
@@ -471,6 +482,16 @@ void PictureLoader::cacheCardPixmaps(QList<CardInfo *> cards)
if
(
QPixmapCache
::
find
(
key
,
&
tmp
))
continue
;
getInstance
().
enqueueImageLoad
(
card
);
getInstance
().
worker
->
enqueueImageLoad
(
card
);
}
}
void
PictureLoader
::
picDownloadChanged
()
{
QPixmapCache
::
clear
();
}
void
PictureLoader
::
picsPathChanged
()
{
QPixmapCache
::
clear
();
}
\ No newline at end of file
cockatrice/src/pictureloader.h
View file @
133693d9
...
...
@@ -28,21 +28,14 @@ public:
bool
nextSet
();
};
class
PictureLoader
:
public
QObject
{
class
PictureLoader
Worker
:
public
QObject
{
Q_OBJECT
public:
static
PictureLoader
&
getInstance
()
{
static
PictureLoader
instance
;
return
instance
;
}
private:
PictureLoader
();
~
PictureLoader
();
// Don't implement
PictureLoader
(
PictureLoader
const
&
);
void
operator
=
(
PictureLoader
const
&
);
PictureLoaderWorker
();
~
PictureLoaderWorker
();
void
enqueueImageLoad
(
CardInfo
*
card
);
private:
static
QStringList
md5Blacklist
;
QThread
*
pictureLoaderThread
;
...
...
@@ -55,18 +48,9 @@ private:
PictureToLoad
cardBeingDownloaded
;
bool
picDownload
,
downloadRunning
,
loadQueueRunning
;
void
startNextPicDownload
();
void
imageLoaded
(
CardInfo
*
card
,
const
QImage
&
image
);
QString
getPicUrl
();
bool
cardImageExistsOnDisk
(
QString
&
setName
,
QString
&
correctedCardname
);
bool
imageIsBlackListed
(
const
QByteArray
&
picData
);
public:
void
enqueueImageLoad
(
CardInfo
*
card
);
static
void
getPixmap
(
QPixmap
&
pixmap
,
CardInfo
*
card
,
QSize
size
);
static
void
clearPixmapCache
(
CardInfo
*
card
);
static
void
clearPixmapCache
();
static
void
cacheCardPixmaps
(
QList
<
CardInfo
*>
cards
);
protected:
static
void
internalGetCardBackPixmap
(
QPixmap
&
pixmap
,
QSize
size
);
private
slots
:
void
picDownloadFinished
(
QNetworkReply
*
reply
);
void
picDownloadFailed
();
...
...
@@ -77,6 +61,36 @@ public slots:
void
processLoadQueue
();
signals:
void
startLoadQueue
();
void
imageLoaded
(
CardInfo
*
card
,
const
QImage
&
image
);
};
class
PictureLoader
:
public
QObject
{
Q_OBJECT
public:
static
PictureLoader
&
getInstance
()
{
static
PictureLoader
instance
;
return
instance
;
}
private:
PictureLoader
();
~
PictureLoader
();
// Don't implement
PictureLoader
(
PictureLoader
const
&
);
void
operator
=
(
PictureLoader
const
&
);
PictureLoaderWorker
*
worker
;
public:
static
void
getPixmap
(
QPixmap
&
pixmap
,
CardInfo
*
card
,
QSize
size
);
static
void
clearPixmapCache
(
CardInfo
*
card
);
static
void
clearPixmapCache
();
static
void
cacheCardPixmaps
(
QList
<
CardInfo
*>
cards
);
protected:
static
void
internalGetCardBackPixmap
(
QPixmap
&
pixmap
,
QSize
size
);
private
slots
:
void
picDownloadChanged
();
void
picsPathChanged
();
public
slots
:
void
imageLoaded
(
CardInfo
*
card
,
const
QImage
&
image
);
};
#endif
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment