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) {