mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-05-05 07:35:12 -04:00
added game plugin solocards
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@2346 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
f2f23e7ece
commit
082d5732b0
92 changed files with 24978 additions and 0 deletions
193
plugins/qsolocards_plugin/CardPixmaps.cpp
Normal file
193
plugins/qsolocards_plugin/CardPixmaps.cpp
Normal file
|
@ -0,0 +1,193 @@
|
|||
/*
|
||||
QSoloCards is a collection of Solitaire card games written using Qt
|
||||
Copyright (C) 2009 Steve Moore
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "CardPixmaps.h"
|
||||
#include <QtGui/QPainter>
|
||||
#include <QtGui/QImage>
|
||||
|
||||
const qreal CardPixmaps::CardWidthToHeight=.66;
|
||||
const QString CardPixmaps::EmptyStackName("empty");
|
||||
const QString CardPixmaps::EmptyStackRedealName("emtpy_redeal");
|
||||
const QString CardPixmaps::CardBackName("back");
|
||||
const QString CardPixmaps::TransparentNoCard("transparent");
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
CardPixmaps::~CardPixmaps()
|
||||
{
|
||||
delete m_pSvgRendCard;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
CardPixmaps & CardPixmaps::getInst()
|
||||
{
|
||||
static CardPixmaps cardPixmaps;
|
||||
|
||||
return cardPixmaps;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
void CardPixmaps::setCardWidth(unsigned int width)
|
||||
{
|
||||
m_cardSize.setWidth(width);
|
||||
m_cardSize.setHeight(width/CardWidthToHeight);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
void CardPixmaps::setCardHeight(unsigned int height)
|
||||
{
|
||||
m_cardSize.setHeight(height);
|
||||
m_cardSize.setWidth(height*CardWidthToHeight);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
CardPixmaps::CardPixmaps()
|
||||
:m_pSvgRendCard(new QSvgRenderer(QString(":/images/anglo_bitmap.svg"))),
|
||||
m_pixmapMap(),
|
||||
m_cardSize(0,0)
|
||||
{
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
const QPixmap & CardPixmaps::getCardPixmap(const QString & imageName,bool highlighted)
|
||||
{
|
||||
QString fullImageName("");
|
||||
|
||||
if (highlighted)
|
||||
{
|
||||
fullImageName+="hl_";
|
||||
}
|
||||
fullImageName+=imageName;
|
||||
|
||||
CardPixmapMap::iterator it=m_pixmapMap.find(fullImageName.toStdString());
|
||||
|
||||
if (m_pixmapMap.end()!=it)
|
||||
{
|
||||
return it->second;
|
||||
}
|
||||
|
||||
QPainter painter;
|
||||
|
||||
QPixmap dummyPix(m_cardSize);
|
||||
|
||||
dummyPix.fill(Qt::transparent);
|
||||
|
||||
m_pixmapMap[fullImageName.toStdString()]=dummyPix;
|
||||
painter.begin(&m_pixmapMap[fullImageName.toStdString()]);
|
||||
if (imageName==EmptyStackName || imageName==EmptyStackRedealName)
|
||||
{
|
||||
drawEmptyStack(painter,highlighted,imageName==EmptyStackRedealName);
|
||||
}
|
||||
else if (imageName==TransparentNoCard)
|
||||
{
|
||||
}
|
||||
else if (highlighted)
|
||||
{
|
||||
drawHighlightedCard(painter,imageName);
|
||||
}
|
||||
else
|
||||
{
|
||||
QRect pixRect(QPoint(0,0),m_cardSize);
|
||||
|
||||
m_pSvgRendCard->render(&painter,imageName,pixRect);
|
||||
}
|
||||
|
||||
painter.end();
|
||||
|
||||
return m_pixmapMap[fullImageName.toStdString()];
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
void CardPixmaps::drawEmptyStack(QPainter & painter,bool highlighted,bool redealCircle)
|
||||
{
|
||||
QPoint topLeft(0,0);
|
||||
QPen pen;
|
||||
|
||||
|
||||
pen.setColor(QColor("#006520"));
|
||||
|
||||
pen.setWidth(3);
|
||||
painter.setPen(pen);
|
||||
|
||||
|
||||
QRect rect(topLeft,m_cardSize);
|
||||
|
||||
painter.setRenderHint(QPainter::Antialiasing,true);
|
||||
|
||||
|
||||
if (redealCircle)
|
||||
{
|
||||
QPoint ellipseCenter(rect.left()+rect.width()/2,
|
||||
rect.top()+rect.height()/2);
|
||||
|
||||
pen.setWidth(10);
|
||||
painter.setBrush(QColor("#006520"));
|
||||
painter.drawEllipse(ellipseCenter,
|
||||
rect.width()/3,rect.width()/3);
|
||||
}
|
||||
|
||||
painter.setBrush(Qt::transparent);
|
||||
|
||||
// draw the highlight rect if necessary.
|
||||
if (highlighted)
|
||||
{
|
||||
painter.setBrush(QBrush(QColor("#806000"),Qt::Dense4Pattern));
|
||||
}
|
||||
|
||||
painter.drawRoundedRect(rect.adjusted(1,1,-1,-1),6.0,6.0);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
void CardPixmaps::drawHighlightedCard(QPainter & painter,const QString & imageName)
|
||||
{
|
||||
// for the highlighted case we are going to manipulate the original
|
||||
// image and change the background of the card to a yellowish color
|
||||
// to highlight it.
|
||||
|
||||
// A QImage is necessary in Format_ARGB32_Premultiplied or Format_ARGB32
|
||||
// is required to use the composite modes. So, draw the pixmap on the
|
||||
// QImage. And then render the result in our pixmap.
|
||||
|
||||
QRect pixRect(QPoint(0,0),m_cardSize);
|
||||
|
||||
QImage image(m_cardSize,QImage::Format_ARGB32_Premultiplied);
|
||||
|
||||
image.fill(Qt::transparent);
|
||||
|
||||
QPainter imagePainter;
|
||||
|
||||
imagePainter.begin(&image);
|
||||
|
||||
imagePainter.setPen(Qt::NoPen);
|
||||
|
||||
imagePainter.setBrush(QColor("#ffff90"));
|
||||
imagePainter.drawPixmap(QPoint(0,0),getCardPixmap(imageName));
|
||||
|
||||
imagePainter.setCompositionMode(QPainter::CompositionMode_Darken);
|
||||
imagePainter.drawRoundedRect(pixRect.adjusted(0,0,-1,-1),4.0,4.0);
|
||||
|
||||
imagePainter.end();
|
||||
painter.drawImage(QPoint(0,0),image);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue