From 8db5d93a35be13e87317c24fae58b6b09283c3ff Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sat, 28 Jun 2014 21:45:52 +0200 Subject: [PATCH] use a hash-table to cache gui properties --- gtk2_ardour/axis_view.cc | 10 ++++++++-- gtk2_ardour/axis_view.h | 7 ++++++- gtk2_ardour/editor.h | 1 + 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/gtk2_ardour/axis_view.cc b/gtk2_ardour/axis_view.cc index 41efbf86ae..5e36fc43c1 100644 --- a/gtk2_ardour/axis_view.cc +++ b/gtk2_ardour/axis_view.cc @@ -66,7 +66,14 @@ AxisView::unique_random_color() string AxisView::gui_property (const string& property_name) const { - return gui_object_state().get_string (state_id(), property_name); + if (property_hashtable.count(property_name)) { + return property_hashtable[property_name]; + } else { + string rv = gui_object_state().get_string (state_id(), property_name); + property_hashtable.erase(property_name); + property_hashtable.emplace(property_name, rv); + return rv; + } } bool @@ -84,7 +91,6 @@ AxisView::set_marked_for_display (bool yn) set_gui_property ("visible", yn); return true; // things changed } - return false; } diff --git a/gtk2_ardour/axis_view.h b/gtk2_ardour/axis_view.h index 8e777c2a58..4ce76c92ce 100644 --- a/gtk2_ardour/axis_view.h +++ b/gtk2_ardour/axis_view.h @@ -21,6 +21,7 @@ #define __ardour_gtk_axis_view_h__ #include +#include #include #include @@ -63,6 +64,10 @@ class AxisView : public virtual Selectable, public PBD::ScopedConnectionList, pu std::string gui_property (const std::string& property_name) const; template void set_gui_property (const std::string& property_name, const T& value) { + std::stringstream s; + s << value; + property_hashtable.erase(property_name); + property_hashtable.emplace(property_name, s.str()); gui_object_state().set_property (state_id(), property_name, value); } @@ -89,7 +94,7 @@ class AxisView : public virtual Selectable, public PBD::ScopedConnectionList, pu Gtk::Label name_label; - bool _marked_for_display; + mutable boost::unordered_map property_hashtable; uint32_t _old_order_key; }; /* class AxisView */ diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index f6eb44b48d..d95b1bfe12 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -413,6 +413,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void center_screen (framepos_t); TrackViewList axis_views_from_routes (boost::shared_ptr) const; + Gtkmm2ext::TearOff* mouse_mode_tearoff () const { return _mouse_mode_tearoff; } Gtkmm2ext::TearOff* tools_tearoff () const { return _tools_tearoff; }