summaryrefslogtreecommitdiff
path: root/gtk2_ardour/cairo_widget.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2011-10-27 20:24:29 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2011-10-27 20:24:29 +0000
commitb02ebd72a56c180073d93c332263550543b85eeb (patch)
tree14179ca49ce150e932b7086f0cda09ecfccca5ae /gtk2_ardour/cairo_widget.cc
parent743f0ea0ecaa44204abed163187f3335894dcda1 (diff)
remove offscreen pixmap rendering design from CairoWidget: this helps only when widgets are partially re-exposed due to WM-level operations, which is relatively rare compared to the update frequency for various things that this widget will be used for. Plus, in GTK3, the need for this widget will mostly go away, and we'd like to be as close to the GTK3 model as possible
git-svn-id: svn://localhost/ardour2/branches/3.0@10317 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/cairo_widget.cc')
-rw-r--r--gtk2_ardour/cairo_widget.cc53
1 files changed, 6 insertions, 47 deletions
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 ();
}