X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fui_config.h;h=ddfd2f9ecd3f25defe8319f3706faafbe81397b6;hb=786cb746d0ce387a6194555e6757ec64c937690b;hp=49cf27c93ada275c4ca37a836e20d6e3e695e4c8;hpb=46ed23116e44d1b4182a65511cf7ccf6b00b2a61;p=ardour.git diff --git a/gtk2_ardour/ui_config.h b/gtk2_ardour/ui_config.h index 49cf27c93a..ddfd2f9ecd 100644 --- a/gtk2_ardour/ui_config.h +++ b/gtk2_ardour/ui_config.h @@ -24,171 +24,127 @@ #include #include +#include +#include + +#include "ardour/types.h" // required for opeators used in pbd/configuration_variable.h + #include "pbd/stateful.h" #include "pbd/xml++.h" -#include "ardour/configuration_variable.h" +#include "pbd/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 ColorVariable : public ARDOUR::ConfigVariableBase -{ - 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) { - return false; - } - value = val; - return true; - } - - T get() const { - return value; - } - - std::string get_as_string () const { - std::stringstream ss; - ss << std::hex; - ss.fill('0'); - ss.width(8); - ss << value; - return ss.str (); - } - - void set_from_string (std::string const & s) { - std::stringstream ss; - ss << std::hex; - ss << s; - ss >> value; - } - - protected: - T get_for_save() { return value; } - T value; -}; - class UIConfiguration : public PBD::Stateful { - public: +private: UIConfiguration(); ~UIConfiguration(); - static UIConfiguration* instance() { return _instance; } + public: + static UIConfiguration& instance(); - std::map *> configurable_colors; + static std::string color_file_suffix; - bool dirty () const; - void set_dirty (); + void load_rc_file (bool themechange, bool allow_own = true); int load_state (); int save_state (); int load_defaults (); + int load_color_theme (bool allow_own=true); int set_state (const XMLNode&, int version); XMLNode& get_state (void); XMLNode& get_variables (std::string); void set_variables (const XMLNode&); - void pack_canvasvars (); - void reset_derived_colors (); - ArdourCanvas::Color base_color_by_name (const std::string&) const; - ArdourCanvas::Color color (const std::string&) const; + std::string color_file_name (bool use_my, bool with_program_name, bool with_version) const; + + typedef std::map Colors; + typedef std::map ColorAliases; + typedef std::map Modifiers; + + Colors colors; + ColorAliases color_aliases; + Modifiers modifiers; + + void set_alias (std::string const & name, std::string const & alias); + void set_color (const std::string& name, ArdourCanvas::Color); + void set_modifier (std::string const &, ArdourCanvas::SVAModifier svam); + + std::string color_as_alias (ArdourCanvas::Color c); + ArdourCanvas::Color quantized (ArdourCanvas::Color) const; + + ArdourCanvas::Color color (const std::string&, bool* failed = 0) const; + ArdourCanvas::Color color_mod (std::string const & color, std::string const & modifier) const; + ArdourCanvas::Color color_mod (const ArdourCanvas::Color& color, std::string const & modifier) const; ArdourCanvas::HSV color_hsv (const std::string&) const; + ArdourCanvas::SVAModifier modifier (const std::string&) const; + + sigc::signal ColorsChanged; + + void reset_dpi (); + void set_pango_fontsize (); + + float get_ui_scale (); - sigc::signal ParameterChanged; + sigc::signal DPIReset; + + sigc::signal ParameterChanged; void map_parameters (boost::function&); + void parameter_changed (std::string); + + /** called before initializing any part of the GUI. Sets up + * any runtime environment required to make the GUI work + * in specific ways. + */ + int pre_gui_init (); + + /** called after the GUI toolkit has been initialized. + */ + UIConfiguration* post_gui_init (); + #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_STRING_VARIABLE -#define CANVAS_STRING_VARIABLE(var,name) \ - std::string get_##var () const { return var.get(); } \ - bool set_##var (const std::string& 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_STRING_VARIABLE #undef CANVAS_FONT_VARIABLE -#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 (#var); } 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: - - 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; - }; - - /* these are loaded from serialized state (e.g. XML) */ - std::map relative_colors; - /* these are computed during color_compute()*/ - std::map actual_colors; - /* these map from the name/key of relative colors to the color/value of actual colors */ - std::map color_aliases; - /* declare variables */ #undef UI_CONFIG_VARIABLE -#define UI_CONFIG_VARIABLE(Type,var,name,value) ARDOUR::ConfigVariable var; +#define UI_CONFIG_VARIABLE(Type,var,name,value) PBD::ConfigVariable var; #include "ui_config_vars.h" #undef UI_CONFIG_VARIABLE -#define CANVAS_STRING_VARIABLE(var,name) ARDOUR::ConfigVariable var; -#define CANVAS_FONT_VARIABLE(var,name) ARDOUR::ConfigVariable var; +#define CANVAS_FONT_VARIABLE(var,name) PBD::ConfigVariable var; #include "canvas_vars.h" -#undef CANVAS_STRING_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; - static UIConfiguration* _instance; - - void color_compute (); - void print_relative_def (std::string camelcase, std::string name, ArdourCanvas::Color c); - void color_theme_changed (); - void regenerate_relative_definitions (); - ArdourCanvas::Color quantized (ArdourCanvas::Color); + bool aliases_modified; + bool colors_modified; + bool modifiers_modified; + + int store_color_theme (); + void load_color_aliases (XMLNode const &); + void load_colors (XMLNode const &); + void load_modifiers (XMLNode const &); + void reset_gtk_theme (); + void colors_changed (); + + uint32_t block_save; }; #endif /* __ardour_ui_configuration_h__ */ -