diff --git a/cockatrice/cockatrice.pro b/cockatrice/cockatrice.pro index b4064ede..8c4dad2e 100644 --- a/cockatrice/cockatrice.pro +++ b/cockatrice/cockatrice.pro @@ -16,5 +16,5 @@ QT += network svg #QTPLUGIN += qjpeg # Input -HEADERS += src/counter.h src/gameselector.h src/dlg_creategame.h src/dlg_connect.h src/gamesmodel.h src/client.h src/window_main.h src/servergame.h src/servereventdata.h src/zonelist.h src/cardzone.h src/player.h src/cardlist.h src/carditem.h src/tablezone.h src/handzone.h src/playerlist.h src/game.h src/carddatabase.h src/gameview.h src/decklistmodel.h src/dlg_startgame.h src/cardinfowidget.h src/messagelogwidget.h src/serverzonecard.h src/zoneviewzone.h src/zoneviewwidget.h src/libraryzone.h src/pilezone.h src/carddragitem.h src/zoneviewlayout.h src/playerarea.h src/carddatabasemodel.h src/window_deckeditor.h src/decklist.h setsmodel.h src/window_sets.h src/dlg_editmessages.h -SOURCES += src/counter.cpp src/gameselector.cpp src/dlg_creategame.cpp src/dlg_connect.cpp src/client.cpp src/main.cpp src/window_main.cpp src/servereventdata.cpp src/gamesmodel.cpp src/player.cpp src/cardzone.cpp src/zonelist.cpp src/cardlist.cpp src/carditem.cpp src/tablezone.cpp src/handzone.cpp src/playerlist.cpp src/game.cpp src/carddatabase.cpp src/gameview.cpp src/decklistmodel.cpp src/dlg_startgame.cpp src/cardinfowidget.cpp src/messagelogwidget.cpp src/zoneviewzone.cpp src/zoneviewwidget.cpp src/libraryzone.cpp src/pilezone.cpp src/carddragitem.cpp src/zoneviewlayout.cpp src/playerarea.cpp src/carddatabasemodel.cpp src/window_deckeditor.cpp src/decklist.cpp src/setsmodel.cpp src/window_sets.cpp src/dlg_editmessages.cpp +HEADERS += src/counter.h src/gameselector.h src/dlg_creategame.h src/dlg_connect.h src/gamesmodel.h src/client.h src/window_main.h src/servergame.h src/servereventdata.h src/zonelist.h src/cardzone.h src/player.h src/cardlist.h src/carditem.h src/tablezone.h src/handzone.h src/playerlist.h src/game.h src/carddatabase.h src/gameview.h src/decklistmodel.h src/dlg_startgame.h src/cardinfowidget.h src/messagelogwidget.h src/serverzonecard.h src/zoneviewzone.h src/zoneviewwidget.h src/libraryzone.h src/pilezone.h src/carddragitem.h src/zoneviewlayout.h src/playerarea.h src/carddatabasemodel.h src/window_deckeditor.h src/decklist.h setsmodel.h src/window_sets.h src/dlg_editmessages.h src/abstractgraphicsitem.h +SOURCES += src/counter.cpp src/gameselector.cpp src/dlg_creategame.cpp src/dlg_connect.cpp src/client.cpp src/main.cpp src/window_main.cpp src/servereventdata.cpp src/gamesmodel.cpp src/player.cpp src/cardzone.cpp src/zonelist.cpp src/cardlist.cpp src/carditem.cpp src/tablezone.cpp src/handzone.cpp src/playerlist.cpp src/game.cpp src/carddatabase.cpp src/gameview.cpp src/decklistmodel.cpp src/dlg_startgame.cpp src/cardinfowidget.cpp src/messagelogwidget.cpp src/zoneviewzone.cpp src/zoneviewwidget.cpp src/libraryzone.cpp src/pilezone.cpp src/carddragitem.cpp src/zoneviewlayout.cpp src/playerarea.cpp src/carddatabasemodel.cpp src/window_deckeditor.cpp src/decklist.cpp src/setsmodel.cpp src/window_sets.cpp src/dlg_editmessages.cpp src/abstractgraphicsitem.cpp diff --git a/cockatrice/src/abstractgraphicsitem.cpp b/cockatrice/src/abstractgraphicsitem.cpp new file mode 100644 index 00000000..5e594ede --- /dev/null +++ b/cockatrice/src/abstractgraphicsitem.cpp @@ -0,0 +1,33 @@ +#include "abstractgraphicsitem.h" +#include + +void AbstractGraphicsItem::paintNumberEllipse(int number, QPainter *painter) +{ + painter->save(); + + QString numStr = QString::number(number); + QFont font("Times"); + font.setPixelSize(32); + font.setWeight(QFont::Bold); + + QFontMetrics fm(font); + double w = fm.width(numStr) * 1.5; + double h = fm.height() * 1.5; + if (w < h) + w = h; + + painter->setPen(QColor(255, 255, 255, 0)); + QRadialGradient grad(QPointF(0.5, 0.5), 0.5); + grad.setCoordinateMode(QGradient::ObjectBoundingMode); + grad.setColorAt(0, QColor(255, 255, 255, 200)); + grad.setColorAt(0.7, QColor(255, 255, 255, 200)); + grad.setColorAt(1, QColor(255, 255, 255, 0)); + painter->setBrush(QBrush(grad)); + painter->drawEllipse(QRectF((boundingRect().width() - w) / 2.0, (boundingRect().height() - h) / 2.0, w, h)); + + painter->setPen(Qt::black); + painter->setFont(font); + painter->drawText(boundingRect(), Qt::AlignCenter, numStr); + + painter->restore(); +} diff --git a/cockatrice/src/abstractgraphicsitem.h b/cockatrice/src/abstractgraphicsitem.h new file mode 100644 index 00000000..af5d9550 --- /dev/null +++ b/cockatrice/src/abstractgraphicsitem.h @@ -0,0 +1,13 @@ +#ifndef ABSTRACTGRAPHICSITEM_H +#define ABSTRACTGRAPHICSITEM_H + +#include + +class AbstractGraphicsItem : public QGraphicsItem { +protected: + void paintNumberEllipse(int number, QPainter *painter); +public: + AbstractGraphicsItem(QGraphicsItem *parent = 0) : QGraphicsItem(parent) { } +}; + +#endif diff --git a/cockatrice/src/carditem.cpp b/cockatrice/src/carditem.cpp index d3a50e3f..c9411d6e 100644 --- a/cockatrice/src/carditem.cpp +++ b/cockatrice/src/carditem.cpp @@ -8,7 +8,7 @@ #include "player.h" 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) + : AbstractGraphicsItem(parent), db(_db), name(_name), id(_cardid), tapped(false), attacking(false), facedown(false), counters(0), doesntUntap(false), dragItem(NULL) { setCursor(Qt::OpenHandCursor); setFlag(ItemIsSelectable); @@ -61,23 +61,9 @@ void CardItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, painter->setPen(Qt::red); painter->drawRect(QRectF(0.5, 0.5, CARD_WIDTH - 1, CARD_HEIGHT - 1)); } - if (counters) { - QString numStr = QString::number(counters); - QFont font("Times", 32, QFont::Bold); - QFontMetrics fm(font); - QRect br = fm.boundingRect(numStr); - double w = br.width() * 1.42; - double h = br.height() * 1.42; - if (w < h) - w = h; - - painter->setPen(Qt::black); - painter->setBrush(QColor(255, 255, 255, 150)); - painter->drawEllipse(QRectF((boundingRect().width() - w) / 2.0, (boundingRect().height() - h) / 2.0, w, h)); - - painter->setFont(font); - painter->drawText(boundingRect(), Qt::AlignCenter, numStr); - } + if (counters) + paintNumberEllipse(counters, painter); + painter->restore(); } diff --git a/cockatrice/src/carditem.h b/cockatrice/src/carditem.h index 669ccae2..d009f898 100644 --- a/cockatrice/src/carditem.h +++ b/cockatrice/src/carditem.h @@ -1,13 +1,12 @@ #ifndef CARDITEM_H #define CARDITEM_H -#include +#include "abstractgraphicsitem.h" class CardDatabase; class CardDragItem; class CardZone; - const int CARD_WIDTH = 72; const int CARD_HEIGHT = 102; const int RASTER_WIDTH = 36; @@ -22,7 +21,7 @@ enum CardItemType { typeOther = QGraphicsItem::UserType + 4 }; -class CardItem : public QGraphicsItem { +class CardItem : public AbstractGraphicsItem { private: CardDatabase *db; QString name; diff --git a/cockatrice/src/cardzone.cpp b/cockatrice/src/cardzone.cpp index 708fc149..b49e76a9 100644 --- a/cockatrice/src/cardzone.cpp +++ b/cockatrice/src/cardzone.cpp @@ -6,7 +6,7 @@ #include "zoneviewzone.h" CardZone::CardZone(Player *_p, const QString &_name, bool _hasCardAttr, bool _isShufflable, QGraphicsItem *parent, bool isView) - : QGraphicsItem(parent), player(_p), name(_name), cards(NULL), view(NULL), menu(NULL), hasCardAttr(_hasCardAttr), isShufflable(_isShufflable) + : AbstractGraphicsItem(parent), player(_p), name(_name), cards(NULL), view(NULL), menu(NULL), hasCardAttr(_hasCardAttr), isShufflable(_isShufflable) { if (!isView) player->addZone(this); @@ -109,26 +109,3 @@ void CardZone::moveAllToZone(const QString &targetZone, int targetX) for (int i = cards->size() - 1; i >= 0; i--) player->client->moveCard(cards->at(i)->getId(), getName(), targetZone, targetX); } - -void CardZone::paintCardNumberEllipse(QPainter *painter) -{ - painter->save(); - - QString numStr = QString::number(cards->size()); - QFont font("Times", 32, QFont::Bold); - QFontMetrics fm(font); - QRect br = fm.boundingRect(numStr); - double w = br.width() * 1.42; - double h = br.height() * 1.42; - if (w < h) - w = h; - - painter->setPen(QPen(QColor("black"))); - painter->setBrush(QColor(255, 255, 255, 150)); - painter->drawEllipse(QRectF((boundingRect().width() - w) / 2.0, (boundingRect().height() - h) / 2.0, w, h)); - - painter->setFont(font); - painter->drawText(boundingRect(), Qt::AlignCenter, numStr); - - painter->restore(); -} diff --git a/cockatrice/src/cardzone.h b/cockatrice/src/cardzone.h index ed2cc701..f81aee8a 100644 --- a/cockatrice/src/cardzone.h +++ b/cockatrice/src/cardzone.h @@ -3,6 +3,7 @@ #include #include "cardlist.h" +#include "abstractgraphicsitem.h" class Player; class ZoneViewZone; @@ -10,7 +11,7 @@ class QMenu; class QAction; class QPainter; -class CardZone : public QGraphicsItem { +class CardZone : public AbstractGraphicsItem { protected: Player *player; QString name; @@ -23,7 +24,6 @@ protected: void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event); void mousePressEvent(QGraphicsSceneMouseEvent *event); virtual void addCardImpl(CardItem *card, int x, int y) = 0; - void paintCardNumberEllipse(QPainter *painter); public: enum { Type = typeZone }; int type() const { return Type; } diff --git a/cockatrice/src/libraryzone.cpp b/cockatrice/src/libraryzone.cpp index ff8f3e45..487b3a97 100644 --- a/cockatrice/src/libraryzone.cpp +++ b/cockatrice/src/libraryzone.cpp @@ -29,7 +29,7 @@ void LibraryZone::paint(QPainter *painter, const QStyleOptionGraphicsItem *optio painter->drawPixmap(translatedPixmap->rect(), *translatedPixmap, translatedPixmap->rect()); painter->restore(); - paintCardNumberEllipse(painter); + paintNumberEllipse(cards->size(), painter); } void LibraryZone::addCardImpl(CardItem *card, int x, int /*y*/) diff --git a/cockatrice/src/pilezone.cpp b/cockatrice/src/pilezone.cpp index 8af98a6a..649c6472 100644 --- a/cockatrice/src/pilezone.cpp +++ b/cockatrice/src/pilezone.cpp @@ -26,7 +26,7 @@ void PileZone::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, painter->restore(); } - paintCardNumberEllipse(painter); + paintNumberEllipse(cards->size(), painter); painter->drawRect(QRectF(0.5, 0.5, CARD_WIDTH - 1, CARD_HEIGHT - 1)); }