diff --git a/CMakeLists.txt b/CMakeLists.txt index c7ac1eb9..c4d239fe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -221,7 +221,7 @@ option(WITH_CLIENT "build cockatrice" ON) if(WITH_CLIENT) add_subdirectory(cockatrice) add_subdirectory(sounds) - add_subdirectory(zonebg) + add_subdirectory(themes) SET(CPACK_INSTALL_CMAKE_PROJECTS "cockatrice;cockatrice;ALL;/" ${CPACK_INSTALL_CMAKE_PROJECTS}) endif() diff --git a/cockatrice/CMakeLists.txt b/cockatrice/CMakeLists.txt index 99f2e62e..108bd885 100644 --- a/cockatrice/CMakeLists.txt +++ b/cockatrice/CMakeLists.txt @@ -84,6 +84,7 @@ SET(cockatrice_SOURCES src/playerlistwidget.cpp src/pixmapgenerator.cpp src/settingscache.cpp + src/thememanager.cpp src/localserver.cpp src/localserverinterface.cpp src/localclient.cpp diff --git a/cockatrice/cockatrice.qrc b/cockatrice/cockatrice.qrc index ebf5f44e..4fecaa62 100644 --- a/cockatrice/cockatrice.qrc +++ b/cockatrice/cockatrice.qrc @@ -1,6 +1,6 @@ - resources/back.svg + resources/back.svg resources/lock.svg resources/icon_delete.svg resources/icon_tab_changed.svg diff --git a/cockatrice/src/carddatabase.cpp b/cockatrice/src/carddatabase.cpp index 26d8b219..d2e3a2f7 100644 --- a/cockatrice/src/carddatabase.cpp +++ b/cockatrice/src/carddatabase.cpp @@ -1,5 +1,6 @@ #include "carddatabase.h" #include "settingscache.h" +#include "thememanager.h" #include #include #include @@ -570,7 +571,7 @@ void CardInfo::loadPixmap(QPixmap &pixmap) pixmap = QPixmap(); if (getName().isEmpty()) { - pixmap.load(settingsCache->getCardBackPicturePath()); + pixmap = themeManager->getCardBackPixmap(); return; } @@ -594,15 +595,15 @@ void CardInfo::getPixmap(QSize size, QPixmap &pixmap) QPixmap bigPixmap; loadPixmap(bigPixmap); if (bigPixmap.isNull()) { - if (!getName().isEmpty()) { - pixmap = QPixmap(); // null - return; - } else { - QSvgRenderer svg(QString(":/back.svg")); + if (getName().isEmpty()) { + QSvgRenderer svg(QString("theme:back.svg")); bigPixmap = QPixmap(svg.defaultSize()); bigPixmap.fill(Qt::transparent); QPainter painter(&bigPixmap); svg.render(&painter); + } else { + pixmap = QPixmap(); // null + return; } } @@ -724,7 +725,7 @@ CardDatabase::CardDatabase(QObject *parent) noCard = new CardInfo(this); QPixmap tmp; noCard->loadPixmap(tmp); // cache pixmap for card back - connect(settingsCache, SIGNAL(cardBackPicturePathChanged()), noCard, SLOT(updatePixmapCache())); + connect(themeManager, SIGNAL(themeChanged()), noCard, SLOT(updatePixmapCache())); } CardDatabase::~CardDatabase() diff --git a/cockatrice/src/decklistmodel.cpp b/cockatrice/src/decklistmodel.cpp index 039db364..f08fe992 100644 --- a/cockatrice/src/decklistmodel.cpp +++ b/cockatrice/src/decklistmodel.cpp @@ -463,7 +463,7 @@ void DeckListModel::printDeckList(QPrinter *printer) cursor.insertBlock(headerBlockFormat, headerCharFormat); for (int i = 0; i < root->size(); i++) { - cursor.insertHtml("
"); + cursor.insertHtml("
"); //cursor.insertHtml("
"); cursor.insertBlock(headerBlockFormat, headerCharFormat); diff --git a/cockatrice/src/deckview.cpp b/cockatrice/src/deckview.cpp index 836aa533..0f439c17 100644 --- a/cockatrice/src/deckview.cpp +++ b/cockatrice/src/deckview.cpp @@ -5,6 +5,7 @@ #include "decklist.h" #include "carddatabase.h" #include "settingscache.h" +#include "thememanager.h" #include "main.h" DeckViewCardDragItem::DeckViewCardDragItem(DeckViewCard *_item, const QPointF &_hotSpot, AbstractCardDragItem *parentDrag) @@ -128,10 +129,6 @@ void DeckViewCard::hoverEnterEvent(QGraphicsSceneHoverEvent *event) DeckViewCardContainer::DeckViewCardContainer(const QString &_name) : QGraphicsItem(), name(_name), width(0), height(0) { - QString bgPath = settingsCache->getTableBgPath(); - if (!bgPath.isEmpty()) - bgPixmap.load(bgPath); - setCacheMode(DeviceCoordinateCache); } @@ -144,17 +141,7 @@ void DeckViewCardContainer::paint(QPainter *painter, const QStyleOptionGraphicsI { qreal totalTextWidth = getCardTypeTextWidth(); - if (bgPixmap.isNull()) { - QLinearGradient grad1(0, 0, 1, 0); - grad1.setCoordinateMode(QGradient::ObjectBoundingMode); - grad1.setColorAt(0, QColor(30, 30, 30)); - grad1.setColorAt(1, QColor(80, 80, 80)); - painter->fillRect(QRectF(0, 0, width, height), QBrush(grad1)); - - painter->fillRect(boundingRect(), QColor(0, 0, 0, 80)); - } - else - painter->fillRect(boundingRect(), QBrush(bgPixmap)); + painter->fillRect(boundingRect(), themeManager->getTableBgBrush()); painter->setPen(QColor(255, 255, 255, 100)); painter->drawLine(QPointF(0, separatorY), QPointF(width, separatorY)); diff --git a/cockatrice/src/deckview.h b/cockatrice/src/deckview.h index 059afa2a..91246eb2 100644 --- a/cockatrice/src/deckview.h +++ b/cockatrice/src/deckview.h @@ -52,7 +52,6 @@ private: QMultiMap cardsByType; QList > currentRowsAndCols; qreal width, height; - QPixmap bgPixmap; int getCardTypeTextWidth() const; public: enum { Type = typeDeckViewCardContainer }; diff --git a/cockatrice/src/dlg_edit_tokens.cpp b/cockatrice/src/dlg_edit_tokens.cpp index 4f2b6372..4f32890b 100644 --- a/cockatrice/src/dlg_edit_tokens.cpp +++ b/cockatrice/src/dlg_edit_tokens.cpp @@ -83,10 +83,10 @@ DlgEditTokens::DlgEditTokens(CardDatabaseModel *_cardDatabaseModel, QWidget *par connect(chooseTokenView->selectionModel(), SIGNAL(currentRowChanged(QModelIndex, QModelIndex)), this, SLOT(tokenSelectionChanged(QModelIndex, QModelIndex))); QAction *aAddToken = new QAction(tr("Add token"), this); - aAddToken->setIcon(QIcon(":/resources/increment.svg")); + aAddToken->setIcon(QIcon("theme:increment.svg")); connect(aAddToken, SIGNAL(triggered()), this, SLOT(actAddToken())); QAction *aRemoveToken = new QAction(tr("Remove token"), this); - aRemoveToken->setIcon(QIcon(":/resources/decrement.svg")); + aRemoveToken->setIcon(QIcon("theme:decrement.svg")); connect(aRemoveToken, SIGNAL(triggered()), this, SLOT(actRemoveToken())); QToolBar *databaseToolBar = new QToolBar; diff --git a/cockatrice/src/dlg_settings.cpp b/cockatrice/src/dlg_settings.cpp index 254c1e78..006301bc 100644 --- a/cockatrice/src/dlg_settings.cpp +++ b/cockatrice/src/dlg_settings.cpp @@ -26,6 +26,7 @@ #include "dlg_settings.h" #include "main.h" #include "settingscache.h" +#include "thememanager.h" #include "priceupdater.h" #include "soundengine.h" @@ -234,67 +235,23 @@ void GeneralSettingsPage::retranslateUi() AppearanceSettingsPage::AppearanceSettingsPage() { - QIcon deleteIcon(":/resources/icon_delete.svg"); - - handBgEdit = new QLineEdit(settingsCache->getHandBgPath()); - handBgEdit->setReadOnly(true); - QPushButton *handBgClearButton = new QPushButton(deleteIcon, QString()); - connect(handBgClearButton, SIGNAL(clicked()), this, SLOT(handBgClearButtonClicked())); - QPushButton *handBgButton = new QPushButton("..."); - connect(handBgButton, SIGNAL(clicked()), this, SLOT(handBgButtonClicked())); - - stackBgEdit = new QLineEdit(settingsCache->getStackBgPath()); - stackBgEdit->setReadOnly(true); - QPushButton *stackBgClearButton = new QPushButton(deleteIcon, QString()); - connect(stackBgClearButton, SIGNAL(clicked()), this, SLOT(stackBgClearButtonClicked())); - QPushButton *stackBgButton = new QPushButton("..."); - connect(stackBgButton, SIGNAL(clicked()), this, SLOT(stackBgButtonClicked())); + QString themeName = settingsCache->getThemeName(); - tableBgEdit = new QLineEdit(settingsCache->getTableBgPath()); - tableBgEdit->setReadOnly(true); - QPushButton *tableBgClearButton = new QPushButton(deleteIcon, QString()); - connect(tableBgClearButton, SIGNAL(clicked()), this, SLOT(tableBgClearButtonClicked())); - QPushButton *tableBgButton = new QPushButton("..."); - connect(tableBgButton, SIGNAL(clicked()), this, SLOT(tableBgButtonClicked())); - - playerAreaBgEdit = new QLineEdit(settingsCache->getPlayerBgPath()); - playerAreaBgEdit->setReadOnly(true); - QPushButton *playerAreaBgClearButton = new QPushButton(deleteIcon, QString()); - connect(playerAreaBgClearButton, SIGNAL(clicked()), this, SLOT(playerAreaBgClearButtonClicked())); - QPushButton *playerAreaBgButton = new QPushButton("..."); - connect(playerAreaBgButton, SIGNAL(clicked()), this, SLOT(playerAreaBgButtonClicked())); - - cardBackPicturePathEdit = new QLineEdit(settingsCache->getCardBackPicturePath()); - cardBackPicturePathEdit->setReadOnly(true); - QPushButton *cardBackPicturePathClearButton = new QPushButton(deleteIcon, QString()); - connect(cardBackPicturePathClearButton, SIGNAL(clicked()), this, SLOT(cardBackPicturePathClearButtonClicked())); - QPushButton *cardBackPicturePathButton = new QPushButton("..."); - connect(cardBackPicturePathButton, SIGNAL(clicked()), this, SLOT(cardBackPicturePathButtonClicked())); - - QGridLayout *zoneBgGrid = new QGridLayout; - zoneBgGrid->addWidget(&handBgLabel, 0, 0); - zoneBgGrid->addWidget(handBgEdit, 0, 1); - zoneBgGrid->addWidget(handBgClearButton, 0, 2); - zoneBgGrid->addWidget(handBgButton, 0, 3); - zoneBgGrid->addWidget(&stackBgLabel, 1, 0); - zoneBgGrid->addWidget(stackBgEdit, 1, 1); - zoneBgGrid->addWidget(stackBgClearButton, 1, 2); - zoneBgGrid->addWidget(stackBgButton, 1, 3); - zoneBgGrid->addWidget(&tableBgLabel, 2, 0); - zoneBgGrid->addWidget(tableBgEdit, 2, 1); - zoneBgGrid->addWidget(tableBgClearButton, 2, 2); - zoneBgGrid->addWidget(tableBgButton, 2, 3); - zoneBgGrid->addWidget(&playerAreaBgLabel, 3, 0); - zoneBgGrid->addWidget(playerAreaBgEdit, 3, 1); - zoneBgGrid->addWidget(playerAreaBgClearButton, 3, 2); - zoneBgGrid->addWidget(playerAreaBgButton, 3, 3); - zoneBgGrid->addWidget(&cardBackPicturePathLabel, 4, 0); - zoneBgGrid->addWidget(cardBackPicturePathEdit, 4, 1); - zoneBgGrid->addWidget(cardBackPicturePathClearButton, 4, 2); - zoneBgGrid->addWidget(cardBackPicturePathButton, 4, 3); + QStringList themeDirs = themeManager->getAvailableThemes().keys(); + for (int i = 0; i < themeDirs.size(); i++) { + themeBox.addItem(themeDirs[i]); + if (themeDirs[i] == themeName) + themeBox.setCurrentIndex(i); + } - zoneBgGroupBox = new QGroupBox; - zoneBgGroupBox->setLayout(zoneBgGrid); + connect(&themeBox, SIGNAL(currentIndexChanged(int)), this, SLOT(themeBoxChanged(int))); + + QGridLayout *themeGrid = new QGridLayout; + themeGrid->addWidget(&themeLabel, 0, 0); + themeGrid->addWidget(&themeBox, 0, 1); + + themeGroupBox = new QGroupBox; + themeGroupBox->setLayout(themeGrid); displayCardNamesCheckBox.setChecked(settingsCache->getDisplayCardNames()); connect(&displayCardNamesCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setDisplayCardNames(int))); @@ -339,7 +296,7 @@ AppearanceSettingsPage::AppearanceSettingsPage() tableGroupBox->setLayout(tableGrid); QVBoxLayout *mainLayout = new QVBoxLayout; - mainLayout->addWidget(zoneBgGroupBox); + mainLayout->addWidget(themeGroupBox); mainLayout->addWidget(cardsGroupBox); mainLayout->addWidget(handGroupBox); mainLayout->addWidget(tableGroupBox); @@ -347,14 +304,17 @@ AppearanceSettingsPage::AppearanceSettingsPage() setLayout(mainLayout); } +void AppearanceSettingsPage::themeBoxChanged(int index) +{ + QStringList themeDirs = themeManager->getAvailableThemes().keys(); + if(index >= 0 && index < themeDirs.count()) + settingsCache->setThemeName(themeDirs.at(index)); +} + void AppearanceSettingsPage::retranslateUi() { - zoneBgGroupBox->setTitle(tr("Zone background pictures")); - handBgLabel.setText(tr("Hand background:")); - stackBgLabel.setText(tr("Stack background:")); - tableBgLabel.setText(tr("Table background:")); - playerAreaBgLabel.setText(tr("Player info background:")); - cardBackPicturePathLabel.setText(tr("Card back:")); + themeGroupBox->setTitle(tr("Theme settings")); + themeLabel.setText(tr("Current theme:")); cardsGroupBox->setTitle(tr("Card rendering")); displayCardNamesCheckBox.setText(tr("Display card names on cards having a picture")); @@ -369,86 +329,6 @@ void AppearanceSettingsPage::retranslateUi() minPlayersForMultiColumnLayoutLabel.setText(tr("Minimum player count for multi-column layout:")); } -void AppearanceSettingsPage::handBgClearButtonClicked() -{ - handBgEdit->setText(QString()); - settingsCache->setHandBgPath(QString()); -} - -void AppearanceSettingsPage::handBgButtonClicked() -{ - QString path = QFileDialog::getOpenFileName(this, tr("Choose path")); - if (path.isEmpty()) - return; - - handBgEdit->setText(path); - settingsCache->setHandBgPath(path); -} - -void AppearanceSettingsPage::stackBgClearButtonClicked() -{ - stackBgEdit->setText(QString()); - settingsCache->setStackBgPath(QString()); -} - -void AppearanceSettingsPage::stackBgButtonClicked() -{ - QString path = QFileDialog::getOpenFileName(this, tr("Choose path")); - if (path.isEmpty()) - return; - - stackBgEdit->setText(path); - settingsCache->setStackBgPath(path); -} - -void AppearanceSettingsPage::tableBgClearButtonClicked() -{ - tableBgEdit->setText(QString()); - settingsCache->setTableBgPath(QString()); -} - -void AppearanceSettingsPage::tableBgButtonClicked() -{ - QString path = QFileDialog::getOpenFileName(this, tr("Choose path")); - if (path.isEmpty()) - return; - - tableBgEdit->setText(path); - settingsCache->setTableBgPath(path); -} - -void AppearanceSettingsPage::playerAreaBgClearButtonClicked() -{ - playerAreaBgEdit->setText(QString()); - settingsCache->setPlayerBgPath(QString()); -} - -void AppearanceSettingsPage::playerAreaBgButtonClicked() -{ - QString path = QFileDialog::getOpenFileName(this, tr("Choose path")); - if (path.isEmpty()) - return; - - playerAreaBgEdit->setText(path); - settingsCache->setPlayerBgPath(path); -} - -void AppearanceSettingsPage::cardBackPicturePathClearButtonClicked() -{ - cardBackPicturePathEdit->setText(QString()); - settingsCache->setCardBackPicturePath(QString()); -} - -void AppearanceSettingsPage::cardBackPicturePathButtonClicked() -{ - QString path = QFileDialog::getOpenFileName(this, tr("Choose path")); - if (path.isEmpty()) - return; - - cardBackPicturePathEdit->setText(path); - settingsCache->setCardBackPicturePath(path); -} - UserInterfaceSettingsPage::UserInterfaceSettingsPage() { notificationsEnabledCheckBox.setChecked(settingsCache->getNotificationsEnabled()); @@ -588,10 +468,10 @@ MessagesSettingsPage::MessagesSettingsPage() messageList->addItem(settings.value(QString("msg%1").arg(i)).toString()); aAdd = new QAction(this); - aAdd->setIcon(QIcon(":/resources/increment.svg")); + aAdd->setIcon(QIcon("theme:increment.svg")); connect(aAdd, SIGNAL(triggered()), this, SLOT(actAdd())); aRemove = new QAction(this); - aRemove->setIcon(QIcon(":/resources/decrement.svg")); + aRemove->setIcon(QIcon("theme:decrement.svg")); connect(aRemove, SIGNAL(triggered()), this, SLOT(actRemove())); QToolBar *messageToolBar = new QToolBar; @@ -679,7 +559,7 @@ void MessagesSettingsPage::retranslateUi() SoundSettingsPage::SoundSettingsPage() { - QIcon deleteIcon(":/resources/icon_delete.svg"); + QIcon deleteIcon("theme:icon_delete.svg"); soundEnabledCheckBox.setChecked(settingsCache->getSoundEnabled()); connect(&soundEnabledCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setSoundEnabled(int))); @@ -815,32 +695,32 @@ void DlgSettings::createIcons() generalButton = new QListWidgetItem(contentsWidget); generalButton->setTextAlignment(Qt::AlignHCenter); generalButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); - generalButton->setIcon(QIcon(":/resources/icon_config_general.svg")); + generalButton->setIcon(QIcon("theme:icon_config_general.svg")); appearanceButton = new QListWidgetItem(contentsWidget); appearanceButton->setTextAlignment(Qt::AlignHCenter); appearanceButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); - appearanceButton->setIcon(QIcon(":/resources/icon_config_appearance.svg")); + appearanceButton->setIcon(QIcon("theme:icon_config_appearance.svg")); userInterfaceButton = new QListWidgetItem(contentsWidget); userInterfaceButton->setTextAlignment(Qt::AlignHCenter); userInterfaceButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); - userInterfaceButton->setIcon(QIcon(":/resources/icon_config_interface.svg")); + userInterfaceButton->setIcon(QIcon("theme:icon_config_interface.svg")); deckEditorButton = new QListWidgetItem(contentsWidget); deckEditorButton->setTextAlignment(Qt::AlignHCenter); deckEditorButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); - deckEditorButton->setIcon(QIcon(":/resources/icon_config_deckeditor.svg")); + deckEditorButton->setIcon(QIcon("theme:icon_config_deckeditor.svg")); messagesButton = new QListWidgetItem(contentsWidget); messagesButton->setTextAlignment(Qt::AlignHCenter); messagesButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); - messagesButton->setIcon(QIcon(":/resources/icon_config_messages.svg")); + messagesButton->setIcon(QIcon("theme:icon_config_messages.svg")); soundButton = new QListWidgetItem(contentsWidget); soundButton->setTextAlignment(Qt::AlignHCenter); soundButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); - soundButton->setIcon(QIcon(":/resources/icon_config_sound.svg")); + soundButton->setIcon(QIcon("theme:icon_config_sound.svg")); connect(contentsWidget, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), this, SLOT(changePage(QListWidgetItem *, QListWidgetItem *))); } diff --git a/cockatrice/src/dlg_settings.h b/cockatrice/src/dlg_settings.h index c949ed6d..c4222066 100644 --- a/cockatrice/src/dlg_settings.h +++ b/cockatrice/src/dlg_settings.h @@ -71,40 +71,17 @@ private: class AppearanceSettingsPage : public AbstractSettingsPage { Q_OBJECT private slots: - void handBgClearButtonClicked(); - void handBgButtonClicked(); - void stackBgClearButtonClicked(); - void stackBgButtonClicked(); - void tableBgClearButtonClicked(); - void tableBgButtonClicked(); - void playerAreaBgClearButtonClicked(); - void playerAreaBgButtonClicked(); - void cardBackPicturePathClearButtonClicked(); - void cardBackPicturePathButtonClicked(); -signals: - void handBgChanged(const QString &path); - void stackBgChanged(const QString &path); - void tableBgChanged(const QString &path); - void playerAreaBgChanged(const QString &path); - void cardBackPicturePathChanged(const QString &path); + void themeBoxChanged(int index); private: - QLabel handBgLabel; - QLabel stackBgLabel; - QLabel tableBgLabel; - QLabel playerAreaBgLabel; - QLabel cardBackPicturePathLabel; + QLabel themeLabel; + QComboBox themeBox; QLabel minPlayersForMultiColumnLayoutLabel; - QLineEdit *handBgEdit; - QLineEdit *stackBgEdit; - QLineEdit *tableBgEdit; - QLineEdit *playerAreaBgEdit; - QLineEdit *cardBackPicturePathEdit; QCheckBox displayCardNamesCheckBox; QCheckBox cardScalingCheckBox; QCheckBox horizontalHandCheckBox; QCheckBox leftJustifiedHandCheckBox; QCheckBox invertVerticalCoordinateCheckBox; - QGroupBox *zoneBgGroupBox; + QGroupBox *themeGroupBox; QGroupBox *cardsGroupBox; QGroupBox *handGroupBox; QGroupBox *tableGroupBox; diff --git a/cockatrice/src/gameselector.cpp b/cockatrice/src/gameselector.cpp index 43471165..a3454856 100644 --- a/cockatrice/src/gameselector.cpp +++ b/cockatrice/src/gameselector.cpp @@ -60,10 +60,10 @@ GameSelector::GameSelector(AbstractClient *_client, const TabSupervisor *_tabSup gameListView->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents); #endif filterButton = new QPushButton; - filterButton->setIcon(QIcon(":/resources/icon_search_black.svg")); + filterButton->setIcon(QIcon("theme:icon_search_black.svg")); connect(filterButton, SIGNAL(clicked()), this, SLOT(actSetFilter())); clearFilterButton = new QPushButton; - clearFilterButton->setIcon(QIcon(":/resources/icon_clearsearch.svg")); + clearFilterButton->setIcon(QIcon("theme:icon_clearsearch.svg")); clearFilterButton->setEnabled(true); connect(clearFilterButton, SIGNAL(clicked()), this, SLOT(actClearFilter())); diff --git a/cockatrice/src/handcounter.cpp b/cockatrice/src/handcounter.cpp index 4aa33d69..3b7ba1d9 100644 --- a/cockatrice/src/handcounter.cpp +++ b/cockatrice/src/handcounter.cpp @@ -36,7 +36,7 @@ void HandCounter::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*op #else if (!QPixmapCache::find("handCounter" + QString::number(translatedSize.width()), cachedPixmap)) { #endif - QSvgRenderer svg(QString(":/resources/hand.svg")); + QSvgRenderer svg(QString("theme:hand.svg")); cachedPixmap = QPixmap(translatedSize); cachedPixmap.fill(Qt::transparent); QPainter painter(&cachedPixmap); diff --git a/cockatrice/src/handzone.cpp b/cockatrice/src/handzone.cpp index 80e1194c..0db67f13 100644 --- a/cockatrice/src/handzone.cpp +++ b/cockatrice/src/handzone.cpp @@ -1,6 +1,7 @@ #include #include "handzone.h" #include "settingscache.h" +#include "thememanager.h" #include "player.h" #include "carddragitem.h" #include "carditem.h" @@ -10,16 +11,13 @@ HandZone::HandZone(Player *_p, bool _contentsKnown, int _zoneHeight, QGraphicsItem *parent) : SelectZone(_p, "hand", false, false, _contentsKnown, parent), zoneHeight(_zoneHeight) { - connect(settingsCache, SIGNAL(handBgPathChanged()), this, SLOT(updateBgPixmap())); - updateBgPixmap(); + connect(themeManager, SIGNAL(themeChanged()), this, SLOT(updateBg())); + updateBg(); setCacheMode(DeviceCoordinateCache); } -void HandZone::updateBgPixmap() +void HandZone::updateBg() { - QString bgPath = settingsCache->getHandBgPath(); - if (!bgPath.isEmpty()) - bgPixmap.load(bgPath); update(); } @@ -77,10 +75,7 @@ QRectF HandZone::boundingRect() const void HandZone::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*option*/, QWidget * /*widget*/) { - if (bgPixmap.isNull()) - painter->fillRect(boundingRect(), QColor(30, 30, 30)); - else - painter->fillRect(boundingRect(), QBrush(bgPixmap)); + painter->fillRect(boundingRect(), themeManager->getHandBgBrush()); } void HandZone::reorganizeCards() diff --git a/cockatrice/src/handzone.h b/cockatrice/src/handzone.h index 66245c50..47fb5075 100644 --- a/cockatrice/src/handzone.h +++ b/cockatrice/src/handzone.h @@ -7,9 +7,8 @@ class HandZone : public SelectZone { Q_OBJECT private: qreal width, zoneHeight; - QPixmap bgPixmap; private slots: - void updateBgPixmap(); + void updateBg(); public slots: void updateOrientation(); public: diff --git a/cockatrice/src/main.cpp b/cockatrice/src/main.cpp index dc0473ab..f7d941c9 100644 --- a/cockatrice/src/main.cpp +++ b/cockatrice/src/main.cpp @@ -38,6 +38,7 @@ #include "dlg_settings.h" #include "carddatabase.h" #include "settingscache.h" +#include "thememanager.h" #include "pixmapgenerator.h" #include "rng_sfmt.h" #include "soundengine.h" @@ -50,7 +51,7 @@ SettingsCache *settingsCache; RNG_Abstract *rng; SoundEngine *soundEngine; QSystemTrayIcon *trayIcon; - +ThemeManager *themeManager; const QString translationPrefix = "cockatrice"; #ifdef TRANSLATION_PATH @@ -132,6 +133,7 @@ int main(int argc, char *argv[]) rng = new RNG_SFMT; settingsCache = new SettingsCache; + themeManager = new ThemeManager; db = new CardDatabase; qtTranslator = new QTranslator; @@ -195,13 +197,14 @@ int main(int argc, char *argv[]) if (settingsValid()) { qDebug("main(): starting main program"); + soundEngine = new SoundEngine; qDebug("main(): SoundEngine constructor finished"); MainWindow ui; qDebug("main(): MainWindow constructor finished"); - QIcon icon(":/resources/appicon.svg"); + QIcon icon("theme:appicon.svg"); ui.setWindowIcon(icon); ui.show(); diff --git a/cockatrice/src/pixmapgenerator.cpp b/cockatrice/src/pixmapgenerator.cpp index 0ff25f57..8bb64ed9 100644 --- a/cockatrice/src/pixmapgenerator.cpp +++ b/cockatrice/src/pixmapgenerator.cpp @@ -16,7 +16,7 @@ QPixmap PhasePixmapGenerator::generatePixmap(int height, QString name) if (pmCache.contains(key)) return pmCache.value(key); - QSvgRenderer svg(QString(":/resources/phases/icon_phase_" + name + ".svg")); + QSvgRenderer svg(QString("theme:phases/icon_phase_" + name + ".svg")); QPixmap pixmap(height, height); pixmap.fill(Qt::transparent); @@ -36,13 +36,13 @@ QPixmap CounterPixmapGenerator::generatePixmap(int height, QString name, bool hi if (pmCache.contains(key)) return pmCache.value(key); - QSvgRenderer svg(QString(":/resources/counters/" + name + ".svg")); + QSvgRenderer svg(QString("theme:counters/" + name + ".svg")); if (!svg.isValid()) { name = "general"; if (highlight) name.append("_highlight"); - svg.load(QString(":/resources/counters/" + name + ".svg")); + svg.load(QString("theme:counters/" + name + ".svg")); } int width = (int) round(height * (double) svg.defaultSize().width() / (double) svg.defaultSize().height()); @@ -98,7 +98,7 @@ QPixmap GenderPixmapGenerator::generatePixmap(int height, int _gender) default: genderStr = "unknown"; }; - QSvgRenderer svg(QString(":/resources/genders/" + genderStr + ".svg")); + QSvgRenderer svg(QString("theme:genders/" + genderStr + ".svg")); int width = (int) round(height * (double) svg.defaultSize().width() / (double) svg.defaultSize().height()); QPixmap pixmap(width, height); pixmap.fill(Qt::transparent); @@ -119,7 +119,7 @@ QPixmap CountryPixmapGenerator::generatePixmap(int height, const QString &countr if (pmCache.contains(key)) return pmCache.value(key); - QSvgRenderer svg(QString(":/resources/countries/" + countryCode + ".svg")); + QSvgRenderer svg(QString("theme:countries/" + countryCode + ".svg")); int width = (int) round(height * (double) svg.defaultSize().width() / (double) svg.defaultSize().height()); QPixmap pixmap(width, height); pixmap.fill(Qt::transparent); @@ -154,7 +154,7 @@ QPixmap UserLevelPixmapGenerator::generatePixmap(int height, UserLevelFlags user if (isBuddy) levelString.append("_buddy"); - QSvgRenderer svg(QString(":/resources/userlevels/" + levelString + ".svg")); + QSvgRenderer svg(QString("theme:userlevels/" + levelString + ".svg")); int width = (int) round(height * (double) svg.defaultSize().width() / (double) svg.defaultSize().height()); QPixmap pixmap(width, height); pixmap.fill(Qt::transparent); @@ -175,7 +175,7 @@ QPixmap LockPixmapGenerator::generatePixmap(int height) if (pmCache.contains(key)) return pmCache.value(key); - QSvgRenderer svg(QString(":/resources/lock.svg")); + QSvgRenderer svg(QString("theme:lock.svg")); int width = (int) round(height * (double) svg.defaultSize().width() / (double) svg.defaultSize().height()); QPixmap pixmap(width, height); pixmap.fill(Qt::transparent); diff --git a/cockatrice/src/player.cpp b/cockatrice/src/player.cpp index 30c0e6a5..667fbab9 100644 --- a/cockatrice/src/player.cpp +++ b/cockatrice/src/player.cpp @@ -15,6 +15,7 @@ #include "tab_game.h" #include "gamescene.h" #include "settingscache.h" +#include "thememanager.h" #include "dlg_create_token.h" #include "carddatabase.h" #include "color.h" @@ -69,25 +70,18 @@ PlayerArea::PlayerArea(QGraphicsItem *parentItem) : QObject(), QGraphicsItem(parentItem) { setCacheMode(DeviceCoordinateCache); - connect(settingsCache, SIGNAL(playerBgPathChanged()), this, SLOT(updateBgPixmap())); - updateBgPixmap(); + connect(themeManager, SIGNAL(themeChanged()), this, SLOT(updateBg())); + updateBg(); } -void PlayerArea::updateBgPixmap() +void PlayerArea::updateBg() { - QString bgPath = settingsCache->getPlayerBgPath(); - if (bgPath.isEmpty()) - bgPixmapBrush = QBrush(QColor(200, 200, 200)); - else { - qDebug() << "loading" << bgPath; - bgPixmapBrush = QBrush(QPixmap(bgPath)); - } update(); } void PlayerArea::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*option*/, QWidget * /*widget*/) { - painter->fillRect(bRect, bgPixmapBrush); + painter->fillRect(bRect, themeManager->getPlayerBgBrush()); } void PlayerArea::setSize(qreal width, qreal height) diff --git a/cockatrice/src/player.h b/cockatrice/src/player.h index 1fed2b10..0925d039 100644 --- a/cockatrice/src/player.h +++ b/cockatrice/src/player.h @@ -60,10 +60,9 @@ class PlayerArea : public QObject, public QGraphicsItem { Q_OBJECT Q_INTERFACES(QGraphicsItem) private: - QBrush bgPixmapBrush; QRectF bRect; private slots: - void updateBgPixmap(); + void updateBg(); public: enum { Type = typeOther }; int type() const { return Type; } diff --git a/cockatrice/src/playerlistwidget.cpp b/cockatrice/src/playerlistwidget.cpp index e18bab98..354ed669 100644 --- a/cockatrice/src/playerlistwidget.cpp +++ b/cockatrice/src/playerlistwidget.cpp @@ -51,12 +51,12 @@ bool PlayerListTWI::operator<(const QTreeWidgetItem &other) const PlayerListWidget::PlayerListWidget(TabSupervisor *_tabSupervisor, AbstractClient *_client, TabGame *_game, QWidget *parent) : QTreeWidget(parent), tabSupervisor(_tabSupervisor), client(_client), game(_game), gameStarted(false) { - readyIcon = QIcon(":/resources/icon_ready_start.svg"); - notReadyIcon = QIcon(":/resources/icon_not_ready_start.svg"); - concededIcon = QIcon(":/resources/icon_conceded.svg"); - playerIcon = QIcon(":/resources/icon_player.svg"); - spectatorIcon = QIcon(":/resources/icon_spectator.svg"); - lockIcon = QIcon(":/resources/lock.svg"); + readyIcon = QIcon("theme:icon_ready_start.svg"); + notReadyIcon = QIcon("theme:icon_not_ready_start.svg"); + concededIcon = QIcon("theme:icon_conceded.svg"); + playerIcon = QIcon("theme:icon_player.svg"); + spectatorIcon = QIcon("theme:icon_spectator.svg"); + lockIcon = QIcon("theme:lock.svg"); if (tabSupervisor) { itemDelegate = new PlayerListItemDelegate(this); diff --git a/cockatrice/src/remotereplaylist_treewidget.cpp b/cockatrice/src/remotereplaylist_treewidget.cpp index 5357596f..47da5f91 100644 --- a/cockatrice/src/remotereplaylist_treewidget.cpp +++ b/cockatrice/src/remotereplaylist_treewidget.cpp @@ -35,7 +35,7 @@ RemoteReplayList_TreeModel::RemoteReplayList_TreeModel(AbstractClient *_client, QFileIconProvider fip; dirIcon = fip.icon(QFileIconProvider::Folder); fileIcon = fip.icon(QFileIconProvider::File); - lockIcon = QIcon(":/resources/lock.svg"); + lockIcon = QIcon("theme:lock.svg"); refreshTree(); } diff --git a/cockatrice/src/settingscache.cpp b/cockatrice/src/settingscache.cpp index 16ef669b..11d4590c 100644 --- a/cockatrice/src/settingscache.cpp +++ b/cockatrice/src/settingscache.cpp @@ -13,11 +13,7 @@ SettingsCache::SettingsCache() cardDatabasePath = settings->value("paths/carddatabase").toString(); tokenDatabasePath = settings->value("paths/tokendatabase").toString(); - handBgPath = settings->value("zonebg/hand").toString(); - stackBgPath = settings->value("zonebg/stack").toString(); - tableBgPath = settings->value("zonebg/table").toString(); - playerBgPath = settings->value("zonebg/playerarea").toString(); - cardBackPicturePath = settings->value("paths/cardbackpicture").toString(); + themeName = settings->value("theme/name").toString(); // we only want to reset the cache once, then its up to the user bool updateCache = settings->value("revert/pixmapCacheSize", false).toBool(); @@ -155,39 +151,11 @@ void SettingsCache::setTokenDatabasePath(const QString &_tokenDatabasePath) emit tokenDatabasePathChanged(); } -void SettingsCache::setHandBgPath(const QString &_handBgPath) +void SettingsCache::setThemeName(const QString &_themeName) { - handBgPath = _handBgPath; - settings->setValue("zonebg/hand", handBgPath); - emit handBgPathChanged(); -} - -void SettingsCache::setStackBgPath(const QString &_stackBgPath) -{ - stackBgPath = _stackBgPath; - settings->setValue("zonebg/stack", stackBgPath); - emit stackBgPathChanged(); -} - -void SettingsCache::setTableBgPath(const QString &_tableBgPath) -{ - tableBgPath = _tableBgPath; - settings->setValue("zonebg/table", tableBgPath); - emit tableBgPathChanged(); -} - -void SettingsCache::setPlayerBgPath(const QString &_playerBgPath) -{ - playerBgPath = _playerBgPath; - settings->setValue("zonebg/playerarea", playerBgPath); - emit playerBgPathChanged(); -} - -void SettingsCache::setCardBackPicturePath(const QString &_cardBackPicturePath) -{ - cardBackPicturePath = _cardBackPicturePath; - settings->setValue("paths/cardbackpicture", cardBackPicturePath); - emit cardBackPicturePathChanged(); + themeName = _themeName; + settings->setValue("theme/name", themeName); + emit themeChanged(); } void SettingsCache::setPicDownload(int _picDownload) diff --git a/cockatrice/src/settingscache.h b/cockatrice/src/settingscache.h index 6e7dc76e..cfc81113 100644 --- a/cockatrice/src/settingscache.h +++ b/cockatrice/src/settingscache.h @@ -21,11 +21,7 @@ signals: void picsPathChanged(); void cardDatabasePathChanged(); void tokenDatabasePathChanged(); - void handBgPathChanged(); - void stackBgPathChanged(); - void tableBgPathChanged(); - void playerBgPathChanged(); - void cardBackPicturePathChanged(); + void themeChanged(); void picDownloadChanged(); void picDownloadHqChanged(); void displayCardNamesChanged(); @@ -45,8 +41,7 @@ private: QByteArray mainWindowGeometry; QString lang; - QString deckPath, replaysPath, picsPath, cardDatabasePath, tokenDatabasePath; - QString handBgPath, stackBgPath, tableBgPath, playerBgPath, cardBackPicturePath; + QString deckPath, replaysPath, picsPath, cardDatabasePath, tokenDatabasePath, themeName; bool picDownload; bool picDownloadHq; bool notificationsEnabled; @@ -91,11 +86,7 @@ public: QString getPicsPath() const { return picsPath; } QString getCardDatabasePath() const { return cardDatabasePath; } QString getTokenDatabasePath() const { return tokenDatabasePath; } - QString getHandBgPath() const { return handBgPath; } - QString getStackBgPath() const { return stackBgPath; } - QString getTableBgPath() const { return tableBgPath; } - QString getPlayerBgPath() const { return playerBgPath; } - QString getCardBackPicturePath() const { return cardBackPicturePath; } + QString getThemeName() const { return themeName; } QString getChatMentionColor() const { return chatMentionColor; } bool getPicDownload() const { return picDownload; } bool getPicDownloadHq() const { return picDownloadHq; } @@ -146,11 +137,7 @@ public slots: void setPicsPath(const QString &_picsPath); void setCardDatabasePath(const QString &_cardDatabasePath); void setTokenDatabasePath(const QString &_tokenDatabasePath); - void setHandBgPath(const QString &_handBgPath); - void setStackBgPath(const QString &_stackBgPath); - void setTableBgPath(const QString &_tableBgPath); - void setPlayerBgPath(const QString &_playerBgPath); - void setCardBackPicturePath(const QString &_cardBackPicturePath); + void setThemeName(const QString &_themeName); void setChatMentionColor(const QString &_chatMentionColor); void setPicDownload(int _picDownload); void setPicDownloadHq(int _picDownloadHq); diff --git a/cockatrice/src/stackzone.cpp b/cockatrice/src/stackzone.cpp index a60c4037..4b4b6b52 100644 --- a/cockatrice/src/stackzone.cpp +++ b/cockatrice/src/stackzone.cpp @@ -3,6 +3,7 @@ #include "arrowitem.h" #include "stackzone.h" #include "settingscache.h" +#include "thememanager.h" #include "player.h" #include "carddragitem.h" #include "carditem.h" @@ -12,16 +13,13 @@ StackZone::StackZone(Player *_p, int _zoneHeight, QGraphicsItem *parent) : SelectZone(_p, "stack", false, false, true, parent), zoneHeight(_zoneHeight) { - connect(settingsCache, SIGNAL(stackBgPathChanged()), this, SLOT(updateBgPixmap())); - updateBgPixmap(); + connect(themeManager, SIGNAL(themeChanged()), this, SLOT(updateBg())); + updateBg(); setCacheMode(DeviceCoordinateCache); } -void StackZone::updateBgPixmap() +void StackZone::updateBg() { - QString bgPath = settingsCache->getStackBgPath(); - if (!bgPath.isEmpty()) - bgPixmap.load(bgPath); update(); } @@ -48,10 +46,7 @@ QRectF StackZone::boundingRect() const void StackZone::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*option*/, QWidget * /*widget*/) { - if (bgPixmap.isNull()) - painter->fillRect(boundingRect(), QColor(113, 43, 43)); - else - painter->fillRect(boundingRect(), QBrush(bgPixmap)); + painter->fillRect(boundingRect(), themeManager->getStackBgBrush()); } void StackZone::handleDropEvent(const QList &dragItems, CardZone *startZone, const QPoint &/*dropPoint*/) diff --git a/cockatrice/src/stackzone.h b/cockatrice/src/stackzone.h index 948d3bcb..05fb2d24 100644 --- a/cockatrice/src/stackzone.h +++ b/cockatrice/src/stackzone.h @@ -7,9 +7,8 @@ class StackZone : public SelectZone { Q_OBJECT private: qreal zoneHeight; - QPixmap bgPixmap; private slots: - void updateBgPixmap(); + void updateBg(); public: StackZone(Player *_p, int _zoneHeight, QGraphicsItem *parent = 0); void handleDropEvent(const QList &dragItems, CardZone *startZone, const QPoint &dropPoint); diff --git a/cockatrice/src/tab_deck_editor.cpp b/cockatrice/src/tab_deck_editor.cpp index df84220e..e6ddc382 100644 --- a/cockatrice/src/tab_deck_editor.cpp +++ b/cockatrice/src/tab_deck_editor.cpp @@ -51,16 +51,16 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent) : Tab(_tabSupervisor, parent), modified(false) { aClearFilterAll = new QAction(QString(), this); - aClearFilterAll->setIcon(QIcon(":/resources/icon_clearsearch.svg")); + aClearFilterAll->setIcon(QIcon("theme:icon_clearsearch.svg")); connect(aClearFilterAll, SIGNAL(triggered()), this, SLOT(actClearFilterAll())); aClearFilterOne = new QAction(QString(), this); - aClearFilterOne->setIcon(QIcon(":/resources/decrement.svg")); + aClearFilterOne->setIcon(QIcon("theme:decrement.svg")); connect(aClearFilterOne, SIGNAL(triggered()), this, SLOT(actClearFilterOne())); searchEdit = new SearchLineEdit; #if QT_VERSION >= 0x050300 - searchEdit->addAction(QIcon(":/resources/icon_search_black.svg"), QLineEdit::LeadingPosition); + searchEdit->addAction(QIcon("theme:icon_search_black.svg"), QLineEdit::LeadingPosition); #endif searchEdit->setObjectName("searchEdit"); @@ -193,7 +193,7 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent) /* Update price aUpdatePrices = new QAction(QString(), this); - aUpdatePrices->setIcon(QIcon(":/resources/icon_update.png")); + aUpdatePrices->setIcon(QIcon("theme:icon_update.png")); connect(aUpdatePrices, SIGNAL(triggered()), this, SLOT(actUpdatePrices())); if (!settingsCache->getPriceTagFeature()) aUpdatePrices->setVisible(false); @@ -282,19 +282,19 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent) addTabMenu(dbMenu); aAddCard = new QAction(QString(), this); - aAddCard->setIcon(QIcon(":/resources/arrow_right_green.svg")); + aAddCard->setIcon(QIcon("theme:arrow_right_green.svg")); connect(aAddCard, SIGNAL(triggered()), this, SLOT(actAddCard())); aAddCardToSideboard = new QAction(QString(), this); - aAddCardToSideboard->setIcon(QIcon(":/resources/add_to_sideboard.svg")); + aAddCardToSideboard->setIcon(QIcon("theme:add_to_sideboard.svg")); connect(aAddCardToSideboard, SIGNAL(triggered()), this, SLOT(actAddCardToSideboard())); aRemoveCard = new QAction(QString(), this); - aRemoveCard->setIcon(QIcon(":/resources/remove_row.svg")); + aRemoveCard->setIcon(QIcon("theme:remove_row.svg")); connect(aRemoveCard, SIGNAL(triggered()), this, SLOT(actRemoveCard())); aIncrement = new QAction(QString(), this); - aIncrement->setIcon(QIcon(":/resources/increment.svg")); + aIncrement->setIcon(QIcon("theme:increment.svg")); connect(aIncrement, SIGNAL(triggered()), this, SLOT(actIncrement())); aDecrement = new QAction(QString(), this); - aDecrement->setIcon(QIcon(":/resources/decrement.svg")); + aDecrement->setIcon(QIcon("theme:decrement.svg")); connect(aDecrement, SIGNAL(triggered()), this, SLOT(actDecrement())); deckEditToolBar->addAction(aAddCard); diff --git a/cockatrice/src/tab_deck_storage.cpp b/cockatrice/src/tab_deck_storage.cpp index 9898c9ee..c4e23eaf 100644 --- a/cockatrice/src/tab_deck_storage.cpp +++ b/cockatrice/src/tab_deck_storage.cpp @@ -80,25 +80,25 @@ TabDeckStorage::TabDeckStorage(TabSupervisor *_tabSupervisor, AbstractClient *_c hbox->addWidget(rightGroupBox); aOpenLocalDeck = new QAction(this); - aOpenLocalDeck->setIcon(QIcon(":/resources/pencil.svg")); + aOpenLocalDeck->setIcon(QIcon("theme:pencil.svg")); connect(aOpenLocalDeck, SIGNAL(triggered()), this, SLOT(actOpenLocalDeck())); aUpload = new QAction(this); - aUpload->setIcon(QIcon(":/resources/arrow_right_green.svg")); + aUpload->setIcon(QIcon("theme:arrow_right_green.svg")); connect(aUpload, SIGNAL(triggered()), this, SLOT(actUpload())); aDeleteLocalDeck = new QAction(this); - aDeleteLocalDeck->setIcon(QIcon(":/resources/remove_row.svg")); + aDeleteLocalDeck->setIcon(QIcon("theme:remove_row.svg")); connect(aDeleteLocalDeck, SIGNAL(triggered()), this, SLOT(actDeleteLocalDeck())); aOpenRemoteDeck = new QAction(this); - aOpenRemoteDeck->setIcon(QIcon(":/resources/pencil.svg")); + aOpenRemoteDeck->setIcon(QIcon("theme:pencil.svg")); connect(aOpenRemoteDeck, SIGNAL(triggered()), this, SLOT(actOpenRemoteDeck())); aDownload = new QAction(this); - aDownload->setIcon(QIcon(":/resources/arrow_left_green.svg")); + aDownload->setIcon(QIcon("theme:arrow_left_green.svg")); connect(aDownload, SIGNAL(triggered()), this, SLOT(actDownload())); aNewFolder = new QAction(this); aNewFolder->setIcon(qApp->style()->standardIcon(QStyle::SP_FileDialogNewFolder)); connect(aNewFolder, SIGNAL(triggered()), this, SLOT(actNewFolder())); aDeleteRemoteDeck = new QAction(this); - aDeleteRemoteDeck->setIcon(QIcon(":/resources/remove_row.svg")); + aDeleteRemoteDeck->setIcon(QIcon("theme:remove_row.svg")); connect(aDeleteRemoteDeck, SIGNAL(triggered()), this, SLOT(actDeleteRemoteDeck())); leftToolBar->addAction(aOpenLocalDeck); diff --git a/cockatrice/src/tab_game.cpp b/cockatrice/src/tab_game.cpp index 0d91d7ea..4c52066e 100644 --- a/cockatrice/src/tab_game.cpp +++ b/cockatrice/src/tab_game.cpp @@ -305,17 +305,17 @@ TabGame::TabGame(TabSupervisor *_tabSupervisor, GameReplay *_replay) replayStartButton = new QToolButton; replayStartButton->setIconSize(QSize(32, 32)); - replayStartButton->setIcon(QIcon(":/resources/replay_start.svg")); + replayStartButton->setIcon(QIcon("theme:replay_start.svg")); connect(replayStartButton, SIGNAL(clicked()), this, SLOT(replayStartButtonClicked())); replayPauseButton = new QToolButton; replayPauseButton->setIconSize(QSize(32, 32)); replayPauseButton->setEnabled(false); - replayPauseButton->setIcon(QIcon(":/resources/replay_pause.svg")); + replayPauseButton->setIcon(QIcon("theme:replay_pause.svg")); connect(replayPauseButton, SIGNAL(clicked()), this, SLOT(replayPauseButtonClicked())); replayFastForwardButton = new QToolButton; replayFastForwardButton->setIconSize(QSize(32, 32)); replayFastForwardButton->setEnabled(false); - replayFastForwardButton->setIcon(QIcon(":/resources/replay_fastforward.svg")); + replayFastForwardButton->setIcon(QIcon("theme:replay_fastforward.svg")); replayFastForwardButton->setCheckable(true); connect(replayFastForwardButton, SIGNAL(toggled(bool)), this, SLOT(replayFastForwardButtonToggled(bool))); diff --git a/cockatrice/src/tab_replays.cpp b/cockatrice/src/tab_replays.cpp index 9f1b2a12..8e42bbd3 100644 --- a/cockatrice/src/tab_replays.cpp +++ b/cockatrice/src/tab_replays.cpp @@ -78,22 +78,22 @@ TabReplays::TabReplays(TabSupervisor *_tabSupervisor, AbstractClient *_client) hbox->addWidget(rightGroupBox); aOpenLocalReplay = new QAction(this); - aOpenLocalReplay->setIcon(QIcon(":/resources/icon_view.svg")); + aOpenLocalReplay->setIcon(QIcon("theme:icon_view.svg")); connect(aOpenLocalReplay, SIGNAL(triggered()), this, SLOT(actOpenLocalReplay())); aDeleteLocalReplay = new QAction(this); - aDeleteLocalReplay->setIcon(QIcon(":/resources/remove_row.svg")); + aDeleteLocalReplay->setIcon(QIcon("theme:remove_row.svg")); connect(aDeleteLocalReplay, SIGNAL(triggered()), this, SLOT(actDeleteLocalReplay())); aOpenRemoteReplay = new QAction(this); - aOpenRemoteReplay->setIcon(QIcon(":/resources/icon_view.svg")); + aOpenRemoteReplay->setIcon(QIcon("theme:icon_view.svg")); connect(aOpenRemoteReplay, SIGNAL(triggered()), this, SLOT(actOpenRemoteReplay())); aDownload = new QAction(this); - aDownload->setIcon(QIcon(":/resources/arrow_left_green.svg")); + aDownload->setIcon(QIcon("theme:arrow_left_green.svg")); connect(aDownload, SIGNAL(triggered()), this, SLOT(actDownload())); aKeep = new QAction(this); - aKeep->setIcon(QIcon(":/resources/lock.svg")); + aKeep->setIcon(QIcon("theme:lock.svg")); connect(aKeep, SIGNAL(triggered()), this, SLOT(actKeepRemoteReplay())); aDeleteRemoteReplay = new QAction(this); - aDeleteRemoteReplay->setIcon(QIcon(":/resources/remove_row.svg")); + aDeleteRemoteReplay->setIcon(QIcon("theme:remove_row.svg")); connect(aDeleteRemoteReplay, SIGNAL(triggered()), this, SLOT(actDeleteRemoteReplay())); leftToolBar->addAction(aOpenLocalReplay); diff --git a/cockatrice/src/tab_room.cpp b/cockatrice/src/tab_room.cpp index 545901ce..ea5d7613 100644 --- a/cockatrice/src/tab_room.cpp +++ b/cockatrice/src/tab_room.cpp @@ -68,7 +68,7 @@ TabRoom::TabRoom(TabSupervisor *_tabSupervisor, AbstractClient *_client, ServerI connect(aOpenChatSettings, SIGNAL(triggered()), this, SLOT(actOpenChatSettings())); QToolButton *chatSettingsButton = new QToolButton; - chatSettingsButton->setIcon(QIcon(":/resources/icon_settings.svg")); + chatSettingsButton->setIcon(QIcon("theme:icon_settings.svg")); chatSettingsButton->setMenu(chatSettingsMenu); chatSettingsButton->setPopupMode(QToolButton::InstantPopup); diff --git a/cockatrice/src/tab_supervisor.cpp b/cockatrice/src/tab_supervisor.cpp index 867f84b3..1f2f0524 100644 --- a/cockatrice/src/tab_supervisor.cpp +++ b/cockatrice/src/tab_supervisor.cpp @@ -79,7 +79,7 @@ void CloseButton::paintEvent(QPaintEvent * /*event*/) TabSupervisor::TabSupervisor(AbstractClient *_client, QWidget *parent) : QTabWidget(parent), userInfo(0), client(_client), tabServer(0), tabUserLists(0), tabDeckStorage(0), tabReplays(0), tabAdmin(0) { - tabChangedIcon = new QIcon(":/resources/icon_tab_changed.svg"); + tabChangedIcon = new QIcon("theme:icon_tab_changed.svg"); setElideMode(Qt::ElideRight); setMovable(true); setIconSize(QSize(15, 15)); diff --git a/cockatrice/src/tablezone.cpp b/cockatrice/src/tablezone.cpp index de53507f..0d486870 100644 --- a/cockatrice/src/tablezone.cpp +++ b/cockatrice/src/tablezone.cpp @@ -8,6 +8,7 @@ #include "tablezone.h" #include "player.h" #include "settingscache.h" +#include "thememanager.h" #include "arrowitem.h" #include "carddragitem.h" #include "carddatabase.h" @@ -16,20 +17,18 @@ #include "pb/command_move_card.pb.h" #include "pb/command_set_card_attr.pb.h" - const QColor TableZone::BACKGROUND_COLOR = QColor(100, 100, 100); const QColor TableZone::FADE_MASK = QColor(0, 0, 0, 80); const QColor TableZone::GRADIENT_COLOR = QColor(255, 255, 255, 150); const QColor TableZone::GRADIENT_COLORLESS = QColor(255, 255, 255, 0); - TableZone::TableZone(Player *_p, QGraphicsItem *parent) : SelectZone(_p, "table", true, false, true, parent), active(false) { - connect(settingsCache, SIGNAL(tableBgPathChanged()), this, SLOT(updateBgPixmap())); + connect(themeManager, SIGNAL(themeChanged()), this, SLOT(updateBg())); connect(settingsCache, SIGNAL(invertVerticalCoordinateChanged()), this, SLOT(reorganizeCards())); - updateBgPixmap(); + updateBg(); height = 2 * BOX_LINE_WIDTH + 3 * (CARD_HEIGHT + 20) + 2 * PADDING_Y; width = MIN_WIDTH + 2 * MARGIN_X + 2 * BOX_LINE_WIDTH; @@ -44,11 +43,8 @@ TableZone::TableZone(Player *_p, QGraphicsItem *parent) } -void TableZone::updateBgPixmap() +void TableZone::updateBg() { - QString bgPath = settingsCache->getTableBgPath(); - if (!bgPath.isEmpty()) - backgroundPixelMap.load(bgPath); update(); } @@ -67,11 +63,7 @@ bool TableZone::isInverted() const void TableZone::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*option*/, QWidget * /*widget*/) { - // if no custom background is provided then use the default color - if (backgroundPixelMap.isNull()) - painter->fillRect(boundingRect(), BACKGROUND_COLOR); - else - painter->fillRect(boundingRect(), QBrush(backgroundPixelMap)); + painter->fillRect(boundingRect(), themeManager->getTableBgBrush()); if (active) { paintZoneOutline(painter); diff --git a/cockatrice/src/tablezone.h b/cockatrice/src/tablezone.h index 9b362efa..6eeae7f1 100644 --- a/cockatrice/src/tablezone.h +++ b/cockatrice/src/tablezone.h @@ -27,7 +27,7 @@ private: static const int MIN_WIDTH = 15 * CARD_WIDTH / 2; /* - Default background color, inactive mask and boarder gradient + Default inactive mask and border gradient */ static const QColor BACKGROUND_COLOR; static const QColor FADE_MASK; @@ -42,11 +42,6 @@ private: int height; int currentMinimumWidth; - /* - Holds any custom background image for the TableZone - */ - QPixmap backgroundPixelMap; - /* If this TableZone is currently active */ @@ -58,7 +53,7 @@ private slots: /** Loads in any found custom background and updates */ - void updateBgPixmap(); + void updateBg(); public slots: /** diff --git a/cockatrice/src/thememanager.cpp b/cockatrice/src/thememanager.cpp new file mode 100644 index 00000000..0e2bb996 --- /dev/null +++ b/cockatrice/src/thememanager.cpp @@ -0,0 +1,144 @@ +#include "thememanager.h" +#include "settingscache.h" +#include +#include +#include +#include +#if QT_VERSION < 0x050000 + #include +#else + #include +#endif + +#define DEFAULT_THEME_NAME "Default" +#define STYLE_CSS_NAME "style.css" +#define HANDZONE_BG_NAME "handzone" +#define PLAYERZONE_BG_NAME "playerzone" +#define STACKZONE_BG_NAME "stackzone" +#define TABLEZONE_BG_NAME "tablezone" +#define CARD_BACK_NAME "cardback" + +ThemeManager::ThemeManager(QObject *parent) + :QObject(parent) +{ + ensureThemeDirectoryExists(); + connect(settingsCache, SIGNAL(themeChanged()), this, SLOT(themeChangedSlot())); + themeChangedSlot(); +} + +void ThemeManager::ensureThemeDirectoryExists() +{ + if(settingsCache->getThemeName().isEmpty() || + !getAvailableThemes().contains(settingsCache->getThemeName())) + { + qDebug() << "Theme name not set, setting default value"; + settingsCache->setThemeName(DEFAULT_THEME_NAME); + } +} + +QStringMap & ThemeManager::getAvailableThemes() +{ + QDir dir; + availableThemes.clear(); + + // load themes from user profile dir + dir = +#if QT_VERSION < 0x050000 + QDesktopServices::storageLocation(QDesktopServices::DataLocation) + +#else + QStandardPaths::standardLocations(QStandardPaths::DataLocation).first() + +#endif + "/themes"; + + foreach(QString themeName, dir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot, QDir::Name)) + { + if(!availableThemes.contains(themeName)) + availableThemes.insert(themeName, dir.absoluteFilePath(themeName)); + } + + // load themes from cockatrice system dir +#ifdef Q_OS_MAC + dir = qApp->applicationDirPath() + "/../Resources/themes"; +#elif defined(Q_OS_WIN) + dir = qApp->applicationDirPath() + "/themes"; +#else // linux + dir = qApp->applicationDirPath() + "/../share/cockatrice/themes"; +#endif + foreach(QString themeName, dir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot, QDir::Name)) + { + if(!availableThemes.contains(themeName)) + availableThemes.insert(themeName, dir.absoluteFilePath(themeName)); + } + + return availableThemes; +} + +QBrush ThemeManager::loadBrush(QDir dir, QString fileName, QColor fallbackColor) +{ + QBrush brush; + QPixmap tmp; + QStringList exts; + exts << ".png" << ".jpg" << ".jpeg" << ".gif" << ".bmp"; + + brush.setColor(fallbackColor); + brush.setStyle(Qt::SolidPattern); + + foreach (const QString &ext, exts) { + if (dir.exists(fileName + ext)) { + tmp.load(dir.absoluteFilePath(fileName + ext)); + if(!tmp.isNull()) + brush.setTexture(tmp); + break; + } + } + + return brush; +} + +QPixmap ThemeManager::loadPixmap(QDir dir, QString fileName) +{ + QPixmap pix; + QStringList exts; + exts << ".png" << ".jpg" << ".jpeg" << ".gif" << ".bmp"; + + foreach (const QString &ext, exts) { + if (dir.exists(fileName + ext)) { + pix.load(dir.absoluteFilePath(fileName + ext)); + break; + } + } + + return pix; +} + +void ThemeManager::themeChangedSlot() +{ + QString themeName = settingsCache->getThemeName(); + qDebug() << "Theme changed:" << themeName; + + QDir dir = getAvailableThemes().value(themeName); + + // css + if(dir.exists(STYLE_CSS_NAME)) + + qApp->setStyleSheet("file:///" + dir.absoluteFilePath(STYLE_CSS_NAME)); + else + qApp->setStyleSheet(""); + + // card background + cardBackPixmap = loadPixmap(dir, CARD_BACK_NAME); + + // zones bg + dir.cd("zones"); + handBgBrush = loadBrush(dir, HANDZONE_BG_NAME, QColor(80, 100, 50)); + tableBgBrush = loadBrush(dir, TABLEZONE_BG_NAME, QColor(70, 50, 100)); + playerBgBrush = loadBrush(dir, PLAYERZONE_BG_NAME, QColor(200, 200, 200)); + stackBgBrush = loadBrush(dir, STACKZONE_BG_NAME, QColor(113, 43, 43)); + + // resources + QStringList resources; + resources << dir.absolutePath() << ":/resources"; + QDir::setSearchPaths("theme", resources); + + emit themeChanged(); +} \ No newline at end of file diff --git a/cockatrice/src/thememanager.h b/cockatrice/src/thememanager.h new file mode 100644 index 00000000..19cb19c5 --- /dev/null +++ b/cockatrice/src/thememanager.h @@ -0,0 +1,42 @@ +#ifndef THEMEMANAGER_H +#define THEMEMANAGER_H + +#include +#include +#include +#include +#include +#include + +typedef QMap QStringMap; + +class QApplication; + +class ThemeManager : public QObject { + Q_OBJECT +public: + ThemeManager(QObject *parent = 0); +private: + QBrush handBgBrush, stackBgBrush, tableBgBrush, playerBgBrush; + QPixmap cardBackPixmap; + QStringMap availableThemes; +protected: + void ensureThemeDirectoryExists(); + QBrush loadBrush(QDir dir, QString fileName, QColor fallbackColor); + QPixmap loadPixmap(QDir dir, QString fileName); +public: + QBrush &getHandBgBrush() { return handBgBrush; } + QBrush &getStackBgBrush() { return stackBgBrush; } + QBrush &getTableBgBrush() { return tableBgBrush; } + QBrush &getPlayerBgBrush() { return playerBgBrush; } + QPixmap &getCardBackPixmap() { return cardBackPixmap; } + QStringMap &getAvailableThemes(); +protected slots: + void themeChangedSlot(); +signals: + void themeChanged(); +}; + +extern ThemeManager * themeManager; + +#endif diff --git a/cockatrice/src/window_main.cpp b/cockatrice/src/window_main.cpp index 3a0d4044..d0720d9a 100644 --- a/cockatrice/src/window_main.cpp +++ b/cockatrice/src/window_main.cpp @@ -561,7 +561,7 @@ void MainWindow::createTrayIcon() { trayIcon = new QSystemTrayIcon(this); trayIcon->setContextMenu(trayIconMenu); - trayIcon->setIcon(QIcon(":/resources/appicon.svg")); + trayIcon->setIcon(QIcon("theme:appicon.svg")); trayIcon->show(); connect(trayIcon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this, diff --git a/cockatrice/src/window_sets.cpp b/cockatrice/src/window_sets.cpp index b2c9ce3c..e8cb852a 100644 --- a/cockatrice/src/window_sets.cpp +++ b/cockatrice/src/window_sets.cpp @@ -24,28 +24,28 @@ WndSets::WndSets(QWidget *parent) setsEditToolBar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); aTop = new QAction(QString(), this); - aTop->setIcon(QIcon(":/resources/arrow_top_green.svg")); + aTop->setIcon(QIcon("theme:arrow_top_green.svg")); aTop->setToolTip(tr("Move selected set to the top")); aTop->setEnabled(false); connect(aTop, SIGNAL(triggered()), this, SLOT(actTop())); setsEditToolBar->addAction(aTop); aUp = new QAction(QString(), this); - aUp->setIcon(QIcon(":/resources/arrow_up_green.svg")); + aUp->setIcon(QIcon("theme:arrow_up_green.svg")); aUp->setToolTip(tr("Move selected set up")); aUp->setEnabled(false); connect(aUp, SIGNAL(triggered()), this, SLOT(actUp())); setsEditToolBar->addAction(aUp); aDown = new QAction(QString(), this); - aDown->setIcon(QIcon(":/resources/arrow_down_green.svg")); + aDown->setIcon(QIcon("theme:arrow_down_green.svg")); aDown->setToolTip(tr("Move selected set down")); aDown->setEnabled(false); connect(aDown, SIGNAL(triggered()), this, SLOT(actDown())); setsEditToolBar->addAction(aDown); aBottom = new QAction(QString(), this); - aBottom->setIcon(QIcon(":/resources/arrow_bottom_green.svg")); + aBottom->setIcon(QIcon("theme:arrow_bottom_green.svg")); aBottom->setToolTip(tr("Move selected set to the bottom")); aBottom->setEnabled(false); connect(aBottom, SIGNAL(triggered()), this, SLOT(actBottom())); diff --git a/cockatrice/src/zoneviewwidget.cpp b/cockatrice/src/zoneviewwidget.cpp index ccb36af1..fd27bae7 100644 --- a/cockatrice/src/zoneviewwidget.cpp +++ b/cockatrice/src/zoneviewwidget.cpp @@ -250,5 +250,5 @@ void ZoneViewWidget::zoneDeleted() void ZoneViewWidget::initStyleOption(QStyleOption *option) const { QStyleOptionTitleBar *titleBar = qstyleoption_cast(option); if (titleBar) - titleBar->icon = QIcon(":/resources/appicon.svg"); + titleBar->icon = QIcon("theme:appicon.svg"); } diff --git a/oracle/CMakeLists.txt b/oracle/CMakeLists.txt index 5e554f38..413928ea 100644 --- a/oracle/CMakeLists.txt +++ b/oracle/CMakeLists.txt @@ -13,6 +13,7 @@ SET(oracle_SOURCES src/oracleimporter.cpp ../cockatrice/src/carddatabase.cpp ../cockatrice/src/settingscache.cpp + ../cockatrice/src/thememanager.cpp ../cockatrice/src/qt-json/json.cpp ) diff --git a/oracle/src/main.cpp b/oracle/src/main.cpp index 9b462dd8..c946aa4b 100644 --- a/oracle/src/main.cpp +++ b/oracle/src/main.cpp @@ -7,9 +7,11 @@ #include "main.h" #include "oraclewizard.h" #include "settingscache.h" +#include "thememanager.h" QTranslator *translator, *qtTranslator; SettingsCache *settingsCache; +ThemeManager *themeManager; const QString translationPrefix = "oracle"; #ifdef TRANSLATION_PATH @@ -51,6 +53,7 @@ int main(int argc, char *argv[]) } settingsCache = new SettingsCache; + themeManager = new ThemeManager; qtTranslator = new QTranslator; translator = new QTranslator; diff --git a/themes/CMakeLists.txt b/themes/CMakeLists.txt new file mode 100644 index 00000000..dc3b9b50 --- /dev/null +++ b/themes/CMakeLists.txt @@ -0,0 +1,22 @@ +# CMakeLists for themes directory +# +# add themes subfolders + +SET(defthemes + Default + Fabric + Leather + Plasma + VelvetMarble +) + +if(UNIX) + if(APPLE) + INSTALL(DIRECTORY ${defthemes} DESTINATION cockatrice.app/Contents/Resources/themes/) + else() + # Assume linux + INSTALL(DIRECTORY ${defthemes} DESTINATION share/cockatrice/themes/) + endif() +elseif(WIN32) + INSTALL(DIRECTORY ${defthemes} DESTINATION themes/) +endif() diff --git a/themes/Default/version.txt b/themes/Default/version.txt new file mode 100644 index 00000000..c2270834 --- /dev/null +++ b/themes/Default/version.txt @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/themes/Fabric/version.txt b/themes/Fabric/version.txt new file mode 100644 index 00000000..c2270834 --- /dev/null +++ b/themes/Fabric/version.txt @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/zonebg/fabric_green.png b/themes/Fabric/zones/handzone.png similarity index 100% rename from zonebg/fabric_green.png rename to themes/Fabric/zones/handzone.png diff --git a/zonebg/fabric_gray.png b/themes/Fabric/zones/playerzone.png similarity index 100% rename from zonebg/fabric_gray.png rename to themes/Fabric/zones/playerzone.png diff --git a/zonebg/fabric_red.png b/themes/Fabric/zones/stackzone.png similarity index 100% rename from zonebg/fabric_red.png rename to themes/Fabric/zones/stackzone.png diff --git a/zonebg/fabric_blue.png b/themes/Fabric/zones/tablezone.png similarity index 100% rename from zonebg/fabric_blue.png rename to themes/Fabric/zones/tablezone.png diff --git a/themes/Leather/version.txt b/themes/Leather/version.txt new file mode 100644 index 00000000..c2270834 --- /dev/null +++ b/themes/Leather/version.txt @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/zonebg/leather_green.png b/themes/Leather/zones/handzone.png similarity index 100% rename from zonebg/leather_green.png rename to themes/Leather/zones/handzone.png diff --git a/zonebg/leather_gray.png b/themes/Leather/zones/playerzone.png similarity index 100% rename from zonebg/leather_gray.png rename to themes/Leather/zones/playerzone.png diff --git a/zonebg/leather_red.png b/themes/Leather/zones/stackzone.png similarity index 100% rename from zonebg/leather_red.png rename to themes/Leather/zones/stackzone.png diff --git a/zonebg/leather_blue.png b/themes/Leather/zones/tablezone.png similarity index 100% rename from zonebg/leather_blue.png rename to themes/Leather/zones/tablezone.png diff --git a/themes/Plasma/version.txt b/themes/Plasma/version.txt new file mode 100644 index 00000000..c2270834 --- /dev/null +++ b/themes/Plasma/version.txt @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/zonebg/plasma_green.png b/themes/Plasma/zones/handzone.png similarity index 100% rename from zonebg/plasma_green.png rename to themes/Plasma/zones/handzone.png diff --git a/zonebg/plasma_gray.png b/themes/Plasma/zones/playerzone.png similarity index 100% rename from zonebg/plasma_gray.png rename to themes/Plasma/zones/playerzone.png diff --git a/zonebg/plasma_red.png b/themes/Plasma/zones/stackzone.png similarity index 100% rename from zonebg/plasma_red.png rename to themes/Plasma/zones/stackzone.png diff --git a/zonebg/plasma_blue.png b/themes/Plasma/zones/tablezone.png similarity index 100% rename from zonebg/plasma_blue.png rename to themes/Plasma/zones/tablezone.png diff --git a/themes/VelvetMarble/version.txt b/themes/VelvetMarble/version.txt new file mode 100644 index 00000000..c2270834 --- /dev/null +++ b/themes/VelvetMarble/version.txt @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/zonebg/VelvetMarble_HorizontalHand_Hand.jpg b/themes/VelvetMarble/zones/handzone.jpg similarity index 100% rename from zonebg/VelvetMarble_HorizontalHand_Hand.jpg rename to themes/VelvetMarble/zones/handzone.jpg diff --git a/zonebg/VelvetMarble_Table.jpg b/themes/VelvetMarble/zones/playerzone.jpg similarity index 100% rename from zonebg/VelvetMarble_Table.jpg rename to themes/VelvetMarble/zones/playerzone.jpg diff --git a/zonebg/VelvetMarble_Stack.jpg b/themes/VelvetMarble/zones/stackzone.jpg similarity index 100% rename from zonebg/VelvetMarble_Stack.jpg rename to themes/VelvetMarble/zones/stackzone.jpg diff --git a/zonebg/VelvetMarble_HorizontalHand_Player.jpg b/themes/VelvetMarble/zones/tablezone.jpg similarity index 100% rename from zonebg/VelvetMarble_HorizontalHand_Player.jpg rename to themes/VelvetMarble/zones/tablezone.jpg diff --git a/zonebg/CMakeLists.txt b/zonebg/CMakeLists.txt deleted file mode 100644 index b250a44b..00000000 --- a/zonebg/CMakeLists.txt +++ /dev/null @@ -1,16 +0,0 @@ -# CMakeLists for zonebg/ directory -# -# Installs default "zone background" files - -FILE(GLOB zonebg "${CMAKE_CURRENT_SOURCE_DIR}/*.png" "${CMAKE_CURRENT_SOURCE_DIR}/*.jpg") - -if(UNIX) - if(APPLE) - INSTALL(FILES ${zonebg} DESTINATION cockatrice.app/Contents/Resources/zonebg/) - else() - # Assume linux - INSTALL(FILES ${zonebg} DESTINATION share/cockatrice/zonebg/) - endif() -elseif(WIN32) - INSTALL(FILES ${zonebg} DESTINATION zonebg/) -endif() \ No newline at end of file diff --git a/zonebg/VelvetMarble_VerticalHand_Hand.jpg b/zonebg/VelvetMarble_VerticalHand_Hand.jpg deleted file mode 100644 index 83e8915a..00000000 Binary files a/zonebg/VelvetMarble_VerticalHand_Hand.jpg and /dev/null differ diff --git a/zonebg/VelvetMarble_VerticalHand_Player.jpg b/zonebg/VelvetMarble_VerticalHand_Player.jpg deleted file mode 100644 index d86987bf..00000000 Binary files a/zonebg/VelvetMarble_VerticalHand_Player.jpg and /dev/null differ