X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fui_config.cc;h=3af884abba83f63f3e42c41a10cffbc09f26813b;hb=24d5f1a6249b08a8b21854ecf001be7e07e5bf23;hp=2db640681d4b219e9317affde2e85e7df59e9228;hpb=01ac1b5362b0f246e5227dc763054917daa43642;p=ardour.git diff --git a/gtk2_ardour/ui_config.cc b/gtk2_ardour/ui_config.cc index 2db640681d..3af884abba 100644 --- a/gtk2_ardour/ui_config.cc +++ b/gtk2_ardour/ui_config.cc @@ -49,6 +49,7 @@ #include "ardour/search_paths.h" #include "ardour/revision.h" #include "ardour/utils.h" +#include "ardour/types_convert.h" #include "gtkmm2ext/rgb_macros.h" #include "gtkmm2ext/gtk_ui.h" @@ -137,23 +138,23 @@ void UIConfiguration::reset_gtk_theme () { LocaleGuard lg; - stringstream ss; - - ss << "gtk_color_scheme = \"" << hex; + std::string color_scheme_string("gtk_color_scheme = \""); for (ColorAliases::iterator g = color_aliases.begin(); g != color_aliases.end(); ++g) { if (g->first.find ("gtk_") == 0) { const string gtk_name = g->first.substr (4); - ss << gtk_name << ":#" << std::setw (6) << setfill ('0') << (color (g->second) >> 8) << ';'; + ArdourCanvas::Color a_color = color (g->second); + + color_scheme_string += gtk_name + ":#" + color_to_hex_string_no_alpha (a_color) + ';'; } } - ss << '"' << dec << endl; + color_scheme_string += '"'; /* reset GTK color scheme */ - Gtk::Settings::get_default()->property_gtk_color_scheme() = ss.str(); + Gtk::Settings::get_default()->property_gtk_color_scheme() = color_scheme_string; } void @@ -164,7 +165,7 @@ UIConfiguration::reset_dpi () /* FT2 rendering - used by GnomeCanvas, sigh */ #ifndef PLATFORM_WINDOWS - pango_ft2_font_map_set_resolution ((PangoFT2FontMap*) pango_ft2_font_map_new(), val/1024, val/1024); + pango_ft2_font_map_set_resolution ((PangoFT2FontMap*) pango_ft2_font_map_new(), val/1024, val/1024); // XXX pango_ft2_font_map_new leaks #endif /* Cairo rendering, in case there is any */ @@ -242,7 +243,6 @@ UIConfiguration::load_defaults () warning << string_compose (_("Could not find default UI configuration file %1"), default_ui_config_file_name) << endmsg; } - if (ret == 0) { /* reload color theme */ load_color_theme (false); @@ -260,8 +260,15 @@ UIConfiguration::color_file_name (bool use_my, bool with_version) const basename += "my-"; } - //this is the overall theme file, e.g. "dark" plus "-downcase(PROGRAM_NAME)" - basename += color_file.get(); + std::string color_name = color_file.get(); + size_t sep = color_name.find_first_of("-"); + if (sep != string::npos) { + color_name = color_name.substr (0, sep); + } + + basename += color_name; + basename += "-"; + basename += downcase(std::string(PROGRAM_NAME)); std::string rev (revision); std::size_t pos = rev.find_first_of("-"); @@ -362,10 +369,8 @@ UIConfiguration::store_color_theme () XMLNode* parent = new XMLNode (X_("Colors")); for (Colors::const_iterator i = colors.begin(); i != colors.end(); ++i) { XMLNode* node = new XMLNode (X_("Color")); - node->add_property (X_("name"), i->first); - stringstream ss; - ss << "0x" << setw (8) << setfill ('0') << hex << i->second; - node->add_property (X_("value"), ss.str()); + node->set_property (X_("name"), i->first); + node->set_property (X_("value"), color_to_hex_string (i->second)); parent->add_child_nocopy (*node); } root->add_child_nocopy (*parent); @@ -373,8 +378,8 @@ UIConfiguration::store_color_theme () parent = new XMLNode (X_("ColorAliases")); for (ColorAliases::const_iterator i = color_aliases.begin(); i != color_aliases.end(); ++i) { XMLNode* node = new XMLNode (X_("ColorAlias")); - node->add_property (X_("name"), i->first); - node->add_property (X_("alias"), i->second); + node->set_property (X_("name"), i->first); + node->set_property (X_("alias"), i->second); parent->add_child_nocopy (*node); } root->add_child_nocopy (*parent); @@ -382,8 +387,8 @@ UIConfiguration::store_color_theme () parent = new XMLNode (X_("Modifiers")); for (Modifiers::const_iterator i = modifiers.begin(); i != modifiers.end(); ++i) { XMLNode* node = new XMLNode (X_("Modifier")); - node->add_property (X_("name"), i->first); - node->add_property (X_("modifier"), i->second.to_string()); + node->set_property (X_("name"), i->first); + node->set_property (X_("modifier"), i->second.to_string()); parent->add_child_nocopy (*node); } root->add_child_nocopy (*parent); @@ -791,3 +796,28 @@ UIConfiguration::load_rc_file (bool themechange, bool allow_own) Gtkmm2ext::UI::instance()->load_rcfile (rc_file_path, themechange); } + +std::string +UIConfiguration::color_to_hex_string (ArdourCanvas::Color c) +{ + char buf[16]; + int retval = g_snprintf (buf, sizeof(buf), "%08x", c); + + if (retval < 0 || retval >= (int)sizeof(buf)) { + assert(false); + } + return buf; +} + +std::string +UIConfiguration::color_to_hex_string_no_alpha (ArdourCanvas::Color c) +{ + c >>= 8; // shift/remove alpha + char buf[16]; + int retval = g_snprintf (buf, sizeof(buf), "%06x", c); + + if (retval < 0 || retval >= (int)sizeof(buf)) { + assert(false); + } + return buf; +}