summaryrefslogtreecommitdiff
path: root/libs/canvas/fill.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/canvas/fill.cc')
-rw-r--r--libs/canvas/fill.cc28
1 files changed, 27 insertions, 1 deletions
diff --git a/libs/canvas/fill.cc b/libs/canvas/fill.cc
index da475a9881..339549f8be 100644
--- a/libs/canvas/fill.cc
+++ b/libs/canvas/fill.cc
@@ -59,5 +59,31 @@ Fill::set_fill (bool fill)
void
Fill::setup_fill_context (Cairo::RefPtr<Cairo::Context> context) const
{
- set_source_rgba (context, _fill_color);
+ if (_gradient) {
+ context->set_source (_gradient);
+ } else {
+ set_source_rgba (context, _fill_color);
+ }
+}
+
+void
+Fill::set_gradient (StopList const & stops, double height)
+{
+ begin_visual_change ();
+
+ if (stops.empty()) {
+ _gradient.clear();
+ } else {
+
+ double r, g, b, a;
+
+ _gradient = Cairo::LinearGradient::create (0, 0, 0, height);
+
+ for (StopList::const_iterator s = stops.begin(); s != stops.end(); ++s) {
+ color_to_rgba (s->second, r, g, b, a);
+ _gradient->add_color_stop_rgba (s->first, r, g, b, a);
+ }
+ }
+
+ end_visual_change ();
}