Bitcoin Core
31.1.0
P2P Digital Currency
Toggle main menu visibility
Loading...
Searching...
No Matches
src
qt
platformstyle.cpp
Go to the documentation of this file.
1
// Copyright (c) 2015-present 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.
4
5
#include <
qt/platformstyle.h
>
6
7
#include <QApplication>
8
#include <QColor>
9
#include <QImage>
10
#include <QPalette>
11
12
static
const
struct
{
13
const
char
*platformId;
15
const
bool
imagesOnButtons;
17
const
bool
colorizeIcons;
19
const
bool
useExtraSpacing;
20
}
platform_styles
[] = {
21
{
"macosx"
,
false
,
true
,
true
},
22
{
"windows"
,
true
,
false
,
false
},
23
/* Other: linux, unix, ... */
24
{
"other"
,
true
,
true
,
false
}
25
};
26
27
namespace
{
28
/* Local functions for colorizing single-color images */
29
30
void
MakeSingleColorImage(QImage& img,
const
QColor& colorbase)
31
{
32
img = img.convertToFormat(QImage::Format_ARGB32);
33
for
(
int
x = img.width(); x--; )
34
{
35
for
(
int
y = img.height(); y--; )
36
{
37
const
QRgb rgb = img.pixel(x, y);
38
img.setPixel(x, y, qRgba(colorbase.red(), colorbase.green(), colorbase.blue(), qAlpha(rgb)));
39
}
40
}
41
}
42
43
QIcon ColorizeIcon(
const
QIcon& ico,
const
QColor& colorbase)
44
{
45
QIcon new_ico;
46
for
(
const
QSize& sz : ico.availableSizes())
47
{
48
QImage img(ico.pixmap(sz).toImage());
49
MakeSingleColorImage(img, colorbase);
50
new_ico.addPixmap(QPixmap::fromImage(img));
51
}
52
return
new_ico;
53
}
54
55
QImage ColorizeImage(
const
QString& filename,
const
QColor& colorbase)
56
{
57
QImage img(filename);
58
MakeSingleColorImage(img, colorbase);
59
return
img;
60
}
61
62
QIcon ColorizeIcon(
const
QString& filename,
const
QColor& colorbase)
63
{
64
return
QIcon(QPixmap::fromImage(ColorizeImage(filename, colorbase)));
65
}
66
67
}
68
69
70
PlatformStyle::PlatformStyle
(
const
QString &_name,
bool
_imagesOnButtons,
bool
_colorizeIcons,
bool
_useExtraSpacing):
71
name
(_name),
72
imagesOnButtons
(_imagesOnButtons),
73
colorizeIcons
(_colorizeIcons),
74
useExtraSpacing
(_useExtraSpacing)
75
{
76
}
77
78
QColor
PlatformStyle::TextColor
()
const
79
{
80
return
QApplication::palette().color(QPalette::WindowText);
81
}
82
83
QColor
PlatformStyle::SingleColor
()
const
84
{
85
if
(
colorizeIcons
) {
86
QColor colorHighlightBg(QApplication::palette().color(QPalette::Highlight));
87
QColor colorHighlightFg(QApplication::palette().color(QPalette::HighlightedText));
88
const
QColor colorText(QApplication::palette().color(QPalette::WindowText));
89
const
int
colorTextLightness = colorText.lightness();
90
if
(abs(colorHighlightBg.lightness() - colorTextLightness) < abs(colorHighlightFg.lightness() - colorTextLightness)) {
91
return
colorHighlightBg;
92
}
93
return
colorHighlightFg;
94
}
95
return
{0, 0, 0};
96
}
97
98
QImage
PlatformStyle::SingleColorImage
(
const
QString& filename)
const
99
{
100
if
(!
colorizeIcons
)
101
return
QImage(filename);
102
return
ColorizeImage(filename,
SingleColor
());
103
}
104
105
QIcon
PlatformStyle::SingleColorIcon
(
const
QString& filename)
const
106
{
107
if
(!
colorizeIcons
)
108
return
QIcon(filename);
109
return
ColorizeIcon(filename,
SingleColor
());
110
}
111
112
QIcon
PlatformStyle::SingleColorIcon
(
const
QIcon& icon)
const
113
{
114
if
(!
colorizeIcons
)
115
return
icon;
116
return
ColorizeIcon(icon,
SingleColor
());
117
}
118
119
QIcon
PlatformStyle::TextColorIcon
(
const
QIcon& icon)
const
120
{
121
return
ColorizeIcon(icon,
TextColor
());
122
}
123
124
const
PlatformStyle
*
PlatformStyle::instantiate
(
const
QString &platformId)
125
{
126
for
(
const
auto
& platform_style :
platform_styles
) {
127
if
(platformId == platform_style.platformId) {
128
return
new
PlatformStyle
(
129
platform_style.platformId,
130
platform_style.imagesOnButtons,
131
platform_style.colorizeIcons,
132
platform_style.useExtraSpacing);
133
}
134
}
135
return
nullptr
;
136
}
137
PlatformStyle::imagesOnButtons
bool imagesOnButtons
Definition
platformstyle.h:43
PlatformStyle::name
QString name
Definition
platformstyle.h:42
PlatformStyle::SingleColorIcon
QIcon SingleColorIcon(const QString &filename) const
Colorize an icon (given filename) with the icon color.
Definition
platformstyle.cpp:105
PlatformStyle::SingleColor
QColor SingleColor() const
Definition
platformstyle.cpp:83
PlatformStyle::PlatformStyle
PlatformStyle(const QString &name, bool imagesOnButtons, bool colorizeIcons, bool useExtraSpacing)
Definition
platformstyle.cpp:70
PlatformStyle::instantiate
static const PlatformStyle * instantiate(const QString &platformId)
Get style associated with provided platform name, or 0 if not known.
Definition
platformstyle.cpp:124
PlatformStyle::useExtraSpacing
bool useExtraSpacing
Definition
platformstyle.h:45
PlatformStyle::colorizeIcons
bool colorizeIcons
Definition
platformstyle.h:44
PlatformStyle::TextColor
QColor TextColor() const
Definition
platformstyle.cpp:78
PlatformStyle::SingleColorImage
QImage SingleColorImage(const QString &filename) const
Colorize an image (given filename) with the icon color.
Definition
platformstyle.cpp:98
PlatformStyle::TextColorIcon
QIcon TextColorIcon(const QIcon &icon) const
Colorize an icon (given object) with the text color.
Definition
platformstyle.cpp:119
platform_styles
static const struct @146200250017272004026316014004033112004275043217 platform_styles[]
platformstyle.h
Generated on
for Bitcoin Core by
1.17.0