X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fui_config.h;h=7637bcf228ff1bc5215a7c855402fb28bc10b5f9;hb=d425a43b26c0081e93ef8a23692d9ed7fc635b89;hp=ed8a88c1da26884dd0f9f7a63dbb3fb301082b23;hpb=e1b0f1bd0b03c071d2b5987e4ab75ef059e32111;p=ardour.git diff --git a/gtk2_ardour/ui_config.h b/gtk2_ardour/ui_config.h index ed8a88c1da..7637bcf228 100644 --- a/gtk2_ardour/ui_config.h +++ b/gtk2_ardour/ui_config.h @@ -24,16 +24,28 @@ #include #include +#include +#include + #include "pbd/stateful.h" #include "pbd/xml++.h" #include "ardour/configuration_variable.h" +#include "canvas/colors.h" + +#include "utils.h" + +/* This is very similar to ARDOUR::ConfigVariable but expects numeric values to + * be in hexadecimal. This is because it is intended for use with color + * specifications which are easier to scan for issues in "rrggbbaa" format than + * as decimals. + */ template -class UIConfigVariable : public ARDOUR::ConfigVariableBase +class ColorVariable : public ARDOUR::ConfigVariableBase { - public: - UIConfigVariable (std::string str) : ARDOUR::ConfigVariableBase (str) {} - UIConfigVariable (std::string str, T val) : ARDOUR::ConfigVariableBase (str), value (val) {} + public: + ColorVariable (std::string str) : ARDOUR::ConfigVariableBase (str) {} + ColorVariable (std::string str, T val) : ARDOUR::ConfigVariableBase (str), value (val) {} bool set (T val) { if (val == value) { @@ -70,11 +82,25 @@ class UIConfigVariable : public ARDOUR::ConfigVariableBase class UIConfiguration : public PBD::Stateful { - public: + public: + struct RelativeHSV { + RelativeHSV (const std::string& b, const ArdourCanvas::HSV& mod) + : base_color (b) + , modifier (mod) + , quantized_hue (-1.0) {} + std::string base_color; + ArdourCanvas::HSV modifier; + double quantized_hue; + + ArdourCanvas::HSV get() const; + }; + UIConfiguration(); ~UIConfiguration(); - std::map *> canvas_colors; + static UIConfiguration* instance() { return _instance; } + + std::map *> configurable_colors; bool dirty () const; void set_dirty (); @@ -83,45 +109,92 @@ class UIConfiguration : public PBD::Stateful int save_state (); int load_defaults (); + static void load_rc_file (std::string const &, bool themechange); + int set_state (const XMLNode&, int version); XMLNode& get_state (void); XMLNode& get_variables (std::string); void set_variables (const XMLNode&); - void pack_canvasvars (); - uint32_t color_by_name (const std::string&); + typedef std::map RelativeColors; + typedef std::map ColorAliases; + + RelativeColors relative_colors; + ColorAliases color_aliases; + + void set_alias (std::string const & name, std::string const & alias); + + void reset_relative (const std::string& name, const RelativeHSV& new_value); + + RelativeHSV color_as_relative_hsv (ArdourCanvas::Color c); + ArdourCanvas::Color quantized (ArdourCanvas::Color) const; - sigc::signal ParameterChanged; + ArdourCanvas::Color base_color_by_name (const std::string&) const; + ArdourCanvas::Color color (const std::string&) const; + ArdourCanvas::HSV color_hsv (const std::string&) const; + sigc::signal ParameterChanged; + void map_parameters (boost::function&); + + void parameter_changed (std::string); + #undef UI_CONFIG_VARIABLE #define UI_CONFIG_VARIABLE(Type,var,name,value) \ Type get_##var () const { return var.get(); } \ bool set_##var (Type val) { bool ret = var.set (val); if (ret) { ParameterChanged (name); } return ret; } #include "ui_config_vars.h" #undef UI_CONFIG_VARIABLE -#undef CANVAS_VARIABLE -#define CANVAS_VARIABLE(var,name) \ - uint32_t get_##var () const { return var.get(); } \ - bool set_##var (uint32_t val) { bool ret = var.set (val); if (ret) { ParameterChanged (name); } return ret; } +#define CANVAS_FONT_VARIABLE(var,name) \ + Pango::FontDescription get_##var () const { return ARDOUR_UI_UTILS::sanitized_font (var.get()); } \ + bool set_##var (const std::string& val) { bool ret = var.set (val); if (ret) { ParameterChanged (name); } return ret; } #include "canvas_vars.h" -#undef CANVAS_VARIABLE +#undef CANVAS_FONT_VARIABLE - private: +#undef CANVAS_BASE_COLOR +#define CANVAS_BASE_COLOR(var,name,val) \ + ArdourCanvas::Color get_##var() const { return var.get(); } \ + bool set_##var (ArdourCanvas::Color v) { bool ret = var.set (v); if (ret) { ParameterChanged (name); } return ret; } \ + bool set_##var(const ArdourCanvas::HSV& v) const { return set_##var (v.color()); } +#include "base_colors.h" +#undef CANVAS_BASE_COLOR + +#undef COLOR_ALIAS +#define COLOR_ALIAS(var,name,alias) ArdourCanvas::Color get_##var() const { return color (name); } +#include "color_aliases.h" +#undef COLOR_ALIAS + private: /* declare variables */ #undef UI_CONFIG_VARIABLE -#define UI_CONFIG_VARIABLE(Type,var,name,value) UIConfigVariable var; +#define UI_CONFIG_VARIABLE(Type,var,name,value) ARDOUR::ConfigVariable var; #include "ui_config_vars.h" #undef UI_CONFIG_VARIABLE -#undef CANVAS_VARIABLE -#define CANVAS_VARIABLE(var,name) UIConfigVariable var; +#define CANVAS_FONT_VARIABLE(var,name) ARDOUR::ConfigVariable var; #include "canvas_vars.h" -#undef CANVAS_VARIABLE +#undef CANVAS_FONT_VARIABLE + + /* declare base color variables (these are modifiable by the user) */ + +#undef CANVAS_BASE_COLOR +#define CANVAS_BASE_COLOR(var,name,val) ColorVariable var; +#include "base_colors.h" +#undef CANVAS_BASE_COLOR XMLNode& state (); bool _dirty; + bool aliases_modified; + bool derived_modified; + + static UIConfiguration* _instance; + + void load_color_aliases (XMLNode const &); + void reset_gtk_theme (); + void colors_changed (); + + XMLNode _saved_state_node; + int _saved_state_version; }; #endif /* __ardour_ui_configuration_h__ */