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>
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>
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>
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>
I forgot to proof-read the patch before pushing and forgot I had left in
some damage from trying to get skia to link using libtool.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
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>
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>
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>
It is convenient if the user can simply enable the use of the commented
write-to-png operation just by removing the preceding '%'. However, to
do so we need to make sure that the line is stack-neutral and so need to
pop the surface that we place onto the stack after writing the png.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
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>
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>
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>
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>
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>
A variant of many-strokes tries to answer the question of how much
overhead is there in stroking, i.e. if we fill an equivalent path to a
set of strokes, do we see an equivalence in performance?
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
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>
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>