API flush static cairo pattern cache
authorRobin Gareus <robin@gareus.org>
Thu, 11 Sep 2014 00:40:18 +0000 (02:40 +0200)
committerRobin Gareus <robin@gareus.org>
Thu, 11 Sep 2014 17:30:33 +0000 (19:30 +0200)
(should probably be cleaned regularly
e.g. meterbridge resize)

gtk2_ardour/ardour_ui.cc
libs/gtkmm2ext/fastmeter.cc
libs/gtkmm2ext/gtkmm2ext/fastmeter.h

index e587de8145fa9b46d441aa9de1c91d91958fa6cc..d0d3f96c67d0435df65df25f6897d85adf9b8846 100644 (file)
@@ -577,6 +577,7 @@ ARDOUR_UI::~ARDOUR_UI ()
                delete secondary_clock;
                delete _process_thread;
                delete gui_object_state;
+               FastMeter::flush_pattern_cache ();
        }
 }
 
index df3f09735e8be6c002e7dc953a398debe4f95396..15f38db20a492921ca9049bf0bc9c16d3d5acee2 100644 (file)
@@ -133,6 +133,24 @@ FastMeter::~FastMeter ()
 {
 }
 
+void
+FastMeter::flush_pattern_cache () {
+       Pattern10Map::iterator i1;
+       PatternBgMap::iterator ib;
+       for (ib = hb_pattern_cache.begin(); ib !=  hb_pattern_cache.end(); ++ib) {
+               hb_pattern_cache.erase(ib);
+       }
+       for (i1 = hm_pattern_cache.begin(); i1 !=  hm_pattern_cache.end(); ++i1) {
+               hm_pattern_cache.erase(i1);
+       }
+       for (ib = vb_pattern_cache.begin(); ib !=  vb_pattern_cache.end(); ++ib) {
+               vb_pattern_cache.erase(ib);
+       }
+       for (i1 = vm_pattern_cache.begin(); i1 !=  vm_pattern_cache.end(); ++i1) {
+               vm_pattern_cache.erase(i1);
+       }
+}
+
 Cairo::RefPtr<Cairo::Pattern>
 FastMeter::generate_meter_pattern (
                int width, int height, int *clr, float *stp, int styleflags, bool horiz)
index 650908f6a4852e3deecdac2b35238e5c170291b7..dbb3296c4653fe30c0d0844d7f3bc980d3edc134 100644 (file)
@@ -52,6 +52,7 @@ class LIBGTKMM2EXT_API FastMeter : public CairoWidget {
                        int styleflags = 3
                        );
        virtual ~FastMeter ();
+       static void flush_pattern_cache();
 
        void set (float level, float peak = -1);
        void clear ();