Commit graph

7790 commits

Author SHA1 Message Date
Chris Wilson
c50c8b90c0 Move _cairo_error() to a standalone header
A pending commit will want to include some utility code from cairo and
so we need to extricate the error handling from the PLT symbol hiding.
2010-01-22 22:30:43 +00:00
Chris Wilson
558f950170 surface-wrapper: Avoid copying patterns and clips unless transformed.
An older variant of the fixes for moving the device transformation out
of the surface layer, but languished in a side branch. The only benefit
of this patch is that it avoids the copy where possible.
2010-01-22 22:30:43 +00:00
Chris Wilson
8f69481722 gitignore: refresh
Add forgotten local targets to .gitignore
2010-01-22 22:30:43 +00:00
Eric Anholt
5914e99572 [gl] Cache a temporary glyph compositing mask for reuse later.
Cuts firefox-talos-gfx time from 56 seconds to 43 seconds.
2010-01-22 09:21:36 -08:00
Eric Anholt
1bf0f64ee7 [gl] Composite component-alpha glyphs directly instead of through a mask.
Cuts gnome-terminal-vim time from 58 seconds to 20.
2010-01-22 09:00:29 -08:00
Eric Anholt
12d521df8a [gl] Use GL_RGBA textures even for CAIRO_CONTENT_COLOR.
When the texture is GL_RGB, GL_CLAMP_TO_BORDER (EXTEND_NONE) fills the
border color alpha channel with 1, when the whole reason we were using
the border color was to get a color and alpha of 0.  We're forced to
use GL_RGBA textures and do extra work to fill in the alpha channel of
them to 1 to get cairo's desired behavior.

This fixes a failure in rotate-image-surface-paint and 4 other
testcases.  No performance difference in firefox-talos-gfx.
2010-01-21 13:19:17 -08:00
Eric Anholt
e316cb9db5 [gl] Add support for component-alpha glyph rendering.
This is done using a mask and the two-pass trick I did for EXA.  Fixes
text-antialias-subpixel.
2010-01-21 12:43:20 -08:00
Eric Anholt
ceeb7e7e70 [gl] Use the UNSUPPORTED() macro in more places for fallback debugging. 2010-01-20 11:23:20 -08:00
Andrea Canciani
5d9e2fd84b [quartz] Leftbehind change from a39075c88f
This commit completes the change in a39075c88f.
It removes unused variables and corrects the extents rect computation.
2010-01-15 16:30:07 +01:00
Chris Wilson
6950b233e4 qt: Make flush() robust.
Hanno Meyer-Thurow reported in

  http://bugs.freedesktop.org/show_bug.cgi?id=26063
  [PATCH] various fixes to cairo-qt

a few issues related to _cairo_qt_surface_flush() where firefox was
crashing after being built to use cairo-qt.

This is an amalgam of those patches that hopefully address the issue.
2010-01-15 14:27:58 +00:00
Chris Wilson
4e315d8472 pattern: Premultiply color-stop when converting to solid
Fixes: test/linear-uniform
       https://bugzilla.mozilla.org/show_bug.cgi?id=539165
       Bug 539165 - gradients with a single stop do not have their color
                    multiplied by the alpha.

As reported by Jeff Muizelaar, we regressed in 2d790daa as the
color-stops are not premultiplied and so could not be treated as an
ordinary cairo_color_t. Instead we have to create a intermediate
cairo_color_t from the original values in order for the
premultiplication to be performed.
2010-01-15 12:25:53 +00:00
Chris Wilson
f40560a9bb test: Add linear-uniform
Jeff reported a regression found by Mozilla whereby a uniform gradient
was not being premultiplied on conversion to a solid pattern.

  https://bugzilla.mozilla.org/show_bug.cgi?id=539165
  [Bug 539165] gradients with a single stop do not have their color
               multiplied by the alpha.
2010-01-15 12:25:53 +00:00
Chris Wilson
e22c02dbae test: Add degenerate-arcs
A simple test to ensure that using degenerate-arcs such as when drawing
a rounded rectangle with radii=0 construct a proper path.
2010-01-15 12:25:53 +00:00
Andrea Canciani
a39075c88f [quartz] Fix generic masking
Masking with unbounded operators was broken because an incorrect
transformation was applied to inverted mask used for the fixup.
2010-01-15 11:04:28 +01:00
Andrea Canciani
27701ed844 [quartz] Approximate dense dashing patterns
Quartz doesn't try to approximate dash pattern even if they are well
beyond suface sampling frequency. Approximating dash patterns when their
density is too high avoids looping indefinitely in these degenerate cases.
2010-01-15 11:04:27 +01:00
Andrea Canciani
ad7ab00c10 [quartz] Improve A8 and A1 support
Use A8 images as alpha-only masks intread of greyscale images.
Add support to A1 images (they were ignored before).
2010-01-15 11:04:27 +01:00
Adrian Johnson
f3b3a5c43f Fix bug in _cairo_ft_index_to_ucs4
Previously it would miss the first character causing the space glyph to
return 0x00A0 instead of 0x0020.
2010-01-15 07:47:30 +10:30
Eric Anholt
e26e2c8cc4 [gl] Fix the color bits of CAIRO_CONTENT_ALPHA surface patterns to be 0.
Fixes surface-pattern-operator and alpha-similar.
2010-01-14 10:07:46 -08:00
Eric Anholt
520945603c [gl] Remove the special-casing of acquiring a pattern surface.
_cairo_pattern_acquire_surface() should do fine at it, and matches
what cairo-drm-i915 does.
2010-01-14 10:00:37 -08:00
Eric Anholt
dbf9faf823 [gl] Use GLSL for fill_rectangles when available.
Ultimately, we want all of our paths to use shaders when they are
exposed -- it brings us closer to GL 3.0 compatibility and it should
reduce the work that GL drivers have to do per operation to compute
the required hardware state.
2010-01-14 09:28:58 -08:00
Eric Anholt
57341cf5ac [gl] Use ADD instead of SOURCE when making a mask for overlapping glyphs.
The whole point of making the mask was to avoid overwriting one glyph
with the data from another.  Whoops.

Fixes ft-show-glyphs-positioning, text-rotate, overlapping-glyphs,
clip-text.
2010-01-13 14:28:23 -08:00
Eric Anholt
6e0a63102e [gl] Clear the current_target cache when binding a framebuffer in creation.
Failing to do so meant that we might not re-bind the framebuffer to
the correct one if we didn't follow up surface creation with drawing
to it.

Fixes many testcases.  Thanks to T. Zachary Laine for tracking down
that the current_target was the source of these issues.
2010-01-13 14:28:22 -08:00
T. Zachary Laine
ad0f4bee19 [gl] Clear the is_clear flag on the temporary glyph mask we create.
Normally is_clear is cleared by the caller of one of the 5 basic
entrypoints, but in this temporary surface usage nobody else can do it
for us.

Fixes ft-show-glyphs-table, user-font-rescale, and select-font-face.
2010-01-13 14:28:22 -08:00
T. Zachary Laine
384e50d858 [gl] Removed repeated lines of source
The two removed lines are redundant with code a few lines above them.
2010-01-13 14:28:22 -08:00
Eric Anholt
515ccb63a6 [gl] Fix the glyph cache full flush to really try again.
Previously, the initial error handling would dump through to software
fallback instead of retrying in the following code.
2010-01-13 14:28:22 -08:00
Chris Wilson
4aae4bfa8f test: Fix typo in path-stroke-twice reference image
Sigh. I committed the reference image with the name
path-stroke-twice-ref.png.
2010-01-12 17:11:15 +00:00
Chris Wilson
74ea4c9080 path: Do not remove anti-parallel line segments in case we are stroking
Bug 26010 - cairo_line_to optimizes away path segments
  http://bugs.freedesktop.org/show_bug.cgi?id=26010

As exercised by path-stroke-twice, we incorrectly optimise away a line
segment if the path doubled back upon itself. This is very reminiscent
of the optimisation bug for replacing curve-to with line-to.
2010-01-12 17:07:30 +00:00
Chris Wilson
a5dd5a6069 test: Add path-stroke-twice
Exercises a bug found by alois@astro.ch, whereby we inadvertently remove
a line segment when the path doubles back upon itself.

  Bug 26010 - cairo_line_to optimizes away path segments
  http://bugs.freedesktop.org/show_bug.cgi?id=26010
2010-01-12 17:07:28 +00:00
Chris Wilson
4204605813 type1: Destroy the output stream.
mpsuzuki spotted that the output stream for the subset was not being
destroyed on the error path - on closer inspection, it wasn't destroyed
along the normal path either and may never have been correctly
initialised to NULL on an earlier error.

Reported-by: mpsuzuki@hiroshima-u.ac.jp
2010-01-08 11:58:15 +00:00
Chris Wilson
41a24d822a trace: Correctly encode octal values.
How embarrassing.
2010-01-07 11:58:01 +00:00
M Joonas Pihlaja
3ae9d04c6d [stroker] Fix off-by-one memory allocation in _tessellate_fan().
The number of points in a triangle fan was miscomputed because
it was computing the number of line segments rather than points
in the fan.  Now we include the final point of the fan correctly
in the count.

This fixes https://bugs.webkit.org/show_bug.cgi?id=33071 as
reported by Benjamin Otte.  A derived test case was not added
to the cairo test suite since the bug is difficult to trigger in
a reliable way which causes visible results (as opposed to
silent heap corruption.)

The easiest way of triggering the bug is to stroke a line
using a large line width and round caps or joins.
2010-01-01 20:13:33 +02:00
Chris Wilson
a0ea0b63fd arc: Just emit a line-to if radius is zero.
In order to be consistent with the semantics of cairo_arc() using a
radius of 0 should simply degenerate into a line-to.

Reported-by: Benjamin Berg
2009-12-30 16:21:50 +00:00
Andrea Canciani
21560b3ec6 [trace] Fix compilation when FreeType is disabled
cairo-trace needs some headers which are missing if freetype is
not enabled. Adding them explicitly fixes compilation.
2009-12-30 14:08:38 +01:00
Tim Janik
393d2d9c91 Fixed documentation typo. 2009-12-28 15:25:57 +01:00
M Joonas Pihlaja
e2d75203c5 [dirty] Add more missing surface dirtying notifications.
Now that the image surface actually cares about
cairo_surface_mark_dirty() we're hitting cases where
we've forgotten to mark surfaces dirty.
2009-11-29 15:56:26 +02:00
M Joonas Pihlaja
b76565d2f4 [test] Don't use uninitialised data in surface-source.c
The draw_pattern() function assumed the incoming surface
was clear, but it's not.  Explicitly clear the surface first.
2009-11-29 15:40:30 +02:00
M Joonas Pihlaja
e09b754fdd [gstate] Change dash offset normalisation to preserve offsets in range.
We have a test case get-and-set which wants to see whatever it puts
into a cairo_t come back out again, but at the same time cairo-gstate
wants to range reduce the dash offset it's given to a sane range.
This patch changes the range reduction algorithm to always normalize
to a non-negative dash offset and not touch dash offsets which are
already in range.
2009-11-29 13:17:52 +02:00
M Joonas Pihlaja
b394240941 [test] Add missing mark_dirty() calls to test cases.
A recent optimisation has added a flag to the image
surface which is used to track whether the surface
is clear or not.  This makes it imperative that clients
call cairo_surface_mark_dirty() if they use cairo to
allocate their pixel buffers and then proceed to
initialize them without telling cairo about it.
2009-11-29 13:17:51 +02:00
Adrian Johnson
9ddf14cfd5 PDF: Don't specify colorspace in JPEG2000 image dictionary
PDF uses the colorspace specified in the JPEG2000 image.
2009-11-29 10:40:18 +10:30
Benjamin Otte
d58560bda8 Satisfy make check 2009-11-27 21:04:55 +01:00
Benjamin Otte
16fffc5c05 Apply device transform in surface wrapper 2009-11-27 21:04:48 +01:00
Adrian Johnson
02d7e123d6 PDF: Remove extraneous \n from end of jpeg/jp2 data
PDF requires a '\n' between the end of stream data and the "endstream"
that is not included in the stream length. Ensure this is always added
in _close_stream where it is not included in the stream length.

Previously the jpeg/jp2 embedding functions were adding the '\n'. This
resulted in the '\n' becoming part of the stream data.
2009-11-27 23:11:56 +10:30
Adrian Johnson
4fc7bdaed6 PS: Add some missing pdf-operators flushes 2009-11-26 21:17:52 +10:30
Benjamin Otte
3f0c9afa97 [clip] Don't ignore outermost clip when it clips everything
Fixes testcases clip-stroke-no-op and clip-fill-no-op added in
0d8a04ef47
2009-11-25 16:02:20 +01:00
Benjamin Otte
0d8a04ef47 test: Add cases to exercise clipping after no-ops
Whilst investigating:

  Bug 31788: SVG <line> with y1 == y2 and both with fractional
             part don't render
  https://bugs.webkit.org/show_bug.cgi?id=31788

I found that it can be reduced to a no-op clip following a no-op stroke
or fill. These conditions are exercised here and are shown to be a bug
introduced in the 1.9.x development series.
2009-11-25 10:53:39 +00:00
Andrea Canciani
26e9f14906 Improve stroking of densely dashed styles
Add some auxiliary functions to cairo-stroke-style to compute
properties of the dashed patterns (period, "on" coverage) and to
generate approximations when the dash pattern is sub-tolerance.
These functions are used in cairo-path-stroke to simplify dash
patterns stroked by cairo.
Fixes dash-infinite-loop
See http://bugs.freedesktop.org/show_bug.cgi?id=24702
2009-11-11 18:21:04 +01:00
Andrea Canciani
9c24288c82 Revert "[test] Reorder dash-infinite-loop to not hit a runaway allocation."
The infinite loop problem in _cairo_stroker_dash_start is solved by
commit ee02f3484899527380df94c00f40da87f41660ea, so hitting that
problem is not possible anymore and dash-infinite stroke always
hit the memory intensive loops.
This reverts commit 29432d3d32.
2009-11-11 16:45:19 +01:00
Andrea Canciani
cc2d263066 Improve stroke offset computation
The stroke offset was forced to be positive because stroking code
wants to be able to decrement it until it finds the first dash to be
drawn. This can lead to long (almost infinite) loops if the offset is
positive but huge compared to the total length of the dash pattern.
Computing the offset this way guarantees that it's always the smallest
non-negative equivalent offset.
2009-11-11 16:44:23 +01:00
Andrea Canciani
e436a57c22 Fix odd length dashing with negative offset
When computing an equivalent offset, a wrong total dash length was
used when the dash elements were odd and more than 1.
Doubling the total dash length whenever they are odd is needed to
correctly compute the new offset.
Fixes dash-offset.
2009-11-11 16:39:30 +01:00
Andrea Canciani
b1a7639465 Add dash-offset test
Stroking a dash pattern of odd length with a negative offset is broken
(except when the pattern is composed by a single dash).
2009-11-11 16:38:29 +01:00