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