diff --git a/gtk2_ardour/cairo_widget.cc b/gtk2_ardour/cairo_widget.cc index d5dc846ee4..86c431cc60 100644 --- a/gtk2_ardour/cairo_widget.cc +++ b/gtk2_ardour/cairo_widget.cc @@ -25,7 +25,6 @@ CairoWidget::CairoWidget () , _height (1) , _active_state (CairoWidget::ActiveState (0)) , _visual_state (CairoWidget::VisualState (0)) - , _pixmap (0) , _dirty (true) { @@ -33,54 +32,16 @@ CairoWidget::CairoWidget () CairoWidget::~CairoWidget () { - if (_pixmap) { - g_object_unref (_pixmap); - } } bool -CairoWidget::on_expose_event (GdkEventExpose *event) +CairoWidget::on_expose_event (GdkEventExpose *ev) { - Gdk::Rectangle const exposure ( - event->area.x, event->area.y, event->area.width, event->area.height - ); - - Gdk::Rectangle r = exposure; - Gdk::Rectangle content (0, 0, _width, _height); - bool intersects; - r.intersect (content, intersects); - - if (intersects) { - - GdkDrawable* drawable = get_window()->gobj (); - - if (_dirty) { - - if (_pixmap) { - g_object_unref (_pixmap); - } - - _pixmap = gdk_pixmap_new (drawable, _width, _height, -1); - - cairo_t* cr = gdk_cairo_create (_pixmap); - render (cr); - cairo_destroy (cr); - - _dirty = false; - } - - gdk_draw_drawable ( - drawable, - get_style()->get_fg_gc (Gtk::STATE_NORMAL)->gobj(), - _pixmap, - r.get_x(), - r.get_y(), - r.get_x(), - r.get_y(), - r.get_width(), - r.get_height() - ); - } + cairo_t* cr = gdk_cairo_create (get_window ()->gobj()); + cairo_rectangle (cr, ev->area.x, ev->area.y, ev->area.width, ev->area.height); + cairo_clip (cr); + render (cr); + cairo_destroy (cr); return true; } @@ -93,8 +54,6 @@ void CairoWidget::set_dirty () { ENSURE_GUI_THREAD (*this, &CairoWidget::set_dirty) - - _dirty = true; queue_draw (); } diff --git a/gtk2_ardour/cairo_widget.h b/gtk2_ardour/cairo_widget.h index ff0533643b..65de9b5e31 100644 --- a/gtk2_ardour/cairo_widget.h +++ b/gtk2_ardour/cairo_widget.h @@ -22,9 +22,7 @@ #include -/** A parent class for widgets that are made up of a pixmap rendered using Cairo. - * The pixmap is painted to screen on GTK expose events, but the rendering - * is only done after set_dirty() has been called. +/** A parent class for widgets that are rendered using Cairo. */ class CairoWidget : public Gtk::EventBox