|
1 CAIRO_FORMAT_A8 not allowed for cairo-qt image backend |
|
2 diff --git a/gfx/cairo/cairo/src/cairo-qt-surface.cpp b/gfx/cairo/cairo/src/cairo-qt-surface.cpp |
|
3 --- a/gfx/cairo/cairo/src/cairo-qt-surface.cpp |
|
4 +++ b/gfx/cairo/cairo/src/cairo-qt-surface.cpp |
|
5 @@ -459,17 +459,17 @@ _cairo_qt_surface_finish (void *abstract |
|
6 { |
|
7 cairo_qt_surface_t *qs = (cairo_qt_surface_t *) abstract_surface; |
|
8 |
|
9 D(fprintf(stderr, "q[%p] finish\n", abstract_surface)); |
|
10 |
|
11 /* Only delete p if we created it */ |
|
12 if (qs->image || qs->pixmap) |
|
13 delete qs->p; |
|
14 - else |
|
15 + else if (qs->p) |
|
16 qs->p->restore (); |
|
17 |
|
18 if (qs->image_equiv) |
|
19 cairo_surface_destroy (qs->image_equiv); |
|
20 |
|
21 _cairo_surface_clipper_reset (&qs->clipper); |
|
22 |
|
23 if (qs->image) |
|
24 @@ -736,17 +736,17 @@ _cairo_qt_surface_set_clip_region (cairo |
|
25 } |
|
26 |
|
27 static cairo_int_status_t |
|
28 _cairo_qt_surface_set_clip (cairo_qt_surface_t *qs, |
|
29 cairo_clip_t *clip) |
|
30 { |
|
31 cairo_int_status_t status; |
|
32 |
|
33 - D(fprintf(stderr, "q[%p] intersect_clip_path %s\n", abstract_surface, path ? "(path)" : "(clear)")); |
|
34 + D(fprintf(stderr, "q[%p] intersect_clip_path %s\n", qs, clip ? "(path)" : "(clear)")); |
|
35 |
|
36 if (clip == NULL) { |
|
37 _cairo_surface_clipper_reset (&qs->clipper); |
|
38 // How the clip path is reset depends on whether we own p or not |
|
39 if (qs->pixmap || qs->image) { |
|
40 // we own p |
|
41 qs->p->setClipping (false); |
|
42 } else { |
|
43 @@ -1605,16 +1605,25 @@ cairo_qt_surface_create_with_qimage (cai |
|
44 |
|
45 _cairo_surface_init (&qs->base, |
|
46 &cairo_qt_surface_backend, |
|
47 _cairo_content_from_format (format)); |
|
48 |
|
49 _cairo_surface_clipper_init (&qs->clipper, |
|
50 _cairo_qt_surface_clipper_intersect_clip_path); |
|
51 |
|
52 + if (CAIRO_FORMAT_A8 == format) { |
|
53 + qs->image = NULL; |
|
54 + qs->image_equiv = cairo_image_surface_create(format, |
|
55 + width, height); |
|
56 + qs->p = NULL; |
|
57 + qs->supports_porter_duff = false; |
|
58 + qs->window = QRect(0, 0, width, height); |
|
59 + return &qs->base; |
|
60 + } |
|
61 |
|
62 QImage *image = new QImage (width, height, |
|
63 _qimage_format_from_cairo_format (format)); |
|
64 |
|
65 qs->image = image; |
|
66 |
|
67 if (!image->isNull()) { |
|
68 qs->p = new QPainter(image); |