X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fcanvas%2Ffill.cc;h=42fe1556846857959c05c67efcf18c006bfeb182;hb=5ed764178a7ff43d30ced21ffa8d5f36c64074c8;hp=42bcbfff3ccff2c82f0cf601e21af6d1cbf502d5;hpb=590882f3c8e063528452d71daffb36d3151da05e;p=ardour.git diff --git a/libs/canvas/fill.cc b/libs/canvas/fill.cc index 42bcbfff3c..42fe155684 100644 --- a/libs/canvas/fill.cc +++ b/libs/canvas/fill.cc @@ -28,6 +28,7 @@ #include "canvas/item.h" #include "canvas/types.h" #include "canvas/utils.h" +#include "canvas/colors.h" using namespace std; using namespace ArdourCanvas; @@ -72,29 +73,39 @@ 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 Fill::setup_gradient_context (Cairo::RefPtr context, Rect const & self, Duple const & draw_origin) const { Cairo::RefPtr _gradient; - + if (_vertical_gradient) { _gradient = Cairo::LinearGradient::create (draw_origin.x, self.y0, draw_origin.x, self.y1); } else { _gradient = Cairo::LinearGradient::create (self.x0, draw_origin.y, self.x1, draw_origin.y); } - + for (StopList::const_iterator s = _stops.begin(); s != _stops.end(); ++s) { double r, g, b, a; color_to_rgba (s->second, r, g, b, a); _gradient->add_color_stop_rgba (s->first, r, g, b, a); } - + context->set_source (_gradient); } +void +Fill::set_pattern (Cairo::RefPtr p) +{ + _pattern = p; +} + void Fill::set_gradient (StopList const & stops, bool vertical) {