Bitcoin Core  28.1.0
P2P Digital Currency
networkstyle.cpp
Go to the documentation of this file.
1 // Copyright (c) 2014-2021 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/networkstyle.h>
6 
7 #include <qt/guiconstants.h>
8 
9 #include <tinyformat.h>
10 #include <util/chaintype.h>
11 
12 #include <QApplication>
13 
14 static const struct {
16  const char *appName;
17  const int iconColorHueShift;
19 } network_styles[] = {
25 };
26 
27 // titleAddText needs to be const char* for tr()
28 NetworkStyle::NetworkStyle(const QString &_appName, const int iconColorHueShift, const int iconColorSaturationReduction, const char *_titleAddText):
29  appName(_appName),
30  titleAddText(qApp->translate("SplashScreen", _titleAddText))
31 {
32  // load pixmap
33  QPixmap pixmap(":/icons/bitcoin");
34 
36  {
37  // generate QImage from QPixmap
38  QImage img = pixmap.toImage();
39 
40  int h,s,l,a;
41 
42  // traverse though lines
43  for(int y=0;y<img.height();y++)
44  {
45  QRgb *scL = reinterpret_cast< QRgb *>( img.scanLine( y ) );
46 
47  // loop through pixels
48  for(int x=0;x<img.width();x++)
49  {
50  // preserve alpha because QColor::getHsl doesn't return the alpha value
51  a = qAlpha(scL[x]);
52  QColor col(scL[x]);
53 
54  // get hue value
55  col.getHsl(&h,&s,&l);
56 
57  // rotate color on RGB color circle
58  // 70° should end up with the typical "testnet" green
60 
61  // change saturation value
63  {
65  }
66  col.setHsl(h,s,l,a);
67 
68  // set the pixel
69  scL[x] = col.rgba();
70  }
71  }
72 
73  //convert back to QPixmap
74  pixmap.convertFromImage(img);
75  }
76 
77  appIcon = QIcon(pixmap);
78  trayAndWindowIcon = QIcon(pixmap.scaled(QSize(256,256)));
79 }
80 
82 {
84  for (const auto& network_style : network_styles) {
85  if (networkId == network_style.networkId) {
86  return new NetworkStyle(
87  network_style.appName,
88  network_style.iconColorHueShift,
89  network_style.iconColorSaturationReduction,
90  titleAddText.c_str());
91  }
92  }
93  return nullptr;
94 }
#define strprintf
Format arguments and return the string or write to given std::ostream (see tinyformat::format doc for...
Definition: tinyformat.h:1161
#define QAPP_APP_NAME_REGTEST
Definition: guiconstants.h:55
const ChainType networkId
static const NetworkStyle * instantiate(const ChainType networkId)
Get style associated with provided network id, or 0 if not known.
const int iconColorHueShift
QIcon trayAndWindowIcon
Definition: networkstyle.h:31
ChainType
Definition: chaintype.h:11
QString titleAddText
Definition: networkstyle.h:32
#define QAPP_APP_NAME_DEFAULT
Definition: guiconstants.h:51
#define QAPP_APP_NAME_TESTNET4
Definition: guiconstants.h:53
const int iconColorSaturationReduction
#define QAPP_APP_NAME_TESTNET
Definition: guiconstants.h:52
std::string ChainTypeToString(ChainType chain)
Definition: chaintype.cpp:11
static const struct @5 network_styles[]
NetworkStyle(const QString &appName, const int iconColorHueShift, const int iconColorSaturationReduction, const char *titleAddText)
const char * appName
#define QAPP_APP_NAME_SIGNET
Definition: guiconstants.h:54