From 70e95f951dc58b2b1b2857956391e1cfc2ba27fc Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 19 Sep 2014 16:21:19 -0400 Subject: [PATCH] add ArdourCanvas::Fill::set_pattern() to allow any filled canvas item to be filled using an arbitrary Cairo Pattern --- libs/canvas/canvas/fill.h | 4 ++++ libs/canvas/fill.cc | 12 +++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/libs/canvas/canvas/fill.h b/libs/canvas/canvas/fill.h index a4a36eb345..9eddeec6b6 100644 --- a/libs/canvas/canvas/fill.h +++ b/libs/canvas/canvas/fill.h @@ -53,6 +53,8 @@ public: void set_gradient (StopList const & stops, bool is_vertical); + void set_pattern (Cairo::RefPtr); + protected: void setup_fill_context (Cairo::RefPtr) const; void setup_gradient_context (Cairo::RefPtr, Rect const &, Duple const &) const; @@ -63,6 +65,8 @@ protected: bool _transparent; StopList _stops; bool _vertical_gradient; + Cairo::RefPtr _pattern; + }; } diff --git a/libs/canvas/fill.cc b/libs/canvas/fill.cc index 42bcbfff3c..9c93523e51 100644 --- a/libs/canvas/fill.cc +++ b/libs/canvas/fill.cc @@ -72,7 +72,11 @@ Fill::set_fill (bool fill) void Fill::setup_fill_context (Cairo::RefPtr context) const { - set_source_rgba (context, _fill_color); + if (_pattern) { + context->set_source (_pattern); + } else { + set_source_rgba (context, _fill_color); + } } void @@ -95,6 +99,12 @@ Fill::setup_gradient_context (Cairo::RefPtr context, Rect const context->set_source (_gradient); } +void +Fill::set_pattern (Cairo::RefPtr p) +{ + _pattern = p; +} + void Fill::set_gradient (StopList const & stops, bool vertical) {