summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2014-09-19 16:21:19 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2014-11-05 11:13:09 -0500
commit70e95f951dc58b2b1b2857956391e1cfc2ba27fc (patch)
tree819d218a233c37ed2fbd5f9d962b23e0718cf0c3
parent4eac2a76da79de7fd72f0a8af51de2b14f23283d (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.h4
-rw-r--r--libs/canvas/fill.cc12
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 ();