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
04072b02
Commit
04072b02
authored
Jun 03, 2009
by
brukie
Browse files
scaled pixmap cache. major speed improvement
parent
1da5c637
Changes
10
Hide whitespace changes
Inline
Side-by-side
cockatrice/src/carddatabase.cpp
View file @
04072b02
...
...
@@ -23,9 +23,16 @@ CardInfo::CardInfo(QDataStream &stream)
CardInfo
::~
CardInfo
()
{
if
(
pixmap
)
if
(
pixmap
)
{
qDebug
(
QString
(
"Deleting pixmap for %1"
).
arg
(
name
).
toLatin1
());
delete
pixmap
;
delete
pixmap
;
QMapIterator
<
int
,
QPixmap
*>
i
(
scaledPixmapCache
);
while
(
i
.
hasNext
())
{
i
.
next
();
qDebug
(
QString
(
" Deleting cached pixmap for width %1"
).
arg
(
i
.
key
()).
toLatin1
());
delete
i
.
value
();
}
}
}
QString
CardInfo
::
getMainCardType
()
const
...
...
@@ -63,7 +70,7 @@ void CardInfo::addEdition(const QString &edition)
editions
<<
edition
;
}
QPixmap
*
CardInfo
::
get
Pixmap
()
QPixmap
*
CardInfo
::
load
Pixmap
()
{
if
(
pixmap
)
return
pixmap
;
...
...
@@ -72,7 +79,7 @@ QPixmap *CardInfo::getPixmap()
pixmap
->
load
(
"../pics/back.jpg"
);
return
pixmap
;
}
qDebug
(
QString
(
"CardDatabase: loading pixmap for %1"
).
arg
(
getName
()).
toLatin1
());
qDebug
(
QString
(
"CardDatabase: loading pixmap for
'
%1
'
"
).
arg
(
getName
()).
toLatin1
());
for
(
int
i
=
0
;
i
<
editions
.
size
();
i
++
)
{
// Fire // Ice, Circle of Protection: Red
QString
correctedName
=
getName
().
remove
(
" // "
).
remove
(
":"
);
...
...
@@ -85,6 +92,19 @@ QPixmap *CardInfo::getPixmap()
return
pixmap
;
}
QPixmap
*
CardInfo
::
getPixmap
(
QSize
size
)
{
qDebug
(
QString
(
"CardInfo::getPixmap(%1, %2) for %3"
).
arg
(
size
.
width
()).
arg
(
size
.
height
()).
arg
(
getName
()).
toLatin1
());
if
(
QPixmap
*
result
=
scaledPixmapCache
.
value
(
size
.
width
()))
{
qDebug
(
"cache HIT"
);
return
result
;
}
qDebug
(
"cache MISS"
);
QPixmap
*
result
=
new
QPixmap
(
loadPixmap
()
->
scaled
(
size
,
Qt
::
IgnoreAspectRatio
,
Qt
::
SmoothTransformation
));
scaledPixmapCache
.
insert
(
size
.
width
(),
result
);
return
result
;
}
void
CardInfo
::
saveToStream
(
QDataStream
&
stream
)
{
stream
<<
name
...
...
@@ -192,7 +212,7 @@ void CardDatabase::importOracle()
qDebug
(
QString
(
"CardDatabase: %1 cards imported"
).
arg
(
hash
.
size
()).
toLatin1
());
CardInfo
*
empty
=
new
CardInfo
();
empty
->
get
Pixmap
();
// cache pixmap for card back
empty
->
load
Pixmap
();
// cache pixmap for card back
hash
.
insert
(
""
,
empty
);
}
...
...
cockatrice/src/carddatabase.h
View file @
04072b02
...
...
@@ -3,6 +3,7 @@
#include
<QHash>
#include
<QPixmap>
#include
<QMap>
#include
<QDataStream>
class
CardInfo
{
...
...
@@ -14,6 +15,7 @@ private:
QString
powtough
;
QStringList
text
;
QPixmap
*
pixmap
;
QMap
<
int
,
QPixmap
*>
scaledPixmapCache
;
public:
CardInfo
(
const
QString
&
_name
=
QString
(),
const
QString
&
_manacost
=
QString
(),
...
...
@@ -30,7 +32,8 @@ public:
QStringList
getText
()
const
{
return
text
;
}
QString
getMainCardType
()
const
;
void
addEdition
(
const
QString
&
edition
);
QPixmap
*
getPixmap
();
QPixmap
*
loadPixmap
();
QPixmap
*
getPixmap
(
QSize
size
);
void
saveToStream
(
QDataStream
&
stream
);
};
...
...
cockatrice/src/carddragitem.cpp
View file @
04072b02
#include
"carddragitem.h"
#include
"cardzone.h"
#include
"carddatabase.h"
#include
<QtGui>
CardDragItem
::
CardDragItem
(
QGraphicsScene
*
scene
,
CardZone
*
_startZone
,
QPixmap
*
_image
,
int
_id
,
const
QPointF
&
_hotSpot
,
bool
_faceDown
,
QGraphicsItem
*
parent
)
:
QGraphicsItem
(
parent
),
i
mage
(
_image
),
id
(
_id
),
hotSpot
(
_hotSpot
),
startZone
(
_startZone
),
faceDown
(
_faceDown
)
CardDragItem
::
CardDragItem
(
QGraphicsScene
*
scene
,
CardZone
*
_startZone
,
CardInfo
*
_info
,
int
_id
,
const
QPointF
&
_hotSpot
,
bool
_faceDown
,
QGraphicsItem
*
parent
)
:
QGraphicsItem
(
parent
),
i
d
(
_id
),
info
(
_info
),
hotSpot
(
_hotSpot
),
startZone
(
_startZone
),
faceDown
(
_faceDown
)
{
if
((
hotSpot
.
x
()
<
0
)
||
(
hotSpot
.
y
()
<
0
))
{
qDebug
(
QString
(
"CardDragItem: coordinate overflow: x = %1, y = %2"
).
arg
(
hotSpot
.
x
()).
arg
(
hotSpot
.
y
()).
toLatin1
());
...
...
@@ -31,16 +32,11 @@ QRectF CardDragItem::boundingRect() const
return
QRectF
(
0
,
0
,
CARD_WIDTH
,
CARD_HEIGHT
);
}
void
CardDragItem
::
paint
(
QPainter
*
painter
,
const
QStyleOptionGraphicsItem
*
option
,
QWidget
*
widget
)
void
CardDragItem
::
paint
(
QPainter
*
painter
,
const
QStyleOptionGraphicsItem
*
option
,
QWidget
*/
*
widget
*/
)
{
// Q_UNUSED(option);
Q_UNUSED
(
widget
);
QRectF
foo
=
option
->
matrix
.
mapRect
(
boundingRect
());
QPixmap
bar
=
image
->
scaled
(
foo
.
width
(),
foo
.
height
(),
Qt
::
IgnoreAspectRatio
,
Qt
::
SmoothTransformation
);
painter
->
drawPixmap
(
boundingRect
(),
bar
,
bar
.
rect
());
// painter->drawPixmap(boundingRect(), *image, QRectF(0, 0, image->width(), image->height()));
QSizeF
translatedSize
=
option
->
matrix
.
mapRect
(
boundingRect
()).
size
();
QPixmap
*
translatedPixmap
=
info
->
getPixmap
(
translatedSize
.
toSize
());
painter
->
drawPixmap
(
boundingRect
(),
*
translatedPixmap
,
translatedPixmap
->
rect
());
}
void
CardDragItem
::
mouseMoveEvent
(
QGraphicsSceneMouseEvent
*
event
)
...
...
cockatrice/src/carddragitem.h
View file @
04072b02
...
...
@@ -5,18 +5,19 @@
class
QGraphicsScene
;
class
CardZone
;
class
CardInfo
;
class
CardDragItem
:
public
QGraphicsItem
{
private:
QPixmap
*
image
;
int
id
;
CardInfo
*
info
;
QPointF
hotSpot
;
CardZone
*
startZone
;
bool
faceDown
;
public:
enum
{
Type
=
typeCardDrag
};
int
type
()
const
{
return
Type
;
}
CardDragItem
(
QGraphicsScene
*
scene
,
CardZone
*
_startZone
,
QPixmap
*
_image
,
int
_id
,
const
QPointF
&
_hotSpot
,
bool
_faceDown
,
QGraphicsItem
*
parent
=
0
);
CardDragItem
(
QGraphicsScene
*
scene
,
CardZone
*
_startZone
,
CardInfo
*
_info
,
int
_id
,
const
QPointF
&
_hotSpot
,
bool
_faceDown
,
QGraphicsItem
*
parent
=
0
);
~
CardDragItem
();
QRectF
boundingRect
()
const
;
void
paint
(
QPainter
*
painter
,
const
QStyleOptionGraphicsItem
*
option
,
QWidget
*
widget
);
...
...
cockatrice/src/cardinfowidget.cpp
View file @
04072b02
...
...
@@ -42,12 +42,13 @@ void CardInfoWidget::setCard(CardInfo *card)
if
(
!
card
)
return
;
QPixmap
*
pixmap
=
card
->
getPixmap
();
if
(
aspectratio
==
0
)
aspectratio
=
(
double
)
pixmap
->
height
()
/
pixmap
->
width
();
if
(
aspectratio
==
0
)
{
QPixmap
*
bigPixmap
=
card
->
loadPixmap
();
aspectratio
=
(
double
)
bigPixmap
->
height
()
/
bigPixmap
->
width
();
}
double
w
=
180
;
cardPicture
->
setPixmap
(
pixmap
->
scaled
((
int
)
w
,
(
int
)
(
w
*
aspectratio
),
Qt
::
KeepAspectRatio
,
Qt
::
SmoothTransformation
));
cardPicture
->
setPixmap
(
*
card
->
getPixmap
(
QSize
(
w
,
w
*
aspectratio
)
));
nameLabel2
->
setText
(
card
->
getName
());
manacostLabel2
->
setText
(
card
->
getManacost
());
cardtypeLabel2
->
setText
(
card
->
getCardType
());
...
...
cockatrice/src/carditem.cpp
View file @
04072b02
...
...
@@ -10,7 +10,6 @@
CardItem
::
CardItem
(
CardDatabase
*
_db
,
const
QString
&
_name
,
int
_cardid
,
QGraphicsItem
*
parent
)
:
QGraphicsItem
(
parent
),
db
(
_db
),
name
(
_name
),
id
(
_cardid
),
tapped
(
false
),
attacking
(
false
),
facedown
(
false
),
counters
(
0
),
doesntUntap
(
false
),
dragItem
(
NULL
)
{
image
=
db
->
getCard
(
name
)
->
getPixmap
();
setCursor
(
Qt
::
OpenHandCursor
);
setFlag
(
ItemIsSelectable
);
setAcceptsHoverEvents
(
true
);
...
...
@@ -31,15 +30,13 @@ QRectF CardItem::boundingRect() const
void
CardItem
::
paint
(
QPainter
*
painter
,
const
QStyleOptionGraphicsItem
*
option
,
QWidget
*/
*
widget
*/
)
{
painter
->
save
();
QRectF
foo
=
option
->
matrix
.
mapRect
(
boundingRect
());
qDebug
(
QString
(
"%1: w=%2,h=%3"
).
arg
(
name
).
arg
(
foo
.
width
()).
arg
(
foo
.
height
()).
toLatin1
());
QPixmap
bar
;
QSizeF
translatedSize
=
option
->
matrix
.
mapRect
(
boundingRect
()).
size
();
if
(
tapped
)
bar
=
image
->
scaled
((
int
)
foo
.
height
(),
(
int
)
foo
.
width
(),
Qt
::
IgnoreAspectRatio
,
Qt
::
SmoothTransformation
);
else
bar
=
image
->
scaled
((
int
)
foo
.
width
(),
(
int
)
foo
.
height
(),
Qt
::
IgnoreAspectRatio
,
Qt
::
SmoothTransformation
);
// painter->drawPixmap(boundingRect(), *image, QRectF(0, 0, image->width(), image->height()));
painter
->
drawPixmap
(
boundingRect
(),
bar
,
bar
.
rect
());
translatedSize
.
transpose
();
QPixmap
*
translatedPixmap
=
db
->
getCard
(
name
)
->
getPixmap
(
translatedSize
.
toSize
());
painter
->
drawPixmap
(
boundingRect
(),
*
translatedPixmap
,
translatedPixmap
->
rect
());
if
(
isSelected
())
{
painter
->
setPen
(
QPen
(
QColor
(
"red"
)));
painter
->
drawRect
(
QRectF
(
1
,
1
,
CARD_WIDTH
-
2
,
CARD_HEIGHT
-
2
));
...
...
@@ -57,7 +54,6 @@ void CardItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
void
CardItem
::
setName
(
const
QString
&
_name
)
{
name
=
_name
;
image
=
db
->
getCard
(
name
)
->
getPixmap
();
update
(
boundingRect
());
}
...
...
@@ -114,7 +110,7 @@ void CardItem::resetState()
CardDragItem
*
CardItem
::
createDragItem
(
CardZone
*
startZone
,
int
_id
,
const
QPointF
&
_pos
,
const
QPointF
&
_scenePos
,
bool
faceDown
)
{
deleteDragItem
();
dragItem
=
new
CardDragItem
(
scene
(),
startZone
,
image
,
_id
,
_pos
,
faceDown
);
dragItem
=
new
CardDragItem
(
scene
(),
startZone
,
db
->
getCard
(
name
)
,
_id
,
_pos
,
faceDown
);
dragItem
->
setPos
(
_scenePos
-
dragItem
->
getHotSpot
());
return
dragItem
;
...
...
@@ -154,7 +150,7 @@ void CardItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
CardItem
*
c
=
(
CardItem
*
)
sel
.
at
(
i
);
if
(
c
==
this
)
continue
;
CardDragItem
*
drag
=
new
CardDragItem
(
scene
(),
(
CardZone
*
)
parentItem
(),
c
->
get
Image
(
),
c
->
getId
(),
QPointF
(),
false
,
dragItem
);
CardDragItem
*
drag
=
new
CardDragItem
(
scene
(),
(
CardZone
*
)
parentItem
(),
db
->
get
Card
(
c
->
getName
()
),
c
->
getId
(),
QPointF
(),
false
,
dragItem
);
drag
->
setPos
(
c
->
pos
()
-
pos
());
}
setCursor
(
Qt
::
OpenHandCursor
);
...
...
cockatrice/src/carditem.h
View file @
04072b02
...
...
@@ -34,7 +34,6 @@ private:
CardDatabase
*
db
;
QString
name
;
int
id
;
QPixmap
*
image
;
bool
tapped
;
bool
attacking
;
bool
facedown
;
...
...
@@ -53,7 +52,6 @@ public:
void
setId
(
int
_id
)
{
id
=
_id
;
}
QString
getName
()
const
{
return
name
;
}
void
setName
(
const
QString
&
_name
=
QString
());
QPixmap
*
getImage
()
const
{
return
image
;
}
bool
getTapped
()
const
{
return
tapped
;
}
void
setTapped
(
bool
_tapped
);
bool
getAttacking
()
const
{
return
attacking
;
}
...
...
cockatrice/src/cardzone.h
View file @
04072b02
...
...
@@ -11,7 +11,6 @@ class QPainter;
class
CardZone
:
public
QGraphicsItem
{
protected:
QPixmap
*
image
;
Player
*
player
;
QString
name
;
CardList
*
cards
;
...
...
cockatrice/src/decklist.cpp
View file @
04072b02
...
...
@@ -343,7 +343,7 @@ void DeckList::cacheCardPicturesHelper(InnerDecklistNode *item, QProgressDialog
for
(
int
i
=
0
;
i
<
item
->
size
();
i
++
)
{
DecklistCardNode
*
node
=
dynamic_cast
<
DecklistCardNode
*>
(
item
->
at
(
i
));
if
(
node
)
{
db
->
getCard
(
node
->
getName
())
->
get
Pixmap
();
db
->
getCard
(
node
->
getName
())
->
load
Pixmap
();
progress
->
setValue
(
progress
->
value
()
+
1
);
}
else
cacheCardPicturesHelper
(
dynamic_cast
<
InnerDecklistNode
*>
(
item
->
at
(
i
)),
progress
);
...
...
cockatrice/src/libraryzone.cpp
View file @
04072b02
...
...
@@ -12,8 +12,6 @@ LibraryZone::LibraryZone(Player *_p, QGraphicsItem *parent)
cards
=
new
CardList
(
false
);
setCacheMode
(
DeviceCoordinateCache
);
// Do not move this line to the parent constructor!
setCursor
(
Qt
::
OpenHandCursor
);
image
=
player
->
getDb
()
->
getCard
()
->
getPixmap
();
}
QRectF
LibraryZone
::
boundingRect
()
const
...
...
@@ -25,9 +23,9 @@ void LibraryZone::paint(QPainter *painter, const QStyleOptionGraphicsItem *optio
{
painter
->
save
();
Q
RectF
foo
=
option
->
matrix
.
mapRect
(
boundingRect
());
QPixmap
bar
=
image
->
scaled
((
int
)
foo
.
width
(),
(
int
)
foo
.
height
(),
Qt
::
IgnoreAspectRatio
,
Qt
::
SmoothTransformation
);
painter
->
drawPixmap
(
boundingRect
(),
bar
,
bar
.
rect
());
Q
SizeF
translatedSize
=
option
->
matrix
.
mapRect
(
boundingRect
())
.
size
()
;
QPixmap
*
translatedPixmap
=
player
->
getDb
()
->
getCard
()
->
getPixmap
(
translatedSize
.
toSize
()
);
painter
->
drawPixmap
(
boundingRect
(),
*
translatedPixmap
,
translatedPixmap
->
rect
());
paintCardNumberEllipse
(
painter
);
...
...
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