already_AddRefed<gfxImageSurface> gfxQuartzSurface::GetAsImageSurface() { cairo_surface_t *surface = cairo_quartz_surface_get_image(mSurface); if (!surface) return nsnull; nsRefPtr<gfxASurface> img = Wrap(surface); // cairo_quartz_surface_get_image returns a referenced image, and thebes // shares the refcounts of Cairo surfaces. However, Wrap also adds a // reference to the image. We need to remove one of these references // explicitly so we don't leak. gfxImageSurface* imgSurface = static_cast<gfxImageSurface*> (img.forget().get()); imgSurface->Release(); return imgSurface; }
already_AddRefed<gfxImageSurface> gfxQuartzSurface::GetAsImageSurface() { cairo_surface_t *surface = cairo_quartz_surface_get_image(mSurface); if (!surface || cairo_surface_status(surface)) return nullptr; nsRefPtr<gfxASurface> img = Wrap(surface); // cairo_quartz_surface_get_image returns a referenced image, and thebes // shares the refcounts of Cairo surfaces. However, Wrap also adds a // reference to the image. We need to remove one of these references // explicitly so we don't leak. img->Release(); img->SetOpaqueRect(GetOpaqueRect()); return img.forget().downcast<gfxImageSurface>(); }