Towards a consistent render() API.
authorRobin Gareus <robin@gareus.org>
Mon, 20 Mar 2017 16:11:56 +0000 (17:11 +0100)
committerRobin Gareus <robin@gareus.org>
Mon, 20 Mar 2017 16:12:08 +0000 (17:12 +0100)
This fixes an -Woverloaded-virtual ambiguity introduced in b5e613d45

  void render (cairo_t*, cairo_rectagle*)
  void render (Cairo::RefPtr<Cairo::Context> const&, cairo_rectangle_t*)

ArdourCanvas prefers cairomm and CairoWidget itself uses Cairo::Context,
this improves overall API consistency.

30 files changed:
gtk2_ardour/ardour_button.cc
gtk2_ardour/ardour_button.h
gtk2_ardour/ardour_knob.cc
gtk2_ardour/ardour_knob.h
gtk2_ardour/ardour_spacer.h
gtk2_ardour/audio_clock.cc
gtk2_ardour/audio_clock.h
gtk2_ardour/button_joiner.cc
gtk2_ardour/button_joiner.h
gtk2_ardour/editor_summary.cc
gtk2_ardour/editor_summary.h
gtk2_ardour/export_report.h
gtk2_ardour/group_tabs.cc
gtk2_ardour/group_tabs.h
gtk2_ardour/led.cc
gtk2_ardour/led.h
gtk2_ardour/mini_timeline.cc
gtk2_ardour/mini_timeline.h
gtk2_ardour/shuttle_control.cc
gtk2_ardour/shuttle_control.h
libs/canvas/widget.cc
libs/gtkmm2ext/cairo_widget.cc
libs/gtkmm2ext/fader.cc
libs/gtkmm2ext/fastmeter.cc
libs/gtkmm2ext/gtkmm2ext/cairo_widget.h
libs/gtkmm2ext/gtkmm2ext/fader.h
libs/gtkmm2ext/gtkmm2ext/fastmeter.h
libs/gtkmm2ext/gtkmm2ext/pixfader.h
libs/gtkmm2ext/pixfader.cc
libs/gtkmm2ext/waves_fastmeter.cc

index 21330014a535edb1e4b98931762271a5ab046b7e..98c54e409f2ab9311303e0e5445168679dde483f 100644 (file)
@@ -44,7 +44,6 @@
 #define BASELINESTRETCH (1.25)
 #define TRACKHEADERBTNW (3.10)
 
-using namespace Gdk;
 using namespace Gtk;
 using namespace Glib;
 using namespace PBD;
@@ -256,8 +255,10 @@ ArdourButton::set_alignment (const float xa, const float ya)
  * ARDOUR_UI_UTILS::render_vector_icon()
  */
 void
-ArdourButton::render (cairo_t* cr, cairo_rectangle_t *)
+ArdourButton::render (Cairo::RefPtr<Cairo::Context> const& ctx, cairo_rectangle_t*)
 {
+       cairo_t* cr = ctx->cobj();
+
        uint32_t text_color;
        uint32_t led_color;
 
index ddee6ce8d4ae8de3a98c02d7a05b50542dbaaf06..edccfd209fd659aa0a35d9cb03b5c8e192823b34 100644 (file)
@@ -127,7 +127,7 @@ class ArdourButton : public CairoWidget , public Gtkmm2ext::Activatable
        float char_avg_pixel_width() { if (_char_pixel_width < 1) recalc_char_pixel_geometry() ; return _char_avg_pixel_width; }
 
        protected:
-       void render (cairo_t *, cairo_rectangle_t *);
+       void render (Cairo::RefPtr<Cairo::Context> const&, cairo_rectangle_t*);
        void on_size_request (Gtk::Requisition* req);
        void on_size_allocate (Gtk::Allocation&);
        void on_style_changed (const Glib::RefPtr<Gtk::Style>&);
index cf9eaced57a5def2ad0df9e0ae7dbc367e99934f..dbea277a1bd937712b17110a69e61250451e5f12 100644 (file)
@@ -46,7 +46,6 @@
 #include "pbd/i18n.h"
 
 using namespace Gtkmm2ext;
-using namespace Gdk;
 using namespace Gtk;
 using namespace Glib;
 using namespace PBD;
@@ -79,8 +78,9 @@ ArdourKnob::~ArdourKnob()
 }
 
 void
-ArdourKnob::render (cairo_t* cr, cairo_rectangle_t *)
+ArdourKnob::render (Cairo::RefPtr<Cairo::Context> const& ctx, cairo_rectangle_t*)
 {
+       cairo_t* cr = ctx->cobj();
        cairo_pattern_t* shade_pattern;
 
        float width = get_width();
index ede200f4b1a9ec6e83f880f18058519f29f20a1e..689c5fb67b77f29d4a786274a2cf900c38a0d58b 100644 (file)
@@ -91,7 +91,7 @@ public:
        void color_handler ();
 
   protected:
-       void render (cairo_t *, cairo_rectangle_t *);
+       void render (Cairo::RefPtr<Cairo::Context> const&, cairo_rectangle_t*);
        void on_size_request (Gtk::Requisition* req);
        void on_size_allocate (Gtk::Allocation&);
        void on_style_changed (const Glib::RefPtr<Gtk::Style>&);
index b2fdd56a34bdf861b14a21fe7f7163bd3ea1629b..28d2f1c3789462bd2a4487f525ec1c39b6641ca6 100644 (file)
@@ -27,12 +27,12 @@ public:
        ArdourVSpacer (float r = 0.75f) : CairoWidget (), ratio (r) {}
 
 protected:
-       void render (cairo_t* cr, cairo_rectangle_t* r) {
+       void render (Cairo::RefPtr<Cairo::Context> const& ctx, cairo_rectangle_t* r) {
                float h = r->height * ratio;
                float t = .5f * (r->height - h);
-               cairo_rectangle (cr, 0, t, 1, h);
-               cairo_set_source_rgb (cr, 0, 0, 0);
-               cairo_fill (cr);
+               ctx->rectangle (0, t, 1, h);
+               ctx->set_source_rgb (0, 0, 0);
+               ctx->fill ();
        }
 
        void on_size_request (Gtk::Requisition* req) {
index b21d32720177d47b6de6cb4724fca568886ff662..70d5b3a7135be7bc80f1ad373418fd781d03eb0d 100644 (file)
@@ -275,8 +275,9 @@ AudioClock::set_scale (double x, double y)
 }
 
 void
-AudioClock::render (cairo_t* cr, cairo_rectangle_t*)
+AudioClock::render (Cairo::RefPtr<Cairo::Context> const& ctx, cairo_rectangle_t*)
 {
+       cairo_t* cr = ctx->cobj();
        /* main layout: rounded rect, plus the text */
 
        if (_need_bg) {
index 6b8c31d5ad39db26f66f84d84d5360c1504d8293..3336f9e2bdb3b2a4829efd9295c3793f1de983ba 100644 (file)
@@ -102,7 +102,7 @@ class AudioClock : public CairoWidget, public ARDOUR::SessionHandlePtr
        static std::vector<AudioClock*> clocks;
 
        protected:
-       void render (cairo_t*, cairo_rectangle_t*);
+       void render (Cairo::RefPtr<Cairo::Context> const&, cairo_rectangle_t*);
        bool get_is_duration () const { return is_duration; } ;
 
        virtual void build_ops_menu ();
index a3ef36ac80327bd17bdc6a9ce612ef98cc1a6ca8..eaa22363aad7b6e2639d701dadcd720dfdd6b9c5 100644 (file)
@@ -101,8 +101,9 @@ ButtonJoiner::~ButtonJoiner ()
 }
 
 void
-ButtonJoiner::render (cairo_t* cr, cairo_rectangle_t*)
+ButtonJoiner::render (Cairo::RefPtr<Cairo::Context> const& ctx, cairo_rectangle_t*)
 {
+       cairo_t* cr = ctx->cobj();
        double h = get_height();
 
        if (!get_active()) {
index 41e5f745c0ef26e0dce68e36e0b3a3d7e55742ab..1010ea1c4631978c9ccf2b383377b8e946dcf130 100644 (file)
@@ -36,7 +36,7 @@ class ButtonJoiner : public CairoWidget, public Gtkmm2ext::Activatable {
        void set_active_state (Gtkmm2ext::ActiveState);
 
   protected:
-       void render (cairo_t*, cairo_rectangle_t*);
+       void render (Cairo::RefPtr<Cairo::Context> const&, cairo_rectangle_t*);
        bool on_button_release_event (GdkEventButton*);
        void on_size_request (Gtk::Requisition*);
        void on_size_allocate (Gtk::Allocation&);
index 66e387299bc57f17351e8b2ff86e7620f1ceffc9..4a238259efce0a711da272f5c489e2f526df71af 100644 (file)
@@ -211,8 +211,9 @@ EditorSummary::render_background_image ()
  *  @param cr Context.
  */
 void
-EditorSummary::render (cairo_t* cr, cairo_rectangle_t*)
+EditorSummary::render (Cairo::RefPtr<Cairo::Context> const& ctx, cairo_rectangle_t*)
 {
+       cairo_t* cr = ctx->cobj();
 
        if (_session == 0) {
                return;
index 4fb406a9abac93a5db86732419509b72128890d6..48b1ab9378023fac60b605a1415e658cb030441e 100644 (file)
@@ -73,7 +73,7 @@ private:
         bool on_leave_notify_event (GdkEventCrossing*);
 
        void centre_on_click (GdkEventButton *);
-       void render (cairo_t *, cairo_rectangle_t*);
+       void render (Cairo::RefPtr<Cairo::Context> const&, cairo_rectangle_t*);
        void render_region (RegionView*, cairo_t*, double) const;
        void get_editor (std::pair<double, double> *, std::pair<double, double> *) const;
        void set_editor (double, double);
index 65339be701d32a37c449553f650afedb879a6cea..4639cafc447fe01950a44aa1fe1a72baa1b6dddd 100644 (file)
@@ -46,12 +46,12 @@ protected:
 
        virtual void overlay (cairo_t* cr, cairo_rectangle_t* r) {}
 
-       virtual void render (cairo_t* cr, cairo_rectangle_t* r)
+       virtual void render (Cairo::RefPtr<Cairo::Context> const& ctx, cairo_rectangle_t* r)
        {
-               cairo_rectangle (cr, r->x, r->y, r->width, r->height);
-               cairo_clip (cr);
-               background (cr, r);
-               overlay (cr, r);
+               ctx->rectangle (r->x, r->y, r->width, r->height);
+               ctx->clip ();
+               background (ctx->cobj(), r);
+               overlay (ctx->cobj(), r);
        }
 
        Cairo::RefPtr<Cairo::ImageSurface> _surface;
index 85a4dc8d200cc92937d5d7cc9ed4661f4493effb..ef012935750974111f88470a5e9cec8efadabfea 100644 (file)
@@ -241,8 +241,9 @@ GroupTabs::on_button_release_event (GdkEventButton*)
 }
 
 void
-GroupTabs::render (cairo_t* cr, cairo_rectangle_t*)
+GroupTabs::render (Cairo::RefPtr<Cairo::Context> const& ctx, cairo_rectangle_t*)
 {
+       cairo_t* cr = ctx->cobj();
        if (_dragging == 0) {
                _tabs = compute_tabs ();
        }
index eadc19cc6cf0b4b47b8c0edda6a70b7c816f262e..c635cff8259a4830cd95fd46186ba210e9eaa2b6 100644 (file)
@@ -115,7 +115,7 @@ private:
        void disable_all ();
        void remove_group (ARDOUR::RouteGroup *);
 
-       void render (cairo_t *, cairo_rectangle_t*);
+       void render (Cairo::RefPtr<Cairo::Context> const&, cairo_rectangle_t*);
        void on_size_request (Gtk::Requisition *);
        bool on_button_press_event (GdkEventButton *);
        bool on_motion_notify_event (GdkEventMotion *);
index dca5caefc153a6f8c380f32846b559e8591a5d59..6112f9c429547f76a48892a77ae1a634d4da4a52 100644 (file)
@@ -42,8 +42,9 @@ LED::~LED()
 }
 
 void
-LED::render (cairo_t* cr, cairo_rectangle_t*)
+LED::render (Cairo::RefPtr<Cairo::Context> const& ctx, cairo_rectangle_t*)
 {
+       cairo_t* cr = ctx->cobj();
        if (!_fixed_diameter) {
                _diameter = std::min (get_width(), get_height());
        }
index ef5ae7b68df8c5ac708b2a0ecd433b410ff028b5..67f4a9bb3c08456fd5cf0d5dbe46ddf97d1d9622 100644 (file)
@@ -33,7 +33,7 @@ class LED : public CairoWidget
        void set_diameter (float);
 
   protected:
-       void render (cairo_t *, cairo_rectangle_t*);
+       void render (Cairo::RefPtr<Cairo::Context> const&, cairo_rectangle_t*);
        void on_size_request (Gtk::Requisition* req);
        void on_realize ();
 
index 09506066f8fd7ac682344d72dbbb2364ab96e4b6..28fbe0f4a58138487957ac28a0040b7056bd8c3a 100644 (file)
@@ -405,8 +405,9 @@ struct LocationMarkerSort {
 };
 
 void
-MiniTimeline::render (cairo_t* cr, cairo_rectangle_t*)
+MiniTimeline::render (Cairo::RefPtr<Cairo::Context> const& ctx, cairo_rectangle_t*)
 {
+       cairo_t* cr = ctx->cobj();
        // TODO cache, set_colors()
        ArdourCanvas::Color base = UIConfiguration::instance().color ("ruler base");
        ArdourCanvas::Color text = UIConfiguration::instance().color ("ruler text");
index c6dea5326b5e1cf67ca8cf75f8c98133fc287f41..42d41ddd818f417bfb2fb002f3434af8f98eb336 100644 (file)
@@ -67,7 +67,7 @@ private:
        void draw_dots (cairo_t*, int left, int right, int y, ArdourCanvas::Color);
        int  draw_mark (cairo_t*, int x0, int x1, const std::string&, bool& prelight);
 
-       void render (cairo_t*, cairo_rectangle_t*);
+       void render (Cairo::RefPtr<Cairo::Context> const&, cairo_rectangle_t*);
        void format_time (framepos_t when);
 
        bool on_button_press_event (GdkEventButton*);
index 010ac2d11941ea8027197f83179e922a44f3fa2c..d4936098d0149f6e26a1e821e73b66cf34ca30b7 100644 (file)
@@ -570,8 +570,9 @@ ShuttleControl::set_colors ()
 }
 
 void
-ShuttleControl::render (cairo_t* cr, cairo_rectangle_t*)
+ShuttleControl::render (Cairo::RefPtr<Cairo::Context> const& ctx, cairo_rectangle_t*)
 {
+       cairo_t* cr = ctx->cobj();
        // center slider line
        float yc = get_height() / 2;
        float lw = 3;
index 62a55ab8467a4d91418c77ee723383279f74ed8e..f7d3bd360175399fef0fbbdbe4275c60aa8a90df 100644 (file)
@@ -93,7 +93,7 @@ protected:
        bool on_scroll_event (GdkEventScroll*);
        bool on_motion_notify_event(GdkEventMotion*);
 
-       void render (cairo_t *, cairo_rectangle_t*);
+       void render (Cairo::RefPtr<Cairo::Context> const&, cairo_rectangle_t*);
 
        void on_size_allocate (Gtk::Allocation&);
        bool on_query_tooltip (int, int, bool, const Glib::RefPtr<Gtk::Tooltip>&);
index 4c98d6651d1ff302c7e60d5d38e26a70fc5e7ec5..5968de5fbbe8d9f32495bdff81d556772cb44e66 100644 (file)
@@ -104,7 +104,7 @@ Widget::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) const
        //context->rectangle (draw.x0, draw.y0, draw.width(), draw.height());
        //context->clip ();
 
-       _widget.render (context->cobj(), &crect);
+       _widget.render (context, &crect);
 
        context->restore ();
 }
index 088e21b6a876b95fefd0061cdcf703faab623b3f..d06f07ced29c45c67a9a36936e030bc2ea1b760f 100644 (file)
@@ -195,7 +195,7 @@ CairoWidget::on_expose_event (GdkEventExpose *ev)
         cr->fill ();
     }
 
-       render (cr->cobj(), &expose_area);
+       render (cr, &expose_area);
 
 #ifdef USE_CAIRO_IMAGE_SURFACE_FOR_CAIRO_WIDGET
        if(get_visible_window ()) {
@@ -283,7 +283,7 @@ CairoWidget::on_expose_event (GdkEventExpose *ev)
        expose_area.width = ev->area.width;
        expose_area.height = ev->area.height;
 
-       render (cr->cobj(), &expose_area);
+       render (cr, &expose_area);
 
 #ifdef OPTIONAL_CAIRO_IMAGE_SURFACE
        if (getenv("ARDOUR_IMAGE_SURFACE")) {
index f6fe487ed1e17e613c4b3ffe7a526861bf284fa0..899e0a886fda0d12374df89a6087c76134b748f0 100644 (file)
@@ -184,8 +184,9 @@ Fader::set_touch_cursor (const Glib::RefPtr<Gdk::Pixbuf>& touch_cursor)
 }
 
 void
-Fader::render (cairo_t* cr, cairo_rectangle_t*)
+Fader::render (Cairo::RefPtr<Cairo::Context> const& ctx, cairo_rectangle_t*)
 {
+       cairo_t* cr = ctx->cobj();
 
        double xscale = 1.0;
        double yscale = 1.0;
index f3928910bca7de037c783fdb4e19535ccbb69886..c2275eab9f6da67141618170a2de2c961ff3d9f3 100644 (file)
@@ -544,12 +544,12 @@ FastMeter::horizontal_size_allocate (Gtk::Allocation &alloc)
 }
 
 void
-FastMeter::render (cairo_t* cr, cairo_rectangle_t* area)
+FastMeter::render (Cairo::RefPtr<Cairo::Context> const& ctx, cairo_rectangle_t* area)
 {
        if (orientation == Vertical) {
-               return vertical_expose (cr, area);
+               return vertical_expose (ctx->cobj(), area);
        } else {
-               return horizontal_expose (cr, area);
+               return horizontal_expose (ctx->cobj(), area);
        }
 }
 
index 3b8fc545a9e533e76b2d01a0d0a6cb560c9d2ee8..6d8c1f5d55ce960be514fc15000dce26f7b676f8 100644 (file)
@@ -20,6 +20,7 @@
 #ifndef __gtk2_ardour_cairo_widget_h__
 #define __gtk2_ardour_cairo_widget_h__
 
+#include <cairomm/context.h>
 #include <cairomm/surface.h>
 #include <gtkmm/eventbox.h>
 
@@ -81,12 +82,6 @@ public:
 
        static void provide_background_for_cairo_widget (Gtk::Widget& w, const Gdk::Color& bg);
 
-       virtual void render (cairo_t *, cairo_rectangle_t*) = 0;
-
-       virtual void render (Cairo::RefPtr<Cairo::Context> const & ctx, cairo_rectangle_t* r) {
-               render (ctx->cobj(), r);
-       }
-
        uint32_t background_color ();
 
        static void set_flat_buttons (bool yn);
index e82771901c32620ddc8da65293371b8e94d58bc3..ec6df5384bc6fd11aac404b5bc98c11ec3fc7dec 100644 (file)
@@ -62,7 +62,7 @@ class LIBGTKMM2EXT_API Fader : public CairoWidget
        void on_size_request (GtkRequisition*);
        void on_size_allocate (Gtk::Allocation& alloc);
 
-       void render (cairo_t* cr, cairo_rectangle_t*);
+       void render (Cairo::RefPtr<Cairo::Context> const&, cairo_rectangle_t*);
        bool on_button_press_event (GdkEventButton*);
        bool on_button_release_event (GdkEventButton*);
        bool on_motion_notify_event (GdkEventMotion*);
index dbb3296c4653fe30c0d0844d7f3bc980d3edc134..7b71289d3ed437e349160559b1ac23fcd29196da 100644 (file)
@@ -65,9 +65,9 @@ class LIBGTKMM2EXT_API FastMeter : public CairoWidget {
        void set_hold_count (long);
        void set_highlight (bool);
        bool get_highlight () { return highlight; }
+       void render (Cairo::RefPtr<Cairo::Context> const&, cairo_rectangle_t*);
 
 protected:
-       void render (cairo_t *, cairo_rectangle_t*);
        void on_size_request (GtkRequisition*);
        void on_size_allocate (Gtk::Allocation&);
 private:
index c5ed9c585c6a07bd3d30b072c9005ad80802dfcc..5454ac53bed6baa639dec31d64d7b21f1cad1059 100644 (file)
@@ -58,7 +58,7 @@ class LIBGTKMM2EXT_API PixFader : public CairoWidget
        void on_size_request (GtkRequisition*);
        void on_size_allocate (Gtk::Allocation& alloc);
 
-       void render (cairo_t *, cairo_rectangle_t*);
+       void render (Cairo::RefPtr<Cairo::Context> const&, cairo_rectangle_t*);
        bool on_grab_broken_event (GdkEventGrabBroken*);
        bool on_button_press_event (GdkEventButton*);
        bool on_button_release_event (GdkEventButton*);
index 64ee449646e5f310d824258bccd61a29d6150933..23510e824eb3784f4b1c2b9fec00ff6ea950fad8 100644 (file)
@@ -205,8 +205,10 @@ PixFader::create_patterns ()
 }
 
 void
-PixFader::render (cairo_t *cr, cairo_rectangle_t* area)
+PixFader::render (Cairo::RefPtr<Cairo::Context> const& ctx, cairo_rectangle_t* area)
 {
+       cairo_t* cr = ctx->cobj();
+
        if (!_pattern) {
                create_patterns();
        }
index e6b973b13025826cbfaa709fd318654727a8cbd4..f290e6ce64aa68c12b2f7b7e0f5744d17d81eefd 100644 (file)
@@ -542,12 +542,12 @@ FastMeter::horizontal_size_allocate (Gtk::Allocation &alloc)
 }
 
 void
-FastMeter::render (cairo_t* cr, cairo_rectangle_t* area)
+FastMeter::render (Cairo::RefPtr<Cairo::Context> const& ctx, cairo_rectangle_t* area)
 {
        if (orientation == Vertical) {
-               return vertical_expose (cr, area);
+               return vertical_expose (cr->cobj(), area);
        } else {
-               return horizontal_expose (cr, area);
+               return horizontal_expose (cr->cobj(), area);
        }
 }