partially revert 30b087ab3, CoreAudio SDK uses "Frames"
[ardour.git] / libs / canvas / fill.cc
index 42bcbfff3ccff2c82f0cf601e21af6d1cbf502d5..32af6bd74b740ac7985fc133de94e3fe17888177 100644 (file)
 
 #include <cairomm/cairomm.h>
 
-#include "ardour/utils.h"
-
 #include "pbd/compose.h"
 #include "pbd/convert.h"
 
 #include "canvas/fill.h"
 #include "canvas/item.h"
 #include "canvas/types.h"
-#include "canvas/utils.h"
 
 using namespace std;
 using namespace ArdourCanvas;
@@ -41,14 +38,14 @@ Fill::Fill (Item& self)
 }
 
 void
-Fill::set_fill_color (Color color)
+Fill::set_fill_color (Gtkmm2ext::Color color)
 {
        if (_fill_color != color) {
                _self.begin_visual_change ();
                _fill_color = color;
 
                double r, g, b, a;
-               color_to_rgba (color, r, g, b, a);
+               Gtkmm2ext::color_to_rgba (color, r, g, b, a);
                if (a == 0.0) {
                        _transparent = true;
                } else {
@@ -72,29 +69,39 @@ 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 {
+                                       Gtkmm2ext::set_source_rgba (context, _fill_color);
+        }
 }
 
 void
 Fill::setup_gradient_context (Cairo::RefPtr<Cairo::Context> context, Rect const & self, Duple const & draw_origin) const
 {
        Cairo::RefPtr<Cairo::LinearGradient> _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);
+               Gtkmm2ext::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<Cairo::Pattern> p)
+{
+        _pattern = p;
+}
+
 void
 Fill::set_gradient (StopList const & stops, bool vertical)
 {