michael@0: CAIRO_FORMAT_A8 not allowed for cairo-qt image backend michael@0: diff --git a/gfx/cairo/cairo/src/cairo-qt-surface.cpp b/gfx/cairo/cairo/src/cairo-qt-surface.cpp michael@0: --- a/gfx/cairo/cairo/src/cairo-qt-surface.cpp michael@0: +++ b/gfx/cairo/cairo/src/cairo-qt-surface.cpp michael@0: @@ -459,17 +459,17 @@ _cairo_qt_surface_finish (void *abstract michael@0: { michael@0: cairo_qt_surface_t *qs = (cairo_qt_surface_t *) abstract_surface; michael@0: michael@0: D(fprintf(stderr, "q[%p] finish\n", abstract_surface)); michael@0: michael@0: /* Only delete p if we created it */ michael@0: if (qs->image || qs->pixmap) michael@0: delete qs->p; michael@0: - else michael@0: + else if (qs->p) michael@0: qs->p->restore (); michael@0: michael@0: if (qs->image_equiv) michael@0: cairo_surface_destroy (qs->image_equiv); michael@0: michael@0: _cairo_surface_clipper_reset (&qs->clipper); michael@0: michael@0: if (qs->image) michael@0: @@ -736,17 +736,17 @@ _cairo_qt_surface_set_clip_region (cairo michael@0: } michael@0: michael@0: static cairo_int_status_t michael@0: _cairo_qt_surface_set_clip (cairo_qt_surface_t *qs, michael@0: cairo_clip_t *clip) michael@0: { michael@0: cairo_int_status_t status; michael@0: michael@0: - D(fprintf(stderr, "q[%p] intersect_clip_path %s\n", abstract_surface, path ? "(path)" : "(clear)")); michael@0: + D(fprintf(stderr, "q[%p] intersect_clip_path %s\n", qs, clip ? "(path)" : "(clear)")); michael@0: michael@0: if (clip == NULL) { michael@0: _cairo_surface_clipper_reset (&qs->clipper); michael@0: // How the clip path is reset depends on whether we own p or not michael@0: if (qs->pixmap || qs->image) { michael@0: // we own p michael@0: qs->p->setClipping (false); michael@0: } else { michael@0: @@ -1605,16 +1605,25 @@ cairo_qt_surface_create_with_qimage (cai michael@0: michael@0: _cairo_surface_init (&qs->base, michael@0: &cairo_qt_surface_backend, michael@0: _cairo_content_from_format (format)); michael@0: michael@0: _cairo_surface_clipper_init (&qs->clipper, michael@0: _cairo_qt_surface_clipper_intersect_clip_path); michael@0: michael@0: + if (CAIRO_FORMAT_A8 == format) { michael@0: + qs->image = NULL; michael@0: + qs->image_equiv = cairo_image_surface_create(format, michael@0: + width, height); michael@0: + qs->p = NULL; michael@0: + qs->supports_porter_duff = false; michael@0: + qs->window = QRect(0, 0, width, height); michael@0: + return &qs->base; michael@0: + } michael@0: michael@0: QImage *image = new QImage (width, height, michael@0: _qimage_format_from_cairo_format (format)); michael@0: michael@0: qs->image = image; michael@0: michael@0: if (!image->isNull()) { michael@0: qs->p = new QPainter(image);