summaryrefslogtreecommitdiff
path: root/libs/canvas/image.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/canvas/image.cc')
-rw-r--r--libs/canvas/image.cc14
1 files changed, 9 insertions, 5 deletions
diff --git a/libs/canvas/image.cc b/libs/canvas/image.cc
index 71a5df64dd..b13859aeda 100644
--- a/libs/canvas/image.cc
+++ b/libs/canvas/image.cc
@@ -36,7 +36,7 @@ void
Image::render (Rect const& area, Cairo::RefPtr<Cairo::Context> context) const
{
if (_need_render && _pending) {
- _surface = Cairo::ImageSurface::create (_pending->data.get(),
+ _surface = Cairo::ImageSurface::create (_pending->data,
_pending->format,
_pending->width,
_pending->height,
@@ -59,14 +59,18 @@ Image::compute_bounding_box () const
}
boost::shared_ptr<Image::Data>
-Image::get_image ()
+Image::get_image (bool allocate_data)
{
/* can be called by any thread */
int stride = Cairo::ImageSurface::format_stride_for_width (_format, _width);
- boost::shared_ptr<Data> d (new Data (boost::shared_array<uint8_t> (new uint8_t[stride*_height]), _width, _height, stride, _format));
-
- return d;
+ if (allocate_data) {
+ boost::shared_ptr<Data> d (new Data (new uint8_t[stride*_height], _width, _height, stride, _format));
+ return d;
+ } else {
+ boost::shared_ptr<Data> d (new Data (NULL, _width, _height, stride, _format));
+ return d;
+ }
}
void