diff --git a/cantata.qrc b/cantata.qrc index a67d417757..6a2bdc8320 100644 --- a/cantata.qrc +++ b/cantata.qrc @@ -1,15 +1,7 @@ icons/stars.svg - -icons/view-media-repeat16.png -icons/view-media-repeat22.png -icons/view-media-repeat24.png -icons/view-media-repeat32.png -icons/view-media-shuffle16.png -icons/view-media-shuffle22.png -icons/view-media-shuffle24.png -icons/view-media-shuffle32.png +icons/consume.svg icons/sidebar-library.svg icons/sidebar-devices.svg diff --git a/icons/consume.svg b/icons/consume.svg new file mode 100644 index 0000000000..54a30ecc70 --- /dev/null +++ b/icons/consume.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/icons/view-media-repeat16.png b/icons/view-media-repeat16.png deleted file mode 100644 index 87a938aee2..0000000000 Binary files a/icons/view-media-repeat16.png and /dev/null differ diff --git a/icons/view-media-repeat22.png b/icons/view-media-repeat22.png deleted file mode 100644 index 41387a7064..0000000000 Binary files a/icons/view-media-repeat22.png and /dev/null differ diff --git a/icons/view-media-repeat24.png b/icons/view-media-repeat24.png deleted file mode 100644 index 161e72b938..0000000000 Binary files a/icons/view-media-repeat24.png and /dev/null differ diff --git a/icons/view-media-repeat32.png b/icons/view-media-repeat32.png deleted file mode 100644 index 07d70f1f74..0000000000 Binary files a/icons/view-media-repeat32.png and /dev/null differ diff --git a/icons/view-media-repeat48.png b/icons/view-media-repeat48.png deleted file mode 100644 index 739f20f634..0000000000 Binary files a/icons/view-media-repeat48.png and /dev/null differ diff --git a/icons/view-media-repeat64.png b/icons/view-media-repeat64.png deleted file mode 100644 index 7eb3324563..0000000000 Binary files a/icons/view-media-repeat64.png and /dev/null differ diff --git a/icons/view-media-shuffle16.png b/icons/view-media-shuffle16.png deleted file mode 100644 index 9b461db5cb..0000000000 Binary files a/icons/view-media-shuffle16.png and /dev/null differ diff --git a/icons/view-media-shuffle22.png b/icons/view-media-shuffle22.png deleted file mode 100644 index 2f2af7d68f..0000000000 Binary files a/icons/view-media-shuffle22.png and /dev/null differ diff --git a/icons/view-media-shuffle24.png b/icons/view-media-shuffle24.png deleted file mode 100644 index 163236dc58..0000000000 Binary files a/icons/view-media-shuffle24.png and /dev/null differ diff --git a/icons/view-media-shuffle32.png b/icons/view-media-shuffle32.png deleted file mode 100644 index 9e72752eae..0000000000 Binary files a/icons/view-media-shuffle32.png and /dev/null differ diff --git a/icons/view-media-shuffle48.png b/icons/view-media-shuffle48.png deleted file mode 100644 index 018fb335a9..0000000000 Binary files a/icons/view-media-shuffle48.png and /dev/null differ diff --git a/icons/view-media-shuffle64.png b/icons/view-media-shuffle64.png deleted file mode 100644 index a1f6f81c29..0000000000 Binary files a/icons/view-media-shuffle64.png and /dev/null differ diff --git a/support/monoicon.cpp b/support/monoicon.cpp index 6816a22742..4869e5c21f 100644 --- a/support/monoicon.cpp +++ b/support/monoicon.cpp @@ -64,40 +64,59 @@ class MonoIconEngine : public QIconEngine QPainter p(&pix); if (fileName.isEmpty()) { - // Load fontawesome, if it is not already loaded - if (fontAwesomeFontName.isEmpty()) { - Q_INIT_RESOURCE(fontawesome); - QFile res(":fontawesome-4.3.0.ttf"); - res.open(QIODevice::ReadOnly); - QByteArray fontData( res.readAll() ); - res.close(); - - QStringList loadedFontFamilies = QFontDatabase::applicationFontFamilies(QFontDatabase::addApplicationFontFromData(fontData)); - if (!loadedFontFamilies.empty()) { - fontAwesomeFontName= loadedFontFamilies.at(0); + QString fontName; + double scale=0.9; + if (FontAwesome::ex_one==fontAwesomeIcon) { + fontName="serif"; + } else { + // Load fontawesome, if it is not already loaded + if (fontAwesomeFontName.isEmpty()) { + Q_INIT_RESOURCE(fontawesome); + QFile res(":fontawesome-4.3.0.ttf"); + res.open(QIODevice::ReadOnly); + QByteArray fontData( res.readAll() ); + res.close(); + + QStringList loadedFontFamilies = QFontDatabase::applicationFontFamilies(QFontDatabase::addApplicationFontFromData(fontData)); + if (!loadedFontFamilies.empty()) { + fontAwesomeFontName= loadedFontFamilies.at(0); + } } - } - double scale=1.0; - - switch (fontAwesomeIcon) { - case FontAwesome::lastfmsquare: - case FontAwesome::lastfm: - scale=1.1; - break; - case FontAwesome::list: - if (!Utils::isHighDpi()) { - scale=1.05; + + switch (fontAwesomeIcon) { + case FontAwesome::lastfmsquare: + case FontAwesome::lastfm: + scale=1.1; + break; + case FontAwesome::list: + if (!Utils::isHighDpi()) { + scale=1.05; + } + break; + default: + break; } - default: - scale=0.9; - break; + fontName=fontAwesomeFontName; } - QFont font(fontAwesomeFontName); + QFont font(fontName); font.setPixelSize(qRound(rect.height()*scale)); + if (FontAwesome::ex_one==fontAwesomeIcon) { + font.setBold(true); + } p.setFont(font); p.setPen(col); - p.drawText(QRect(0, 0, rect.width(), rect.height()), QString(QChar(static_cast(fontAwesomeIcon))), QTextOption(Qt::AlignCenter|Qt::AlignVCenter)); + p.setRenderHint(QPainter::HighQualityAntialiasing, true); + if (FontAwesome::ex_one==fontAwesomeIcon) { + QString str=QString::number(fontAwesomeIcon); + p.drawText(QRect(0, 0, rect.width(), rect.height()), str, QTextOption(Qt::AlignHCenter|Qt::AlignVCenter)); + p.drawText(QRect(1, 0, rect.width(), rect.height()), str, QTextOption(Qt::AlignHCenter|Qt::AlignVCenter)); + #ifndef Q_OS_MAC + p.drawText(QRect(-1, 0, rect.width(), rect.height()), str, QTextOption(Qt::AlignHCenter|Qt::AlignVCenter)); + #endif + } else { + p.drawText(QRect(0, 0, rect.width(), rect.height()), QString(QChar(static_cast(fontAwesomeIcon))), QTextOption(Qt::AlignCenter|Qt::AlignVCenter)); + } } else { QSvgRenderer renderer; QFile f(fileName); diff --git a/support/monoicon.h b/support/monoicon.h index 6de07863a3..e8b86b6492 100644 --- a/support/monoicon.h +++ b/support/monoicon.h @@ -36,6 +36,8 @@ */ namespace FontAwesome { enum icon { + ex_one = 0x0001, + adjust = 0xf042, adn = 0xf170, aligncenter = 0xf037, diff --git a/widgets/icons.cpp b/widgets/icons.cpp index 60788519d3..822a879d3a 100644 --- a/widgets/icons.cpp +++ b/widgets/icons.cpp @@ -20,46 +20,32 @@ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ -#include + #include "icons.h" -#include "treeview.h" -#include "config.h" -#include "gui/settings.h" #include "support/globalstatic.h" -#include "support/utils.cpp" +#include "support/utils.h" #include "support/pathrequester.h" #include "support/monoicon.h" -#include -#include -#include -#include -#include -#include -#include -#include #if !defined Q_OS_WIN && !defined Q_OS_MAC && !defined ENABLE_UBUNTU #include "support/gtkstyle.h" #endif #ifdef Q_OS_MAC #include "support/osxstyle.h" #endif +#include +#include +#include +#include GLOBAL_STATIC(Icons, instance) -static QList constStdSmallSizes=QList() << 16 << 22 << 32 ; -static QList constStdSizes=QList() << constStdSmallSizes << 48; // << 64; -static QList constMonoSvgSizes=QList() << constStdSizes << 64; +static QList constStdSizes=QList() << 16 << 22 << 32 << 48; // << 64; static const int constDarkLimit=80; static const int constDarkValue=64; static const int constLightLimit=240; static const int constLightValue=240; -static bool inline isLight(const QColor &col) -{ - return col.red()>100 && col.blue()>100 && col.green()>100; -} - static bool inline isVeryLight(const QColor &col, int limit=constLightValue) { return col.red()>=limit && col.blue()>=limit && col.green()>=limit; @@ -80,113 +66,6 @@ static QColor clampColor(const QColor &color, int darkLimit=constDarkLimit, int : color; } -static QPixmap createSingleIconPixmap(int size, const QColor &col, double opacity=1.0) -{ - QPixmap pix(size, size); - pix.fill(Qt::transparent); - QPainter p(&pix); - QFont font(QLatin1String("sans")); - font.setBold(false); - font.setItalic(false); - font.setPixelSize(size*0.9); - p.setFont(font); - p.setPen(col); - p.setOpacity(opacity); - p.setRenderHint(QPainter::Antialiasing, true); - p.drawText(QRect(0, 1, size, size), QLatin1String("1"), QTextOption(Qt::AlignHCenter|Qt::AlignVCenter)); - p.drawText(QRect(1, 1, size, size), QLatin1String("1"), QTextOption(Qt::AlignHCenter|Qt::AlignVCenter)); - p.drawText(QRect(-1, 1, size, size), QLatin1String("1"), QTextOption(Qt::AlignHCenter|Qt::AlignVCenter)); - p.end(); - return pix; -} - -static QPixmap createConsumeIconPixmap(int size, const QColor &col, double opacity=1.0) -{ - QPixmap pix(size, size); - pix.fill(Qt::transparent); - QPainter p(&pix); - int border=2; - if (22==size) { - border=3; - } else if (32==size) { - border=4; - } else if (48==size) { - border=5; - } else if (48==size) { - border=7; - } /*else if (64==size) { - border=6; - }*/ - p.setPen(QPen(col, size/8.0)); - p.setOpacity(opacity); - p.setRenderHint(QPainter::Antialiasing, true); - QRectF rect(border+0.5, border+0.5, size-(2*border), size-(2*border)); - double distanceX=fabs(cos(35.0))*(rect.width()/2); - double distanceY=fabs(sin(35.0))*(rect.height()/2); - double midX=rect.x()+(rect.width()/2); - double midY=rect.y()+(rect.height()/2); - p.drawArc(rect, 40*16, 290*16); - p.drawLine(midX, midY, midX+distanceX, midY-distanceY); - p.drawLine(midX, midY, midX+distanceX, midY+distanceY); - p.drawPoint(midX, rect.y()+rect.height()/4); - p.end(); - return pix; -} - -#ifndef USE_SYSTEM_MENU_ICON -static QPixmap createMenuIconPixmap(int size, QColor col, double opacity=1.0) -{ - static const int constShadeFactor=75; - - QPixmap pix(size, size); - pix.fill(Qt::transparent); - QPainter p(&pix); - int lineWidth=3; - int space=2; - int borderX=1; - if (22==size) { - lineWidth=3; - space=3; - borderX=2; - } else if (32==size) { - lineWidth=5; - space=5; - borderX=3; - } else if (48==size) { - lineWidth=8; - space=6; - borderX=4; - } /*else if (64==size) { - lineWidth=10; - space=10; - borderX=6; - }*/ - - int borderY=((size-((3*lineWidth)+(2*space)))/2.0)+0.5; - - p.setOpacity(opacity); - p.setRenderHint(QPainter::Antialiasing, true); - bool light=isLight(col); - if (light) { - col=col.darker(constShadeFactor); - } else { - col=col.lighter(constShadeFactor); - } - for (int i=0; i<3; ++i) { - int offset=i*(space+lineWidth); - QRectF rect(borderX+0.5, borderY+offset, size-(2*borderX), lineWidth); - QLinearGradient grad(rect.topLeft(), rect.bottomLeft()); - col.setAlphaF(light ? 0.5 : 1.0); - grad.setColorAt(0, col); - col.setAlphaF(light ? 1.0 : 0.5); - grad.setColorAt(1, col); - p.fillPath(Utils::buildPath(rect, lineWidth/2.0), grad); - } - p.end(); - return pix; -} -#endif - static QColor calcIconColor() { QColor bgnd=QApplication::palette().color(QPalette::Active, QPalette::Background); @@ -194,98 +73,6 @@ static QColor calcIconColor() return clampColor(text, constDarkLimit, bgnd.value()<224 ? 32 : 48); } -static Icon createSingleIcon(const QColor &stdColor) -{ - Icon icon; - foreach (int s, constStdSmallSizes) { - icon.addPixmap(createSingleIconPixmap(s, stdColor)); - } - return icon; -} - -static Icon createConsumeIcon(const QColor &stdColor) -{ - Icon icon; - foreach (int s, constStdSmallSizes) { - icon.addPixmap(createConsumeIconPixmap(s, stdColor)); - } - return icon; -} - -#ifndef USE_SYSTEM_MENU_ICON -static Icon createMenuIcon(const QColor &stdColor) -{ - Icon icon; - foreach (int s, constStdSizes) { - icon.addPixmap(createMenuIconPixmap(s, stdColor)); - } - return icon; -} -#endif - -static void recolourPix(QImage &img, const QColor &col, double opacity=1.0) -{ - unsigned char *data=img.bits(); - int numChannels=4; - int w=img.width(); - int h=img.height(); - int stride=img.bytesPerLine(); - int r=col.red(); - int g=col.green(); - int b=col.blue(); - int width=w*numChannels; - int offset=0; - - for(int row=0; row sizes=QList() << constStdSizes << extraSize; - foreach (int s, sizes) { - QImage img(QChar(':')+name+QString::number(s)); - if (!img.isNull()) { - icon.addPixmap(recolour(img, stdColor)); - } - } - return icon; -} - #if !defined ENABLE_KDE_SUPPORT || defined Q_OS_MAC || defined Q_OS_WIN #define ALWAYS_USE_MONO_ICONS #endif @@ -295,12 +82,12 @@ Icons::Icons() QColor stdColor=calcIconColor(); QColor red(220, 0, 0); - singleIcon=createSingleIcon(stdColor); - consumeIcon=createConsumeIcon(stdColor); + singleIcon=MonoIcon::icon(FontAwesome::ex_one, stdColor, stdColor); + consumeIcon=MonoIcon::icon(":consume.svg", stdColor, stdColor); #ifdef USE_SYSTEM_MENU_ICON menuIcon=Icon("applications-system"); #else - menuIcon=createMenuIcon(stdColor); + menuIcon=MonoIcon::icon(FontAwesome::bars, stdColor, stdColor); #endif QString iconFile=QString(CANTATA_SYS_ICONS_DIR+"stream.png"); @@ -316,8 +103,8 @@ Icons::Icons() folderIcon=Icon("inode-directory"); dynamicRuleIcon=Icon(QStringList() << "dynamic-playlist" << "media-playlist-shuffle" << "text-x-generic"); speakerIcon=Icon(QStringList() << "speaker" << "audio-speakers" << "gnome-volume-control"); - repeatIcon=createRecolourableIcon("repeat", stdColor); - shuffleIcon=createRecolourableIcon("shuffle", stdColor); + repeatIcon=MonoIcon::icon(FontAwesome::refresh, stdColor, stdColor); + shuffleIcon=MonoIcon::icon(FontAwesome::random, stdColor, stdColor); filesIcon=Icon(QStringList() << "folder-downloads" << "folder-download" << "folder" << "go-down"); radioStreamIcon=Icon::create("radio", constStdSizes); addRadioStreamIcon=Icon::create("addradio", constStdSizes); @@ -428,7 +215,7 @@ void Icons::initToolbarIcons(const QColor &toolbarText) if (col==stdColor) { toolbarMenuIcon=menuIcon; } else { - toolbarMenuIcon=createMenuIcon(col); + toolbarMenuIcon=MonoIcon::icon(FontAwesome::bars, col, col); } #endif }