1 #include "canvas/image.h"
3 #include "gtkmm2ext/gui_thread.h"
7 using namespace ArdourCanvas;
9 Image::Image (Group* group, Cairo::Format fmt, int width, int height)
14 , _need_render (false)
16 DataReady.connect (data_connections, MISSING_INVALIDATOR, boost::bind (&Image::accept_data, this), gui_context());
20 Image::render (Rect const& area, Cairo::RefPtr<Cairo::Context> context) const
23 _surface = Cairo::ImageSurface::create (_current->data.get(),
32 context->set_source (_surface, 0, 0);
33 context->rectangle (area.x0, area.y0, area.width(), area.height());
38 Image::compute_bounding_box () const
40 _bounding_box = boost::optional<Rect> (Rect (0, 0, _width, _height));
41 _bounding_box_dirty = false;
44 boost::shared_ptr<Image::Data>
47 int stride = Cairo::ImageSurface::format_stride_for_width (_format, _width);
48 boost::shared_ptr<Data> d (new Data (boost::shared_array<uint8_t> (new uint8_t[stride*_height]), _width, _height, stride, _format));
54 Image::put_image (boost::shared_ptr<Data> d)
57 DataReady (); /* EMIT SIGNAL */
63 /* must be executed in gui thread */
70 Image::get_state () const
73 return new XMLNode ("Image");
77 Image::set_state (XMLNode const * /*node*/)