summaryrefslogtreecommitdiffstats
path: root/gfx/cairo/cairo_qt_a8_fallback.diff
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/cairo/cairo_qt_a8_fallback.diff')
-rw-r--r--gfx/cairo/cairo_qt_a8_fallback.diff68
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);