13
0

minor peak-meter performance tweak

* redraw only missing parts of the outside rectangle,
* don't redraw RMS meter if value has not changed
This commit is contained in:
Robin Gareus 2013-07-12 17:56:42 +02:00
parent 2a0440a373
commit e0bbc0b435
2 changed files with 5 additions and 13 deletions

View 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 ();
}

View File

@ -91,7 +91,6 @@ private:
float current_level;
float current_peak;
float current_user_level;
bool resized;
bool highlight;
bool vertical_expose (GdkEventExpose*);