13
0

add ArdourCanvas::Fill::set_pattern() to allow any filled canvas item to be filled using an arbitrary Cairo Pattern

This commit is contained in:
Paul Davis 2014-09-19 16:21:19 -04:00
parent 4eac2a76da
commit 70e95f951d
2 changed files with 15 additions and 1 deletions

View File

@ -53,6 +53,8 @@ public:
void set_gradient (StopList const & stops, bool is_vertical); void set_gradient (StopList const & stops, bool is_vertical);
void set_pattern (Cairo::RefPtr<Cairo::Pattern>);
protected: protected:
void setup_fill_context (Cairo::RefPtr<Cairo::Context>) const; void setup_fill_context (Cairo::RefPtr<Cairo::Context>) const;
void setup_gradient_context (Cairo::RefPtr<Cairo::Context>, Rect const &, Duple const &) const; void setup_gradient_context (Cairo::RefPtr<Cairo::Context>, Rect const &, Duple const &) const;
@ -63,6 +65,8 @@ protected:
bool _transparent; bool _transparent;
StopList _stops; StopList _stops;
bool _vertical_gradient; bool _vertical_gradient;
Cairo::RefPtr<Cairo::Pattern> _pattern;
}; };
} }

View File

@ -72,7 +72,11 @@ Fill::set_fill (bool fill)
void void
Fill::setup_fill_context (Cairo::RefPtr<Cairo::Context> context) const 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 void
@ -95,6 +99,12 @@ Fill::setup_gradient_context (Cairo::RefPtr<Cairo::Context> context, Rect const
context->set_source (_gradient); context->set_source (_gradient);
} }
void
Fill::set_pattern (Cairo::RefPtr<Cairo::Pattern> p)
{
_pattern = p;
}
void void
Fill::set_gradient (StopList const & stops, bool vertical) Fill::set_gradient (StopList const & stops, bool vertical)
{ {