minor peak-meter performance tweak
authorRobin Gareus <robin@gareus.org>
Fri, 12 Jul 2013 15:56:42 +0000 (17:56 +0200)
committerRobin Gareus <robin@gareus.org>
Fri, 12 Jul 2013 15:56:42 +0000 (17:56 +0200)
* redraw only missing parts of the outside rectangle,
* don't redraw RMS meter if value has not changed

libs/gtkmm2ext/fastmeter.cc
libs/gtkmm2ext/gtkmm2ext/fastmeter.h

index 481960987859c9fe9d66d6d4a5afa21c2cb46da7..c0bcb05af56590858b6f120ac0582917692a65bb 100644 (file)
@@ -53,7 +53,6 @@ FastMeter::FastMeter (long hold, unsigned long dimen, Orientation o, int len,
 {
        orientation = o;
        hold_cnt = hold;
-       resized = true;
        hold_state = 0;
        bright_hold = false;
        current_peak = 0;
@@ -353,7 +352,6 @@ FastMeter::on_size_allocate (Gtk::Allocation &alloc)
        }
 
        DrawingArea::on_size_allocate (alloc);
-       resized = true;
 }
 
 bool
@@ -372,16 +370,13 @@ FastMeter::vertical_expose (GdkEventExpose* ev)
 
        cairo_t* cr = gdk_cairo_create (get_window ()->gobj());
 
-       if (resized) {
-               cairo_set_source_rgb (cr, 0, 0, 0); // black
-               rounded_rectangle (cr, 0, 0, pixrect.width + 2, pixheight + 2, 2);
-               cairo_stroke (cr);
-               //cairo_fill (cr);
-               //resized = false;
-       }
        cairo_rectangle (cr, ev->area.x, ev->area.y, ev->area.width, ev->area.height);
        cairo_clip (cr);
 
+       cairo_set_source_rgb (cr, 0, 0, 0); // black
+       rounded_rectangle (cr, 0, 0, pixrect.width + 2, pixheight + 2, 2);
+       cairo_stroke (cr);
+
        top_of_meter = (gint) floor (pixheight * current_level);
 
        /* reset the height & origin of the rect that needs to show the pixbuf
@@ -464,11 +459,10 @@ FastMeter::set (float lvl, float peak)
 
        current_level = lvl;
 
-       if (current_level == old_level && current_peak == old_peak && hold_state == 0) {
+       if (current_level == old_level && current_peak == old_peak && (hold_state == 0 || peak != -1)) {
                return;
        }
 
-
        Glib::RefPtr<Gdk::Window> win;
 
        if ((win = get_window()) == 0) {
@@ -565,7 +559,6 @@ FastMeter::set_highlight (bool onoff)
        }
        highlight = onoff;
        bgpattern = request_vertical_background (request_width, pixheight, highlight ? _bgh : _bgc, highlight);
-       resized = true;
        queue_draw ();
 }
 
index debe6c1cc7749447390646c7a2ef229ab4f6cd4e..f065020a5788217709a5b072bf13327fdcec2ade 100644 (file)
@@ -91,7 +91,6 @@ private:
        float current_level;
        float current_peak;
        float current_user_level;
-       bool resized;
        bool highlight;
 
        bool vertical_expose (GdkEventExpose*);