diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2014-09-19 16:21:19 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2014-11-05 11:13:09 -0500 |
commit | 70e95f951dc58b2b1b2857956391e1cfc2ba27fc (patch) | |
tree | 819d218a233c37ed2fbd5f9d962b23e0718cf0c3 | |
parent | 4eac2a76da79de7fd72f0a8af51de2b14f23283d (diff) |
add ArdourCanvas::Fill::set_pattern() to allow any filled canvas item to be filled using an arbitrary Cairo Pattern
-rw-r--r-- | libs/canvas/canvas/fill.h | 4 | ||||
-rw-r--r-- | libs/canvas/fill.cc | 12 |
2 files changed, 15 insertions, 1 deletions
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<Cairo::Pattern>); + protected: void setup_fill_context (Cairo::RefPtr<Cairo::Context>) const; void setup_gradient_context (Cairo::RefPtr<Cairo::Context>, Rect const &, Duple const &) const; @@ -63,6 +65,8 @@ protected: bool _transparent; StopList _stops; bool _vertical_gradient; + Cairo::RefPtr<Cairo::Pattern> _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<Cairo::Context> context) const { - set_source_rgba (context, _fill_color); + if (_pattern) { + context->set_source (_pattern); + } else { + set_source_rgba (context, _fill_color); + } } void @@ -96,6 +100,12 @@ Fill::setup_gradient_context (Cairo::RefPtr<Cairo::Context> context, Rect const } void +Fill::set_pattern (Cairo::RefPtr<Cairo::Pattern> p) +{ + _pattern = p; +} + +void Fill::set_gradient (StopList const & stops, bool vertical) { _self.begin_visual_change (); |