// Copyright (c) 2014-2021 The Limenka developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include #include #include #include #include static const struct { const ChainType networkId; const char *appName; const int iconColorHueShift; const int iconColorSaturationReduction; } network_styles[] = { {ChainType::MAIN, QAPP_APP_NAME_DEFAULT, 0, 0}, {ChainType::TESTNET, QAPP_APP_NAME_TESTNET, 70, 30}, {ChainType::TESTNET4, QAPP_APP_NAME_TESTNET4, 70, 30}, {ChainType::SIGNET, QAPP_APP_NAME_SIGNET, 35, 15}, {ChainType::REGTEST, QAPP_APP_NAME_REGTEST, 160, 30}, }; // titleAddText needs to be const char* for tr() NetworkStyle::NetworkStyle(const QString &_appName, const int iconColorHueShift, const int iconColorSaturationReduction, const char *_titleAddText): m_colour_shift(std::make_pair(iconColorHueShift, iconColorSaturationReduction)), appName(_appName), titleAddText(qApp->translate("SplashScreen", _titleAddText)) { // load pixmap QPixmap pixmap(":/icons/limenka"); if(iconColorHueShift != 0 && iconColorSaturationReduction != 0) { // generate QImage from QPixmap QImage img = pixmap.toImage(); int h,s,l,a; // traverse though lines for(int y=0;y( img.scanLine( y ) ); // loop through pixels for(int x=0;xiconColorSaturationReduction) { s -= iconColorSaturationReduction; } col.setHsl(h,s,l,a); // set the pixel scL[x] = col.rgba(); } } //convert back to QPixmap pixmap.convertFromImage(img); } trayAndWindowIcon = QIcon(pixmap.scaled(QSize(256,256))); } QColor NetworkStyle::AdjustColour(QColor colour) const { int h, s, l, a; // preserve alpha because QColor::getHsl doesn't return the alpha value a = colour.alpha(); // get hue value colour.getHsl(&h, &s, &l); // rotate color on RGB color circle // 70° should end up with the typical "testnet" green h += m_colour_shift.first; // change saturation value if (s > m_colour_shift.second) { s -= m_colour_shift.second; } colour.setHsl(h, s, l, a); return colour; } const NetworkStyle* NetworkStyle::instantiate(const ChainType networkId) { std::string titleAddText = networkId == ChainType::MAIN ? "" : strprintf("[%s]", ChainTypeToString(networkId)); for (const auto& network_style : network_styles) { if (networkId == network_style.networkId) { return new NetworkStyle( network_style.appName, network_style.iconColorHueShift, network_style.iconColorSaturationReduction, titleAddText.c_str()); } } return nullptr; }