Merge #11997: [tests] util_tests.cpp: actually check ignored args
[bitcoinplatinum.git] / src / qt / platformstyle.cpp
blobfce71f661af95ed965f404ac4dd46382fcdc6e8c
1 // Copyright (c) 2015-2017 The Bitcoin Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 #include <qt/platformstyle.h>
7 #include <qt/guiconstants.h>
9 #include <QApplication>
10 #include <QColor>
11 #include <QImage>
12 #include <QPalette>
14 static const struct {
15 const char *platformId;
16 /** Show images on push buttons */
17 const bool imagesOnButtons;
18 /** Colorize single-color icons */
19 const bool colorizeIcons;
20 /** Extra padding/spacing in transactionview */
21 const bool useExtraSpacing;
22 } platform_styles[] = {
23 {"macosx", false, false, true},
24 {"windows", true, false, false},
25 /* Other: linux, unix, ... */
26 {"other", true, true, false}
28 static const unsigned platform_styles_count = sizeof(platform_styles)/sizeof(*platform_styles);
30 namespace {
31 /* Local functions for colorizing single-color images */
33 void MakeSingleColorImage(QImage& img, const QColor& colorbase)
35 img = img.convertToFormat(QImage::Format_ARGB32);
36 for (int x = img.width(); x--; )
38 for (int y = img.height(); y--; )
40 const QRgb rgb = img.pixel(x, y);
41 img.setPixel(x, y, qRgba(colorbase.red(), colorbase.green(), colorbase.blue(), qAlpha(rgb)));
46 QIcon ColorizeIcon(const QIcon& ico, const QColor& colorbase)
48 QIcon new_ico;
49 for (const QSize sz : ico.availableSizes())
51 QImage img(ico.pixmap(sz).toImage());
52 MakeSingleColorImage(img, colorbase);
53 new_ico.addPixmap(QPixmap::fromImage(img));
55 return new_ico;
58 QImage ColorizeImage(const QString& filename, const QColor& colorbase)
60 QImage img(filename);
61 MakeSingleColorImage(img, colorbase);
62 return img;
65 QIcon ColorizeIcon(const QString& filename, const QColor& colorbase)
67 return QIcon(QPixmap::fromImage(ColorizeImage(filename, colorbase)));
73 PlatformStyle::PlatformStyle(const QString &_name, bool _imagesOnButtons, bool _colorizeIcons, bool _useExtraSpacing):
74 name(_name),
75 imagesOnButtons(_imagesOnButtons),
76 colorizeIcons(_colorizeIcons),
77 useExtraSpacing(_useExtraSpacing),
78 singleColor(0,0,0),
79 textColor(0,0,0)
81 // Determine icon highlighting color
82 if (colorizeIcons) {
83 const QColor colorHighlightBg(QApplication::palette().color(QPalette::Highlight));
84 const QColor colorHighlightFg(QApplication::palette().color(QPalette::HighlightedText));
85 const QColor colorText(QApplication::palette().color(QPalette::WindowText));
86 const int colorTextLightness = colorText.lightness();
87 QColor colorbase;
88 if (abs(colorHighlightBg.lightness() - colorTextLightness) < abs(colorHighlightFg.lightness() - colorTextLightness))
89 colorbase = colorHighlightBg;
90 else
91 colorbase = colorHighlightFg;
92 singleColor = colorbase;
94 // Determine text color
95 textColor = QColor(QApplication::palette().color(QPalette::WindowText));
98 QImage PlatformStyle::SingleColorImage(const QString& filename) const
100 if (!colorizeIcons)
101 return QImage(filename);
102 return ColorizeImage(filename, SingleColor());
105 QIcon PlatformStyle::SingleColorIcon(const QString& filename) const
107 if (!colorizeIcons)
108 return QIcon(filename);
109 return ColorizeIcon(filename, SingleColor());
112 QIcon PlatformStyle::SingleColorIcon(const QIcon& icon) const
114 if (!colorizeIcons)
115 return icon;
116 return ColorizeIcon(icon, SingleColor());
119 QIcon PlatformStyle::TextColorIcon(const QString& filename) const
121 return ColorizeIcon(filename, TextColor());
124 QIcon PlatformStyle::TextColorIcon(const QIcon& icon) const
126 return ColorizeIcon(icon, TextColor());
129 const PlatformStyle *PlatformStyle::instantiate(const QString &platformId)
131 for (unsigned x=0; x<platform_styles_count; ++x)
133 if (platformId == platform_styles[x].platformId)
135 return new PlatformStyle(
136 platform_styles[x].platformId,
137 platform_styles[x].imagesOnButtons,
138 platform_styles[x].colorizeIcons,
139 platform_styles[x].useExtraSpacing);
142 return 0;