Commit graph

6538 commits

Author SHA1 Message Date
Chris Wilson
99fa5ff6c2 snapshot: Defer acquisition
Fixes 'xlib-expose-event' but triggers an infinite loop in self-copy.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-14 12:37:56 +01:00
Adrian Johnson
79aa04fd50 ps: use deflate compression for ps level 3 2011-08-14 19:19:34 +09:30
Chris Wilson
0f4cc1f118 script: Emit sequences of boxes to as 'rectangle' for clarity
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-13 20:54:24 +01:00
Chris Wilson
bc34c1c4ef Add missing 'cairo-image-surface-private.h'
It was supposed to be the centre point of e849e7c92, but I had a little
battle with git and lost...

Reported-by: James Cloos <cloos@jhcloos.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-13 20:54:24 +01:00
Chris Wilson
ba406866be stroke: Rely on the tessellator to remove self-intersections
As handling joins/caps between line segments shorter than
half_line_width is tricky.

Rather than also fixing the bug in traps, remove that code. The plan is
to avoiding hitting the traps code, short-circuiting several steps along
the fast rectangular paths.

Fixes line-width-overlap.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-13 16:41:28 +01:00
Chris Wilson
279f6ceb59 Only reduce the clip if it is not in active use for the operation
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-13 13:15:36 +01:00
Chris Wilson
d391f0908c pdf: composite-rectangles now require freeing after use
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-13 12:33:16 +01:00
Chris Wilson
afe84fa77f pdf: Compute fill-stroke extents first before trying to use it to set the clip
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-13 12:09:08 +01:00
Chris Wilson
487c5e4d3a recording: replay_all is meant to mean REPLAY && ALL!
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-13 11:54:19 +01:00
Chris Wilson
73b87334a4 surface: Don't modify operator
Specifically don't transform SOURCE into a CLEAR as the paginated
backends may not be able to handle the new operator.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-13 11:50:27 +01:00
Chris Wilson
a37ed264ed pdf: Propagate NOTHING_TO_DO
It is taken care of by the higher layers.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-13 11:38:03 +01:00
Chris Wilson
dea24ef012 surface: propagate internal statuses
They are internal and used as such, but we still need to prevent them
from escaping into the public domain.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-13 11:34:31 +01:00
Chris Wilson
ed324fb3a1 recording-surface: Don't store the transient error when returning the path
As we report the status back to the caller who then decides whether to
take appropriate action.

"Fixes" user-font.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-13 11:22:31 +01:00
Chris Wilson
9d5d46e846 bo-rect: One step too far...
Fixes a1-rasterisation-rectangles.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-13 11:08:58 +01:00
Chris Wilson
4862aadb0f surface-wrapper: Initialise clip to NULL
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-13 11:08:58 +01:00
Chris Wilson
1ccd269a3f skia: Update to use cairo_backend_t interface
Still hopelessly broken. Requires compiling cairo to use static linking
and then still requires manual linkage to workaround libtool. Lots of
functionality is still absent - we need to either find analogues to some
Cairo operations or implement fallbacks - but it is sufficient to
investigate how Skia functions in direct comparison with Cairo for
tessellation/rasterisation.

Caveat emptor.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-13 09:58:02 +01:00
Chris Wilson
e849e7c929 image: move surface definition to new header for subclassing
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-13 09:54:28 +01:00
Chris Wilson
ee001b0b9f bo-rect: Micro-optimisation
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-13 09:31:53 +01:00
Chris Wilson
be1ff2f45f xlib: Set the clip_region for glyphs
Broken (never set!) since the clipping overhaul. We could emulate the
xcb code to avoid setting it unnecessarily...

Fixes partial-clip-test.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-12 20:36:13 +01:00
Chris Wilson
e7fcbed63a bo: Perform an initial bucket sort on the start events
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-12 20:25:59 +01:00
Chris Wilson
64bcabfe4b tor: Micro-optimise
Inline sub-step edges and combine non-zero/even-odd paths by using a
winding_mask.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-12 20:25:59 +01:00
Chris Wilson
02da8c7efb default-context: Tidy push-group
Fix a couple of instances of the older style clipping code.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-12 20:25:59 +01:00
Chris Wilson
a3d2d5b42b script: Remove reference to image-surface-private
That header doesn't exist yet.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-12 20:25:59 +01:00
Chris Wilson
deb88cca13 recording: do not reduce required clips
When painting with an unbound source, we would miss that the clip
extents were smaller than the mask extents and remove the solitary clip
(believing we were bound by a tight mask). For painting this is
obviously wrong, and due to a combination of bugs that set the mask to
the bound extents and then the failure to spot when that mask was larger
than the clip.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-10 14:06:16 +01:00
Chris Wilson
69c1ec9f13 script: Compile fix
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-10 14:06:16 +01:00
Chris Wilson
34ce4680d1 fixed: Allow the implicit close of the last fill path to complete a fill-box
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-10 10:23:51 +01:00
Chris Wilson
f8a3038008 tor: update is-vertical along with min-height
Similar to the minimum height property, is-vertical can only change
after an insertion or deletion event. So we only need to update the
flags after one of those events, so simply update it along side
min-height.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-10 10:23:27 +01:00
Chris Wilson
2ef3a50a84 tor: Fix mergesort to handle doubly-linked list
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-09 19:02:43 +01:00
Chris Wilson
b823d4d28f tor: trivial changes
Some trivial cleanups that escaped my noticed during a tired review.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-09 19:02:36 +01:00
Chris Wilson
17e34b6eab bo-rectangular: Correctly mergesort a doubly-linked list
Saves having to fixup the pointers afterwards by only having to update
them on the list boundaries during merge.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-09 17:59:08 +01:00
Chris Wilson
a4e4e2bdd7 bo-rectangular: Use a mergesort to speedup insertion
However, this is only useful for inserting multiple boxes within the
pixel, so we maintain the cached insert cursor as this speeds up the
general case (and aides this optimisation as well).

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-09 17:08:02 +01:00
Chris Wilson
014e5e5ec1 bo-rectangular: Eliminate allocation for pqueue
Since we only allocate a pointer to the rectangle after it is started
and so decoupled from the start queue, we reuse the memory allocated for
the start queue for the stop binary heap.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-09 16:06:50 +01:00
Chris Wilson
323e48f8ec fill: A horizontal/vertical line is also a degenerate fill box
Since we discard empty fill boxes whilst filling, we can also treat
horizontal/vertical lines as a filled box and so proceed with the
rectangular fast path in the presence of
  cairo_rectangle (x, y, w, h)
with w == 0 || h == 0.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-09 16:06:50 +01:00
Chris Wilson
2d8c63671a build: Add a missing cairo-backend-private.h
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-09 16:06:50 +01:00
Uli Schlachter
5a26018313 map_to_image: Verify the given extents
User shouldn't be able to use extents that are not completely inside of the
surface's extents.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-08-08 21:06:09 +02:00
Uli Schlachter
03cda5c0e5 xlib-xcb: Fix a double free in surface_unmap
cairo_surface_unmap_image() destroys the image that was passed to it. Since
xlib-xcb calls cairo_surface_unmap_image() again for the underlying xcb surface,
the surface was destroyed twice.

Work around this problem by incrementing the image's reference count via
cairo_surface_reference().

No idea why I didn't catch this problem when implementing these functions, I'm
sure I ran the relevant tests. :-(

lt-cairo-test-suite: cairo-surface.c:853: cairo_surface_destroy: Assertion
`((*&(&surface->ref_count)->ref_count) > 0)' failed.

Fixes: map-to-image-fill map-bit-to-image map-all-to-image

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-08-08 21:06:09 +02:00
Uli Schlachter
73e9307855 cairo.h: Document CAIRO_DEVICE_TYPE_INVALID
Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-08-08 21:06:09 +02:00
Chris Wilson
2d79276c49 tor: Inline reverse insertion sort for handling intersections
The majority of intersections are with the nearest neighbour only, or
within a few neighbours (in a dense intersection of lines) so if walk
the active list backwards and find the new place to insert upon an
intersection it is faster than performing a mergesort afterwards.

Given enough intersections, the win is quite huge (15-20% on many-strokes).

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-08 08:12:14 +01:00
Chris Wilson
221c117f5d tor: First perform a bucket sort before merge the sub-edges from the polygon
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-07 23:20:46 +01:00
Chris Wilson
307cb2a973 util: Add show-polygons
Another variant of the utility apps that understand the output of
_cairo_debug_print_polygon().

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-07 09:02:46 +01:00
Andrea Canciani
588e5a24fa clipper: Fix crashes
The end of the clip path list is marked with NULL, so we should stop
iterating paths when we reach it.

The assertion was meant to check if paths had the same content, not if
they have the same address.

Fixes clip-fill-rule and clip-twice in cairo-quartz.
2011-08-05 19:44:33 +02:00
Chris Wilson
9ef003c5fc clipper: Don't emit an empty clip-path for no clip boxes
If there are no clip boxes, we do not need to emit an empty clip which
only confuses the users of the surface-clipper.

Spotted by Andrea Canciani and cairo-quartz

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-05 18:23:21 +01:00
Adrian Johnson
8a6d7643f0 subsets: use show_text_glyphs supplied utf8 to determine latin character
PS files printed from PDF do not have a cmap in the subsetted
fonts. If the unicode mapping has ben supplied by _show_text_glyphs we
should use this instead of the reverse lookup to determine if the
glyph is a latin chartacter.
2011-08-06 00:24:55 +09:30
Adrian Johnson
1a4714b61f ps: use show_text_glyphs
to ensure that when the PS is converted to PDF the text can be extracted.
2011-08-06 00:23:14 +09:30
Adrian Johnson
b11b89e8e0 pdf: check if smask is bilevel and encode as such 2011-08-05 22:09:57 +09:30
Adrian Johnson
16bc8d9361 image: check if A8 image is bilevel when analyzing transparency 2011-08-05 21:17:07 +09:30
Chris Wilson
5ab1eced5f bo-rectangular: handle in==out specifically for the single box case
In this case we do not need to copy anything, but may still need to
re-orientate the box.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-08-05 09:48:14 +01:00
Nis Martensen
0e135d9f5a Mark the new API as such
cairo_surface_create_similar_image, cairo_surface_map_to_image and
cairo_surface_unmap_image were added in
a69335a84e.
2011-08-05 08:47:52 +02:00
Uli Schlachter
95d6235bbe Clarify the API docs for the newest functions
Recently cairo_surface_create_similar_image(), cairo_surface_map_to_image() and
cairo_surface_unmap_image() were introduced. However, the documentation was
slightly misleading and recommended a wrong usage.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-08-04 21:18:13 +02:00
Uli Schlachter
78f7db1a7f xlib-xcb: Implement the new backend functions
This implements create_similar_image, map_to_image and unmap.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-08-04 21:10:09 +02:00