replace cairo_pattern with trunk implementation to remove missing rasters bug with cairo (referencing data_ after delete)
This commit is contained in:
parent
c14d063069
commit
9e0b15f814
1 changed files with 5 additions and 5 deletions
|
@ -58,7 +58,9 @@ namespace mapnik
|
||||||
const unsigned int *in_end = in_ptr + pixels;
|
const unsigned int *in_end = in_ptr + pixels;
|
||||||
unsigned int *out_ptr;
|
unsigned int *out_ptr;
|
||||||
|
|
||||||
out_ptr = data_ = new unsigned int[pixels];
|
surface_ = Cairo::ImageSurface::create(Cairo::FORMAT_ARGB32, data.width(), data.height());
|
||||||
|
|
||||||
|
out_ptr = reinterpret_cast<unsigned int *>(surface_->get_data());
|
||||||
|
|
||||||
while (in_ptr < in_end)
|
while (in_ptr < in_end)
|
||||||
{
|
{
|
||||||
|
@ -74,14 +76,13 @@ namespace mapnik
|
||||||
|
|
||||||
*out_ptr++ = (a << 24) | (r << 16) | (g << 8) | b;
|
*out_ptr++ = (a << 24) | (r << 16) | (g << 8) | b;
|
||||||
}
|
}
|
||||||
|
// mark the surface as dirty as we've modified it behind cairo's back
|
||||||
surface_ = Cairo::ImageSurface::create(reinterpret_cast<unsigned char *>(data_), Cairo::FORMAT_ARGB32, data.width(), data.height(), data.width() * 4);
|
surface_->mark_dirty();
|
||||||
pattern_ = Cairo::SurfacePattern::create(surface_);
|
pattern_ = Cairo::SurfacePattern::create(surface_);
|
||||||
}
|
}
|
||||||
|
|
||||||
~cairo_pattern(void)
|
~cairo_pattern(void)
|
||||||
{
|
{
|
||||||
delete [] data_;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_matrix(Cairo::Matrix const& matrix)
|
void set_matrix(Cairo::Matrix const& matrix)
|
||||||
|
@ -117,7 +118,6 @@ namespace mapnik
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
unsigned int *data_;
|
|
||||||
Cairo::RefPtr<Cairo::ImageSurface> surface_;
|
Cairo::RefPtr<Cairo::ImageSurface> surface_;
|
||||||
Cairo::RefPtr<Cairo::SurfacePattern> pattern_;
|
Cairo::RefPtr<Cairo::SurfacePattern> pattern_;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue